通信程序范文10篇

时间:2023-03-25 15:38:03

通信程序

通信程序范文篇1

1.1应急通信的定义

应急通信是指在出现自然或人为的突发性紧急情况时,综合利用各种通信资源,保障救援、紧急救助和必要通信所需的通信手段和方法,实现通信的机制。应急通信并不是独立存在的一种全新的新技术,而是各种通信技术、通信手段在紧急情况下的综合运用,其核心就是紧急情况下的通信。应急通信不仅是单纯的技术问题,还涉及管理方面。应急通信由于其不确定性,对通信网络和设备提出了一些特殊要求,这些网络和设备从技术方面提供了通信技术手段的保障。但在管理方面,还需要建立完善的应急通信管理体系,针对不同场景建立快速响应机制,协调调度最合适的通信资源,提供最及时有效的通信保障。应急通信网(EmergencyCommunicationNetwork,ECN)是指为应对突发性大型自然灾害或公共事件而快速建立的临时性通信网络,为救灾组织及人员保证通信畅通,最大限度地降低灾难损失、维护社会安全和稳定。ECN主要用于遭受地震、台风等重大自然灾害以及发生突发事件或恐怖袭击事件中[2]。

1.2研究应急通信的目的及意义

中国是一个灾难多发、频发的国家,特别是自然灾害时有发生,给国民经济和人民生命财产造成了很大的损失。汶川地震、舟曲泥石流等,这些灾难,既考验了通信部门的应急响应能力,也考验了通信网络的应急通信保障能力。从这些经验教训中,我们逐步意识到只有在平时完善应急通信体系,达到应急通信保障的要求,才能在紧急关头发挥它的作用,减少人民生命和财产的损失。应急通信系统是为满足各类紧急情况下的通信需求而产生的,而自然灾害、卫生事件、尤其是社会事件等突发公共安全事件发生的地点和规模都无法提前预知和准备,各类紧急情况具有如下共同特点:需要应急通信的时间一般不确定,人们无法进行事先准备,如地震、海啸、火灾、台风、泥石流等突发事件;需要应急通信的地点不确定;进行应急通信时,需要什么类型的网络不确定[3]。

1.3应急通信的发展趋势及前景

近年来,恐怖袭击事件时有发生,给相关国家公共安全造成了严重威胁,然而应急通信涵盖的应用面相当广泛,除了公众安全、抢险救灾之外,还有战备通信等。在战争中,占领或摧毁敌方的通信设施是获取胜利的重要环节这一,这也就从根本上决定了我国的应急通信要使用自己的应急通信技术。尤其是无线电应急通信技术,是应急通信的主体和核心,积极吸取国外先进的技术为我所用,并根据我国应急通信的实际情况,发展我国的应急通信技术。

2卫星通信概述

2.1基本概念及原理

卫星通信是利用人造地球卫星作为中继站转发或反射无线电信号,在两个或多个地球站之间进行的通信。地球站是指设在地球表面(包括地面、海洋和大气中)的无线电通信站[1]。卫星通信系统是由空间部分(通信卫星)和地面部分(通信地面站)两大部分构成的。通信卫星实际上就是一个悬挂在空中的通信中继站[2]。它居高临下,视野开阔,只要在它的覆盖照射区以内,不论距离远近都可以通信,通过它转发和反射电报、电视、广播和数据等无线信号。静止卫星与地球相对位置的示意图如图1-1所示。图1-1静止卫星配置的几何关系从卫星向地球引两条切线,切线夹角为17.34°,两切点间弧线距离为18101km,在这个卫星电波波束覆盖区内的地球站均可通过该卫星来实现通信。若以120°的等间隔在静止轨道上配置三颗卫星,则地球表面除了两极未被卫星波束覆盖外,其他区域均在覆盖范围内,而且其中部分区域为两个静止卫星波束的重叠地区,因此,借助于在重叠区内的地球的中继,可以实现在不同卫星覆盖区内地球站之间的通信[3]。由此可见,只要用三颗等间隔配置的静止卫星就可以实现全球通信,这一特点是任何其他通信方式不具备的。

2.2主要特点

卫星通信具有以下优点:通信距离远,且费用与通信距离无关;覆盖面积大,可进行多址通信;通信频带宽,传输容量大,适于多种业务传输;通信线路稳定可靠,通信质量高;通信电路灵活;机动性好;可以自发自收进行监测。同时也存在如下缺点:通信具有广播特性,较易被窃听;通信时延较长;通信链路易受外部条件影响;存在日凌中断和星蚀现象等[4]。

2.3应急卫星通信网

卫星通信是地球站之间通过通信卫星转发器所进行的微波通信。面对地震、台风等自然灾害,卫星通信发挥着无可替代的重要作用。其受自然条件的影响极小,卫星电话等通信手段可以作为抢险救灾临时通信的主要设备。在陆地等常规通信传输系统中断或其他通信线缆未铺设到之处,它能够帮助人们实现信息传递。我国幅员辽阔、经济相对落后,若与发达国家交战,恐怕难以掌握制电磁权与制空权。从这些实际情况出发,应急卫星通信网成为比较适合我国国情的应急通信系统。在汶川地区发生的特大地震,地面通信设施遭到严重破坏,成为信息孤岛,而卫星通信在这次的救灾工作中发挥了重大作用。灾区与外界的首次通信联络靠的是卫星电话,地面移动通信网的恢复靠的是卫星基站,现场采访、直播报道靠的是通信卫星和移动转播车,现场指挥靠的是卫星电话、应急通信车、背负式卫星通信小站,堰塞湖无人视频监测、灾区可视电话开通靠的是宽带卫星数据采集终端。[5]针对应急通信的需求,应急卫星通信网采用VSAT卫星通信、海事卫星等远程接入方式,结合集群通信、北斗卫星、视频会议等多种业务接入手段,提高应急通信能力。

2.4卫星通信技术在汶川地震中的应用

汶川地震严重破坏了地面公用电信网,造成大面积通信网络的全面中断,该区域内原有的有线、无线等各种通信联络方式都无效,灾区的指挥调度和救援工作受到很大影响,在这种情况下,卫星通信在汶川地震救援工作中,发挥了巨大的作用。各种卫星通信车辆、VAST终端站、卫星手机等源源不断地进入灾区,为前线救灾构建起了卫星通信网络,实现灾后通信“四个第一”:即利用卫星宽带系统送出重灾区映秀镇的第一段视频,利用海事卫星从震区打出第一个电话,利用卫星传输链路,开通震后的第一个移动基站,利用卫星应急通信指挥车和海事卫星电话,协助建立起第一个临时应急通信指挥系统。[6]在汶川地震中,海事卫星和北斗一号卫星通信系统得到了比较多的应用。国家抗震救灾总指挥部、各级政府和相关救援部门使用各类海事卫星近438台,同时,还有一些相关应急通信队伍手中也拥有大量海事卫星终端。据估计,大约有2000部海事卫星设备为汶川地震救灾现场提供服务。目前,海事卫星通信系统具有全球覆盖、全天候、可移动、全方位、带宽大等特点,主要业务种类有语音、数据、传真、视频传输等。地震发生后,中国交通通信中心与国际海事卫星组织紧急沟通,为中国震区争取到了两倍于之前的信道资源,保证了灾区海事卫星设备和通信能力[7]。除海事卫星和北斗一号卫星通信系统外,鑫诺、全球星、铱星、中星等卫星通信系统也在汶川地震中发挥了重要作用,可以毫不夸张地说,在汶川地震抢险救灾工作中发挥巨大作用是我国绝大多数可以调用的、集中在灾区的卫星通信设备。这次抗震救灾活动证明了,卫星通信具有地面网络所不具备的备份性、广泛覆盖性和灵活性,不依赖地面通信条件,不受距离和地形的限制,不需要布设通信基站,在地面通信网络遭受破坏时,或在没有光纤、没有无线通信条件下,卫星通信仍然可以进行语音、数据和视频等通信服务,甚至在不具有电力条件的地方,也可保障应急通信的畅通。

通信程序范文篇2

第一条为了规范通信行政处罚行为,保障和监督各级通信主管部门有效实施行政管理,依法进行行政处罚,保护公民、法人和其他组织的合法权益,根据《中华人民共和国行政处罚法》及相关法律、行政法规,制定本规定。

第二条公民、法人或者其他组织实施违反通信行政管理秩序的行为,依照法律、法规或者规章的规定,应当给予行政处罚的,由通信主管部门按照《中华人民共和国行政处罚法》和本规定的程序实施。本规定所称通信主管部门,是指信息产业部、国家邮政局、省、自治区、直辖市通信管理局、邮政(管理)局及法律、法规授权的具有通信行政管理职能的组织。

第三条各级通信主管部门实施行政处罚应当遵循公正、公开的原则。

第二章管辖

第四条通信行政处罚由违法行为发生地的通信主管部门依照职权管辖。法律、行政法规另有规定的,从其规定。

第五条上级通信主管部门可以办理下级通信主管部门管辖的行政处罚案件;下级通信主管部门对其管辖的行政处罚案件,认为需要由上级通信主管部门办理时,可以报请上一级通信主管部门决定。

第六条两个以上同级通信主管部门都有管辖权的行政处罚案件,由最初受理的通信主管部门管辖;主要违法行为发生地的通信主管部门管辖更为适宜的,可以移送主要违法行为发生地的通信主管部门管辖。

第七条两个以上同级通信主管部门对管辖发生争议的,报请共同的上一级通信主管部门指定管辖。

第八条通信主管部门发现查处的案件不属于自己管辖时,应当及时将案件移送有管辖权的通信主管部门或者其他行政机关管辖,受移送的通信主管部门对管辖有异议的,应当报请共同的上一级通信主管部门指定管辖。违法行为构成犯罪的,移送司法机关管辖。

第三章行政处罚的决定

第九条通信行政执法人员(以下简称执法人员)依法进行调查、检查或者当场作出行政处罚决定时,应当向当事人或者有关人员出示行政执法证件。

第十条当事人进行口头陈述和申辩的,执法人员应当制作笔录。通信主管部门对当事人提出的事实、理由和证据应当进行复核,经复核能够成立的,应当采纳。通信主管部门不得因当事人申辩而加重处罚。

第十一条经当事人口头或者书面申请,执法人员、听证主持人有下列情形之一的,应当回避:

(一)是本案当事人或者委托人的近亲属;

(二)与本案有利害关系;

(三)与本案当事人有其他关系,可能影响对案件公正处理的。

第十二条当事人提出回避申请,应当说明理由。执法人员、听证主持人应当将当事人的回避申请报告本部门负责人,由本部门负责人决定其是否回避;本部门负责人担任听证主持人的,由本机关负责人决定其是否回避。

第一节简易程序

第十三条违法事实确凿并有法定依据,对公民处以50元以下、对法人或者其他组织处以1000元以下罚款或者警告的行政处罚的,可以当场作出处罚决定。

第十四条执法人员当场作出行政处罚决定的,应当填写统一编号的《行政处罚(当场)决定书》,当场交付当事人,并告知当事人,如不服行政处罚决定,可以依法申请行政复议或者提起行政诉讼。

第十五条执法人员应当自作出行政处罚(当场)决定之日起3日内向所属通信主管部门报告并备案。

第二节一般程序

第十六条实施通信行政处罚,除适用简易程序外,应当适用一般程序。

第十七条除依法可以当场决定行政处罚外,执法人员发现公民、法人或其他组织有违法行为依法应当给予通信行政处罚的,应当填写《行政处罚立案呈批表》报本机关负责人批准。

第十八条符合下列条件的,应当在7日内立案:

(一)有违法行为发生;

(二)违法行为依照法律、法规和规章应受通信行政处罚;

(三)属于本级通信主管部门管辖;

第十九条通信主管部门应当对案件进行全面、客观、公正地调查,收集证据;必要时依照法律、法规和规章的规定,可以进行检查。证据包括书证、物证、证人证言、视听资料、鉴定结论、勘验笔录和现场笔录。证据必须查证属实,才能作为认定事实的依据。

第二十条执法人员调查收集证据或者进行检查时不得少于二人。执法人员在调查案件时询问证人或当事人(以下统称被询问人),应当制作《询问笔录》。笔录经被询问人阅核后,由询问人和被询问人签名或盖章。

第二十一条通信主管部门为调查案件需要,有权依法进行现场勘验,对重要的书证,有权进行复制。执法人员对与案件有关的物品或者场所进行勘验检查时,应当通知当事人到场,制作《勘验检查笔录》,当事人拒不到场的,可以请在场的其他人作证。

第二十二条通信主管部门在调查案件时,对专门性问题,交由法定鉴定部门进行鉴定;没有法定鉴定部门的,应当提交公认的鉴定机构进行鉴定。鉴定人进行鉴定后,应当制作《鉴定意见书》。

第二十三条通信主管部门收集证据时,可以采用抽样取证的方法。在证据可能灭失或者以后难以取得的情况下,经本通信主管部门负责人批准,可以先行登记保存。对证据进行抽样取证或者登记保存,应当有当事人在场。当事人不在场或者拒绝到场的,执法人员可以请有关人员见证并注明。对抽样取证或者登记保存的物品,应当制作《抽样取证凭证》或《证据登记保存清单》。

第二十四条对先行登记保存的证据,应当在7日内作出下列处理决定:

(一)需要进行技术检验或者鉴定的,送交检验或者鉴定;

(二)依法不需要暂扣的物品,退还当事人;

(三)依法应当移交有关部门处理的,移交有关部门。

第二十五条执法人员在调查结束后,认为案件基本事实清楚,主要证据充分,应当制作《案件处理意见报告》,报本通信主管部门负责人审查。

第二十六条通信主管部门负责人对《案件处理意见报告》审核后,认为应当给予行政处罚的,通信主管部门应当制作《行政处罚意见告知书》,送达当事人,告知拟给予的行政处罚内容及事实、理由和依据,并告知当事人可以在收到该告知书之日起3日内,向通信主管部门进行陈述和申辩,符合听证条件的,可以要求该通信主管部门按照本章第三节的规定举行听证。

第二十七条案件调查完毕后,通信主管部门负责人应当及时审查有关案件调查材料、当事人陈述和申辩材料、听证会笔录和听证会报告书,根据情况分别作出予以行政处罚、不予行政处罚或者移送其他有关机关处理的决定。

第二十八条通信主管部门作出给予行政处罚决定的,应当制作《行政处罚决定书》。行政处罚决定书应当载明下列事项:

(一)当事人的姓名或者名称、地址;

(二)违反法律、法规或者规章的事实和证据;

(三)行政处罚的种类和依据;

(四)行政处罚的履行方式和期限;

(五)不服行政处罚决定,申请行政复议或者提起行政诉讼的途径和期限;

(六)作出行政处罚决定的通信主管部门的名称、印章和日期。

第二十九条通信行政处罚案件应当自立案之日起60日内办理完毕;经通信主管部门负责人批准可以延长,但不得超过90日;特殊情况下90日内不能办理完毕的,报经上一级通信主管部门批准,可以延长至180日。

第三节听证程序

第三十条通信主管部门拟作出责令停产停业(关闭网站)、吊销许可证或者执照、较大数额罚款等行政处罚决定之前,应当告知当事人有要求举行听证的权利。当事人要求听证的,应当组织听证。本条前款所称较大数额,是指对公民罚款1万元以上、对法人或其他组织罚款10万元以上;地方通信主管部门也可以按照省、自治区、直辖市人大常委会或者人民政府规定的标准执行。

第三十一条听证由拟作出行政处罚的通信主管部门组织。具体实施工作由其法制工作机构或者承担法制工作的机构负责。

第三十二条当事人要求听证的,应当在收到《行政处罚意见告知书》之日起3日内以书面或口头形式提出。口头形式提出的,案件调查人员应当记录在案,并由当事人签字。案件调查人员应当在当事人要求听证之日起3日内告知法制工作机构或者承担法制工作的机构,并将案卷一并移送。

第三十三条当事人提出听证要求后,法制工作机构或者承担法制工作的机构应当在举行听证7日前送达《行政处罚听证会通知书》,告知当事人举行听证的时间、地点、听证会主持人名单及可以申请回避和可以委托人等事项,并通知案件调查人员。

第三十四条当事人应当按期参加听证。当事人有正当理由要求延期的,经批准可以延期一次;当事人未按期参加听证并且未事先说明理由的,视为放弃听证权利。

第三十五条听证会参加人由听证主持人、听证记录员、案件调查人员、当事人及其委托人组成。听证主持人、听证记录员应当由法制工作机构工作人员或者其他相应工作人员等非本案调查人员担任。当事人委托人参加听证的,应当提交委托书。

第三十六条除涉及国家秘密、商业秘密或者个人隐私外,听证应当公开举行。

第三十七条当事人在听证中的权利和义务:

(一)有权对案件涉及的事实、适用法律及相关情况进行陈述和申辩;

(二)有权对案件调查人员提出的证据质证并提出新的证据;

(三)如实回答主持人的提问;

(四)遵守听证程序。

第三十八条听证应当按照下列程序进行:

(一)听证记录员宣布听证会纪律、当事人权利和义务。听证主持人宣布案由,核实听证参加人名单,宣布听证开始;

(二)案件调查人员提出当事人违法的事实、证据,说明拟作出的行政处罚的内容及法律依据;

(三)当事人或者其委托人对案件的事实、证据、适用的法律等进行陈述和申辩,可以向听证会提交新的证据;

(四)听证主持人就案件的有关问题向当事人、案件调查人员、证人询问;

(五)案件调查人员、当事人或者其委托人经听证主持人允许,可以就有关证据进行质问,也可以向到场的证人发问;

(六)当事人或者其委托人作最后陈述;

(七)听证主持人宣布听证结束。听证笔录交当事人审核无误后签字或者盖章。

第三十九条听证结束后,听证主持人应当依据听证情况,制作《行政处罚听证会报告书》并提出处理意见,连同听证笔录,报本通信主管部门负责人审查。

第四章行政处罚决定的送达和执行

第四十条行政处罚决定书应当在宣告后当场交付当事人,由当事人在送达回证上记明收到日期,签名或者盖章。当事人不在场的,应当在7日内依照民事诉讼法的有关规定,将行政处罚决定书送达当事人。

第四十一条当事人拒绝接收行政处罚决定书的,送达人应当邀请第三方单位的代表到场见证,并说明情况,将行政处罚决定书留其单位或者住所,在送达回证上记明拒收事由、送达日期,由送达人、见证人签名或者盖章,即视为送达。

第四十二条行政处罚决定依法作出后,当事人应当按照行政处罚决定书规定的内容、方式和期限,履行行政处罚决定。当事人对行政处罚决定不服申请行政复议或者提起行政诉讼的,行政处罚不停止执行,法律另有规定的除外。

第四十三条执法人员当场收缴罚款的,应当向当事人出具省级财政部门统一制发的罚款收据。通信主管部门应当在法定期限内将罚款交付指定银行。

第四十四条对生效的行政处罚决定,当事人逾期不履行的,作出行政处罚的通信主管部门可以依法申请人民法院强制执行,申请执行书应当自当事人的法定起诉期限届满之日起180日内向人民法院提出。对当事人作出罚款决定的,当事人到期不缴纳罚款,作出行政处罚的通信主管部门可以依法从到期之次日起,每日按罚款数额的3%加处罚款。

第四十五条当事人确有经济困难,需要延期或者分期缴纳罚款的,当事人应当书面申请,经作出行政处罚决定的通信主管部门批准,可以暂缓或者分期缴纳。

第四十六条罚款、没收的违法所得或者拍卖非法财物的款项,必须全部上缴国库,任何单位和个人不得以任何形式截留、私分或者变相私分。

第四十七条行政处罚案件终结后,应当填写《行政处罚结案表》,并将全部案件材料立卷归档。

第五章附则

通信程序范文篇3

关键词JAVA,网络,SOCKET,APPLET

网络上的系统结构多为客户/服务器模式,服务器端负责数据和图像等的存储、维护、管理以及传递,客户端则负责人机界面的操作、送出需求及显示收回的数据。

下面介绍一下如何使用JAVA来进行网络编程:

1)由于客户端通过IE同服务器建立联系,所以客户端使用Applet,服务器端使用Application;

2)服务器应设置成多线程,应答多个客户的请求;

3)两端通信使用SOCKET机制。

1Java中输入/输出流概念:

过滤流DataInputStream和DataOutputStream除了分别作为FilterInputStream和FilterOutputStream的子类外,还分别实现了接口DataInput和DataOutput。接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean()readInt()、readLine()、readFully()等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble()DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream可以向所连接的输出流写入基本类型的数据。

2Socket机制

Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。

Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需求。使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程。使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行。

3Java语言

Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。

(1)简单性

Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的工作。这使程序设计更加简便,同时减少了出错的可能。

(2)面向对象

Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。

Java是一种完全面向对象的程序设计语言,它除了数组、布尔和字符三个基本数据类型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。

Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的单重继承,即每个类只能从一个类中继承。

Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。

(3)多线程

多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。

Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。

(4)分布性

Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。

(5)体系结构中立

Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。Java为了做到结构中立,除生成机器无关的字节码外,还制定了完全统一的语言文本,如Java的基本数据类型不会随目标机的变化而变化,一个整型总是32位,一个长整型总是64位。

为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。

java.lang:一般的语言包。其中包括用于字符串处理、多线程、异常处理和数字函数等的类,该包是实现Java程序运行平台的基本包

java.util:实用工具包。其中包括哈希表、堆栈、时间和日期等

java.io:基于流模型的输入/输出包。该包用统一的流模型实现了各种格式的输入/输出,包括文件系统、网络和设备的输入/输出等

:网络包。该包支持TCP/IP协议,其中提供了socket、URL和WWW的编程接口

java.awt:抽象窗口工具集。其中实现了可以跨平台的图形用户界面组件,包括窗口、菜单、滚动条和对话框等

java.applet:支持applet程序设计的基本包

(6)安全性

用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

4JAVA工具

(1)JDK

1)Java编译器

Java编译器将Java源代码文件编译成可执行的Java字节码。Java源代码文件的扩展名为.java,Java编译器把这种扩展名的文件编译成扩展名为.class的文件。源文件中的每个类在编译后都将产生一个class文件,这意味一个Java源代码文件可能编译生成多个class文件。

2)Java解释器

Java解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形Java程序的命令行工具。

3)Appletviewer

它是JavaApplet的简单测试工具,可使用它来测试JavaApplet程序,而不需要WWW浏览器的支持。

(2)VisualJ++

VisualJ++集成了可视化界面设计、交互式调试、代码编辑、联机帮助信息和介绍如何快速掌握该开发环境的实用向导等多项功能,同时具有能充分利用ActiveX和COM新技术的优势。利用VisualJ++可创建交互性很强的Internet应用程序,是难得的Java开发系统。

5客户机/服务器通信的实现:

(1)Application同Applet的通信

两端通过Socket机制进行连接:

1)客户端的编程流程:

?打开Socket,新建一个套接字;

?为套接字建立一个输入和输出流;

?根据服务器协议从套接字读入或向套接字写入;

?清除套接字和输入/输出流;

2)服务器端的编程流程:

?打开ServerSocket,创建一个服务器型套接字和一个普通套接字,服务器型套接字在指定端口为客户端请求的Socket服务;

?使用ServerSocket类的accept()方法使服务器型套接字处于监听状态并把监听结果返回给普通套接字;

?为该普通套接字创建输入和输出流;

?从输入和输出流中读入或写入字节流,进行相应的处理,并将结果返回给客户端;

?在客户端和服务器工作结束后关闭所有的对象,如服务器型的套接字,普通套接字,输入和输出流。

正是由于Java系统具有基于Socket的灵活通信机制,因而其应用程序能自由地打开和访问网络上的对象,就象在本地文件系统中一样。

(2)Applet之间的通信:

Applet之间的通信使用AppletContext类的getApplet()方法。

<appletcode=applet1.classwidth=200height=200name=first>

只要在程序中加入

Appletoneapplet=getAppletContext().getApplet(“first”);便可使用name为first的Applet中的方法了。

在该课题中大量使用了该种通信方法,因为专门同服务器端通信的Applet中包含接收信息方法和发送信息方法,所有客户端的Applet都要使用负责通信的Applet中的方法,所以客户端的Applet同负责通信的Applet必须进行通信。

6程序

//服务器端程序S.java负责与客户端通信

importjava.io.*;

.*;

importjava.lang.*;

importT2;

classThreadEchoHandlerextendsThread//创建线程

{

T2theT2=newT2();

Socketincoming;

intcounter;

ThreadEchoHandler(Socketi,intc)

{incoming=i;

counter=c;}

publicvoidrun()

{

try

{

DataInputStreamin=newDataInputStream(incoming.getInputStream());

DataOutputStreamout=newDataOutputStream(incoming.getOutputStream());

System.out.println("hello");

booleandone=false;

while(!done)

{Stringaa="";

Stringstr=in.readUTF();//从客户端得到字符串

//在此加入各自的服务程序

System.out.println(str);

theT2.pass(str);//解码

theT2.tongji();//修改监控库中的信息

aa=theT2.guan();//操纵数据库

System.out.println("stringzis:"+aa);

if(pareTo("null")!=0)

//若是查询数据库,返回查询后的结果

{//若不是查询数据库,不向客户端输出信息

out.writeUTF(aa);

out.flush();}

}//while

incoming.close();//线程关闭

}//try

catch(IOExceptione)

{System.out.println(e);}

}//endrun

}

//----------------------------------------

classS

{

publicstaticvoidmain(String[]args)

{

inti=1;

try

{

ServerSockets=newServerSocket(1111);

for(;;)

{

Socketincoming=s.accept();

System.out.println("connect:"+i);

newThreadEchoHandler(incoming,i).start();

i++;

}

}

catch(Exceptione)

{System.out.println(e);}

}

}

//客户端通信小应用程序Echo.java

importjava.io.*;

.*;

importjava.awt.*;

importjava.applet.*;

publicclassEchoextendsApplet

{

TextAreata;

SocketechoSocket;

DataOutputStreamos;

DataInputStreamis;

StringLine;

publicvoidinit()

{

setBackground(Color.white);

ta=newTextArea(5,80);

ta.setEditable(false);

add(ta);

try

{echoSocket=newSocket("10.102.4.41",1111);}//与服务器建立连接

catch(IOExceptione)

{System.out.println("error");}

}

publicvoidst(Stringstri)//发送字符串的方法

{

try

{DataOutputStreamos=newDataOutputStream(echoSocket.getOutputStream());

DataInputStreamis=newDataInputStream(echoSocket.getInputStream());

os.writeUTF(""+stri);//向服务器输送string

os.flush();

}

catch(IOExceptione)

{System.out.println("error:"+e);}

}

publicStringst1()//接收字符串的方法

{

StringLine="";

try

{DataOutputStreamos=newDataOutputStream(echoSocket.getOutputStream());

DataInputStreamis=newDataInputStream(echoSocket.getInputStream());

Line=is.readUTF();//从服务器读来的信息

ta.appendText(""+Line);//在文本域中输出信息

}

catch(IOExceptione)

{System.out.println("error:"+e);}

returnLine;

}

}

7程序调试心得:

1)在建立Socket连接时,两端的端口号必须设为一致,否则建立不了连接。服务器端必须有主机IP地址或主机名参数。

2)连接建立好之后应确定输入和输出流。起初程序中用的是DataInputStream和PrintStream,结果只能传输英文,传输中文时产生乱码,将PrintStream改为DataOutputStream,使用readUTF()和writeUTF()方法后,中文传输问题得到解决。

3)如果一个使用某端口的程序没有关闭,另一个程序就不能使用这个端口。

4)开始进行通信的程序均为Application,因不符合客户机/服务器机制,应将客户端的Application改为Applet。其转化的主要步骤如下:

?创建一个包含APPLET标签的HTML文件;

?去掉应用程序中的main()方法;

?类名应继承Applet类,而不是Frame类,并在程序开头加入

importjava.applet.*;语句;

?用init()方法代替Application程序中的构造方法,当浏览器创建Applet类对象的时候,它自动执行init()方法;

?如Application中缺省使用了BorderLayout布局管理器,应在Applet的init()方法中重新设定;

?如果Application中有setTitle()方法,必须将其去掉,如Application中使用了菜单,在Applet中用按钮来替换。

5)懂得了在一程序中如何引用自定义的类中的方法和变量,在程序开头加入import类名;在程序中加入类名实例=new类名();然后使用

实例.方法(),实例.变量即可。

参考文献:

[1]廖雷等,Java程序设计教程,中国电力出版社,2003

通信程序范文篇4

DSP芯片是专门为实现各种数字信号处理算法而设计的、具有特殊结构的微处理器,其卓越的性能、不断上升的性价比、日渐完善的开发方式使它的应用越来越广泛。将计算机网络技术引入以DSP为核心的嵌入式系统,使其成为数字化、网络化相结合,集通信、计算机和视听功能于一体的电子产品,必须大大提升DSP系统的应用价值和市场前景。将DSP技术与网络技术相结合,必须解决两个关键问题:一是实现DSP与网卡的硬件接口技术,二是基于DSP的网络通信程序设计。DSP与网卡的硬件接口技术参考文献[1]有比较详尽的论述,以下主要讨论基于DSP的网络通信程序设计。

1通信协议的制定

协议是用来管理通信的法规,是网络系统功能实现的基础。由于DSP可以实现对网卡的直接操作,对应于OSI网络模型,网卡包含了物理层和数据链路层的全部内容,因此,规定了数据链路层上数据帧封装格式,就可以为基于DSP的局域网络中任意站点之间的通信提供具体规范。因为以太网是当今最受欢迎的局域网之一,在以太网中,网卡用于实现802.3规程,其典型代表是Novell公司的NE2000和3COM公司的3C503等网卡,所以研究工作中的具体试验平台是以DSP为核心构成的以太局域网,主要用于语音的实时通信,所使用的网卡为Novell公司的NE2000网卡。NE2000网卡的基本组成请见参考文献[2],其核心器件是网络接口控制器(NIC)DP8390。该器件有三部分功能:第一是IEEE802.3MAC(媒体访问控制)子层协议逻辑,实现数据帧的封装和解封,CSMA/CA(带碰撞检测功能的载波侦听多址接入)协议以及CRC校验等功能;第二是寄存器堆,用户对NE2000网卡通信过程的控制主要通过对这些寄存器堆中各种命令寄存器编程实现;第三是对网卡上缓冲RAM的读写控制逻辑。DP8390发送和接收采用标准的IEEE802.3帧格式。IEEE802.3参考了以太网的协议和技术规范,但对数据包的基本结构进行了修改,主要是类型字段变成了长度字段。所以,以DSP为核心的局域网内通信数据包基本格式如图1所示。

DSP读出数据包和打包从目的地址开始。目的地址用来指明一个数据帧在网络中被传送的目的节点地址。NE2000支持3种目的地址:单地址、组地址及广播地址。单地址表示只有1个节点可以接收该帧信息;组地址表示最多可以有64个字节接收同一帧信息;而广播地址则表示它可以被同一网络中的所有节接收。源地址是发送帧节点的物理地址,它只能是单地址。目的地址和源地址指网卡的硬件地址,又称物理地址。

在源地址之后的2个字节表示该帧的数据长度,只表示数据部分的长度,由用户自己填入。数据字段由46~1500字节组成。大于1500字节的数据应分为多个帧来发送;小于46字节时,必须填充至46字节。原因有两个:一是保证从目的地址字段到帧校验字段长度为64字节的最短帧长,以便区分信道中的有效帧和无用信息;二是为了防止一个站发送短帧时,在第一个比特尚未到达总线的最远端时就完成帧发送,因而在可能发生碰撞时检测不到冲突信号。NE2000对接收到的从目的地址字段后小于64字节的帧均认为是“碎片”,并予以删除。在数据字段,根据系统的具体功能要求,用户可以预留出若干个字节以规定相应的协议,以便通信双方依据这些字节中包含的信息实现不同的功能。

2基于DSP的网络通信程序设计

如果基于网络操作系统,用户可以利用一些软件对网络操作系统的支持,很容易地编写出优秀的网络通信程序,但这些程序必须依附于网络操作系统。而在DSP环境下,必须深入了解网络接口控制器(NIC)的工作原理[2],通过对网络直接编程,实现局域网内任意站点之间的通信而完全抛开网络操作系统。

DSP对网卡的通信过程控制就是DSP对DP8390中各种寄存器进行编程控制,完成数据分组的正确发送和接收。DP8390的所有内部寄存器都是8位,映像到4个页面。每个页面有16个可供读写的寄存器地址(RA=00H~0fH)。页面的选择由命令寄存器CA控制。第0页寄存器用于收发过程,第1页寄存器主要用于DP8390的初始化,第2页寄存器则用于环路诊断。DSP对寄存器的操作是将寄存器作为DSP的端口设备,其实际物理端口地址(PPA)为网卡基本I/O端口地址(BIOA)与寄存器地址(RA)之和(即PPA=BIOA+RA)。应注意的是,PPA与寄存器间并不存在一一对应关系,对PPA的读操作与写操作并不一定是对同一寄存器进行的,这种情况在第0页尤其明显。用户数据分组在DSP和网卡交互是通过网卡的数据端口实现的,既可以用DMA方式也可以用PIO方式读入数据分组或将数据分组送至网卡RAM缓冲区。在本系统中,DSP采用DMA方式对网卡进行数据读写。网卡的数据端口地址(NDPA)为网卡基本I/O地址(BIOA)加偏移地址10H(即NDPA=BIOA+10H)。

网卡通信过程控制可分为网卡初始化、接收控制和发送控制。下面分别予以讨论。

2.1网卡初始化

网卡初始化的主要任务是设置所需的寄存器状态,确定发送和接收条件,并对网卡缓冲区RAM进行划分,建立接收和发送缓冲环。具体过程请参阅参考文献[2]。需要说明的是,每一块网卡被赋予一个物理地址,以便通信站点的标识。这个物理地址存在网卡的PROM(存储地址为0000~0005H)六个单元中,在网卡初始化时,通过远程DMA读入DSP内存中,并送入网卡物理地址寄存器。在一步的意义在于:一方面,如果能正确读出网卡的物理地址,则说明网卡硬件基本没有问题,网卡的上电复位和DSP对网卡的初始化顺利通过;另一方面,这个物理地址可以用于DSP网络系统中的点名、包的过滤丢弃等服务,也就是说,在链路层根据数据帧携带的源地址和目的地址确定数据报从哪里来,是否接收或丢弃。网卡初始化时另一个重要的工作就是接收缓冲环的设置,为了有效利用缓冲区,NIC将接收缓冲区RAM构成环形缓冲结构,如图2所示。

接收缓冲区RAM分成多个256字节的缓冲区,N个(N最大为256)这样的缓冲区通过指针控制链接成一条逻辑上的缓冲环。缓冲环的开始页面地址存入PSTART寄存器,环页面结束地址存入PSTOP寄存器。PSTART和PSTOP确定了接收缓冲环的大小和边界。为便于缓冲环读写操作,还需要2个指针:当前页面指针CURR和边界指针BNRY。CURR确定下一包放在何处,起着缓冲环写页面指针作用;BNRY指向未经DSP取走处理最早到达的数据包起始页面,新接收的数据包不可将其覆盖,起着缓冲环读页面指针的作用。也就是说,CURR可以告诉用户网卡接收的数据分组当前放到了什么位置,而BNRY则用于确定DSP读缓冲环到了什么地方。由于接收缓冲区为环形结构,BNRY和CURR相等时,环缓冲区可能满也可能空。为了使NIC能辨别这两种状态,规定当BNRY等于CURR时,才认为环缓冲区满;当缓冲区空时,CURR比BNRY指针值大1。因此,初始化时设置:BNRY=PSTART,CURR=PSTART+1。这时读写指针不一致,为了保证正确的读写操作,引入一软件指针NEXTPK指示下一包起始页面。显然,初始化时NEXTPK=CURR。这时,缓冲环的读指针对NEXTPK,而BNRY只是存储分组缓冲区的起始页面边界指示,其值为NEXTPK-1。

2.2接收控制过程

DSP完成对DP8390的初始化后,网卡就处于接收状态,一旦收到分组,就自动执行本地DMA,将NIC中FIFO数据送入接收缓冲环,然后向主机申请“数据分组接收到”中断请求。DSP如果响应中断,则启动网卡远程DMA读,将网卡缓冲区中的数据分组读入学生机存储区,然后对接收缓冲环CURR、NEXTPK、BNRY指针内容进行修改,以便网卡能从网上正确接收后续分组。DSP响应网卡接收中断后,接收控制过程如下:

①设置远程DMA的起始地址;RSAR0=00H,RSAR1=Nextpk。

②设置远程DMA操作的字节数,这个长度在46~1500字节范围内根据具体要求自己确定。

③0AH送命令寄存器CR,启动远程DMA读。

④从网卡数据端口依序读入数据分组,注意,最先读入的4字节非数据分组内容,第1字节为接收状态,第2字节为下一包页地址指针,3与4字节为接收字节数。第2字节内容应该送入Nextpk,其它字节根据用户要求处理。

⑤修改边界指针BNRY=Nextpk-1。

⑥清除远程DMA字节数寄存器RBCR0和RBCR1。

2.3发送控制过程

DSP先执行远程DMA写操作,将内存中的数据分组传至网卡发送缓冲区,然后启动发送命令进行数据分组发送。发送控制过程如下:

①设置远程DMA的起始地址为网卡发送缓冲区起始地址;

②设置远程DMA操作的字节数;

③12H送命令寄存器CR,启动远程DMA写;

④依序送出数据分组至网卡发送缓冲区;

⑤清除远程DMA字节数寄存器;

⑥设置发送字节数寄存器TBCR0和TBCR1;

⑦12H送命令寄存器CR,启动数据分组发送。

3发送方发送频率的控制

发送方发送频率的正确控制主要保护两点:一是有一个最小发送时间间隔,否则会因为接收方不能及时接收而导致系统瘫痪;二是发送频率能够足具体的功能实现要求。譬如在语音的实时通信中,发送频率就取决于声卡的采样频率。在8kHz采样频率时,声卡每秒钟采样8000字节,采用1024字节需用时128ms,如果通信协议规定发送1次传送1024字节有效数据,则必须每128ms发送一次才能保证缓冲区有新数据待发送,也才能保证接收方有新数据播放。128ms是一个理论计算数值,在实际的操作中采样速度和发送频率之间总是不能完全匹配,而存放数据的缓冲区大小是有限的,如果没有良好的控制技巧来实现正确发送,就会造成声音抖动和延时。解决的办法是双缓冲技术和双指针控制,并且根据采样速度和发送频率之间的匹配情况送入不同的发送通信进行处理后发送。正确发送的含义有两方面,一是每次发送的都是新数据,二是能满足接收方总在播放新数据的需求。

4接收方防止数据包的丢失

由于DSP通过中断请求判断是否有数据分组到来,如果中断繁忙而两个数据包到来时间相差非常短,DSP有可能只响应一次中断,从而导致丢包的发生。分析网卡接收数据过程,当网卡收到数据分组时,首先执行本地DMA,将NIC中FIFO数据送入接收缓冲环,并将本地DMA操作的起始地址存放在当前页寄存器(CURR)和当前本地DMA寄存器(CLDA0、CLDA1)中,DSP从网卡接收缓冲环读出数据到存储器则称远程DMA操作,用软件指针Nextpk来指示远程DMA的起始页面。因此通过比较网卡本地DMA和远程DMA的当前地址,即在中断服务子程序中比较CURR和Nextpk指针,或比较CLDA0、CLDA1和Nextpk指针,就可以保证当前数据分组放到了哪里就读出到哪里,从而防止丢包的发生。

通信程序范文篇5

1配电网自动化通信系统的设计要求

根据配电网自动化系统的复杂程度、规模以及预期达到的自动化水平不同,对其通信系统的要求也有所区别。每个地区的配电网自动化系统规模都是比较大的,不可能在短期内能够立即建得很完善,因此,建立配电网自动化通信系统是一个长期,循序渐进的过程。总的说来,配电网自动化通信系统需要满足以下要求:

1.1通信可靠

配电现场对配电网通信系统要求有很高的可靠性。首先,配电现场的工作环境复杂,需要选用能够抗潮湿、抗高温等恶劣气候的设备,在应用的过程中必须要注意密封防尘;其次,业务数据的传输无论是在配电网正常运行,还是在配电网出现线路故障时,通信必须保持其业务数据能够畅通传输,通信系统还应具有诊断配电网故障、故障区隔离和非故障区恢复供电的通信任务;再次,由于通信终端附近的电磁场较强,为了保证通信数据不受外界的影响,保证数据的准确性,通信系统还需具有较强的抵抗电磁干扰的能力。

1.2设备应具有灵活、易于安装的特点

由于配电网规模大、网点多,各终端的安装环境要求也不一样,使得通信设备复杂。为了满足灵活、易于安装、运行可靠、便于维护等特点,选取的通信设备尺寸应适宜,不能太大,能满足多样的安装方式,能应对复杂的现场环境。

1.3通信实时性、双向性

通信系统的首要任务就是将站点的数据传送给各个终端,并将各个端点的检测数据传送至站点,并对数据进行分析,实时监控配电网的运行情况。配电网通信系统的实时性与双向性,能够实现在系统正常时,及时更新系统的数据,也能够实现在系统发生故障时,能快速地将故障数据传送给站点,从而及时排除故障,增加供电的可靠性。

1.4配电网需要具备一定的扩展性与开放性

由于业务数据大小与实时性的要求不同,对通信系统的要求也不尽相同,配电网将会随着城市的建设、信息业的发展进行扩展与改造,这就要求其具有一定的可扩展性与开放性。

2配电网自动化系统通信方式的比较

配电网自动化系统通信方式有很多种,但其主要分为有线通信方式与无线通信方式。在有线通信方式中主要有载波通信与光纤通信方式两种。而无线通信方式中主要的应用为GPRS通信技术。无线通信架设方便、易于扩展、价格也比较便宜。有线通信方式具有较强的防干扰性和传输速度快的特点。本文就载波通信、光纤通信与移动无线通信技术中的GPRS进行具体分析与比较。

2.1载波通信方式

载波通信又分为电力载波通信与有线通信的载波通信两种方式,它们原理基本相同,具有继电保护功能、传输运行信息功能、进行电网内调度电话的功能。对配电网的运行安全、高效、稳定具有重要的作用。其主要有以下特点。

1)配电网的电力线上的电压电流相当大,信道若想在此电力线上进行传输,则必须要通过耦合元件才能连接载波通信设备与电力线。这些耦合设备必须具备高效、安全、消除电力线上的传输电能对载波通信设备的损害,从而保证配电网自动化通信系统的安全。

2)高压电力线上存在着很强的噪声,这是由于电晕等情况产生的。为了消除这些噪声,得到准确的信息,则载波设备必须具备较高的发信功率。

3)载波通信使用的频谱是有限的,主要由于载波信号将会影响到附近的无线通信信号、高频的架空线路、电力50Hz工频谐波的干扰。

4)载波通信的建设成本低,且具有电话线与光缆通信的功能。

5)覆盖范围广,电力线通信能够很容易地覆盖到学校,每个家庭网络。

6)即插即用的特点,用电力通信网络只需要直接接入电源就可以接入,不需要进行拨号操作。

2.2光纤通信方式

光纤通信是以光作为信息载体,传输介质为光导纤维。光纤具有传输速度快、干扰性强、传输距离远等特点,主要传输数字信号。光纤通信相比于其他通信方式,具有以下优点:①光纤传输抗干扰性强,损耗小,几乎无误码现象;②一组光纤可以同时传输多组数据,互不干扰;③架设简单,组建方便,受外界影响小;④能够使配电网与控制网中的强电和弱点分开,增加了设备的安全性;⑤传输的容量可达到10Gbit/s,是目前最大传输容量的方式。

2.3移动无线通信技术

移动无线通信技术具有容易扩展,成本低的特点,在各行业已被广泛地应用。无线公网主要有GPRS、CDMA和3G三种。其中GPRS、CDMA技术已经发展得很成熟,3G技术属于新兴技术,在终端设备的开发制造和网络建设方面发展得还不够成熟。GPRS属于无线通信技术中的主流技术,能够提供一对一,一对多的数据传输,适用于间断突发性数据传输,也适合于频繁少量的数据传输。无线公网没有独立的控制权,因为它面向的用户范围大,其终端数据很容易受到非法攻击,其可靠性不强,当系统出现故障时,必须要和公网通信系统进行协调;租用流量费用也比较高。但是,无线通信技术初期投资成本低、布置灵活、覆盖范围广、适合复杂的地理环境。可以应用在使用有线通信方式昂贵复杂的地方,作为有线通信方式的补充。

3配电网自动化通信系统总体设计

配电网自动化系统的结构决定了其通信系统的建设与实施运行,配电网自动化通信系统主要分为主站、主干通信网、子站层、分支通信网、终端层这几个部分,如图1所示。其具体设计如下:

1)主站层与子站层之间的主干通信网,因为它的数据量比较大,传输速度要求高,可采用光纤或者微波进行通信。还可以采用光环自愈网来保证通信的可靠性,防止介质设备故障导致通信中断。

2)郊区农村等偏僻的地方,由于其地理环境复杂、人口密集度低、设备分散、面积广、距离长等特点,可以采用无线扩频或者电力线载波方式,以此减少技术复杂度与成本。

3)进行实时监测设备的通信,只需完成定时采集的功能,如集中抄表、负荷控制等设备,对于此项设备只需采用低价的通信方式,如电话专网,无线扩频等。进行实时监测设备对通信的要求要可靠快速,所以选用光纤通信。

通信程序范文篇6

PLC通信系统架构并没有精确的定义,工程师往往会从直觉上去理解。但是从一般的意义上来讲,它指的是指导PLC通信系统系统的设计和实现的高层次意义上的蓝图,以及形成这个蓝图的过程。从广义上来讲,PLC通信系统架构属于PLC通信系统设计的范畴,但是,设计和架构的概念往往会混淆在一起。基本上,PLC通信系统架构是为了形成PLC通信系统设计与开发过程中的目标,原则等基础性的框架,用以指导PLC通信系统开发的过程。PLC通信系统架构的过程就是在一定的设计原则的基础上,确定系统的各个组成部分,从各个不同的角度对组成部分进行全局性的安排和搭配,形成系统的组织结构和控制结构,最终形成整个系统的结构。PLC通信系统架构的内容包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择等等。

二、PLC系统可靠性管理

企业PLC通信系统的架构要受到多方面的制约,硬件成本,技术的可靠性,人力成本,学习周期,可维护性等等。因而,企业级PLC通信系统的架构往往要遵循相较于普通PLC通信系统更加严格的原则。虽然各个企业对于PLC通信系统架构的原则并不统一,但是现在已经形成了一些比较一致的原则:1.企业PLC通信系统系统架构需要具有战略性,尤其需要注重灵活性和重用企业PLC通信系统需要在全局性的范围内考虑最适合的架构,为了节约成本(包括人力成本和时间成本),不仅需要将已有的可复用资源进行重用,而且在创建新的资源的时候要尽可能的考虑重用的方式。同时,架构需要具有相当的灵活性,可以在较少的成本之下拓展或者修改已有的结构和功能。2.架构需要经得起时间的考验,具有比较高的可靠性和安全性。企业PLC通信系统系统需要尽可能长时间稳定的运行,并且需要具有较长的生命周期,架构应该尽可能的考虑今后可能遇到的情况,包含人员更迭,功能拓展,与其他系统结合的可能性等等,尽可能采取能够兼容未来变化的方式。企业PLC通信系统需要在企业中长期稳定运行的特点,决定了它需要尽量具有可靠性,不仅需要尽可能少的出现运行中的问题,而且还需要有能从当机等致命状况中尽快复原的能力。企业PLC通信系统同时需要极高的安全性,需要将资源以权限来决定是否能够访问。

三、PLC系统架构可靠性处理

企业PLC通信系统架构的最终目标,是架构出“符合标准”的PLC通信系统系统。这里所说的“符合标准”,是PLC通信系统在可用性的前提下,必须或者尽可能达到的目标。一般而言,PLC通信系统架构设计需要达到如下的全部或者部分目标:

1.可靠性(Reliable)。企业PLC通信系统系统往往负载着使用者(企业或者用户)的商业经营和企业管理,对于使用者来说,系统的稳定运行极为重要,因此PLC通信系统系统必须非常可靠。

2.安全性(Secure)。企业PLC通信系统系统里往往存储和管理着商业价值极高的信息,这些信息往往有着高度的保密性,不小心引起的泄露可能会引起极为严重的后果,因此,系统的安全性非常重要。

3.可扩展性(Scalableandextensible)。这里的扩展具有两层含义,一层含义是企业PLC通信系统必须能够在用户的使用率、用户的数目很快地增加的情况下,通过各种方式,最终能够使性能保持在合理的范围内。另一方面,在技术和需求都不断发展的情况下,架构允许系统对新技术和新的功能进行扩展。

通信程序范文篇7

1ATP系统跟踪控制模型

空间激光通信ATP系统中的捕获、跟踪和对准功能是以跟踪控制回路为中心,由粗跟踪系统和精跟踪系统完成的.粗、精跟踪系统主要由光电跟踪传感器单元、信号处理控制单元和跟踪伺服机构组成.在粗精复合控制系统中,粗跟踪控制系统的跟踪误差大于精跟踪传感器探测视场时,精跟踪控制系统不起作用;粗跟踪控制系统的跟踪误差小于精跟踪传感器探测视场时,精跟踪控制系统进入跟踪状态,通过精跟踪传感器构成光闭环,进一步校正粗跟踪残余误差.图1为双探测器粗精复合跟踪控制模型[5].图中Ects(s)和Efps(s)分别为粗、精跟踪系统光电跟踪探测单元传递函数,Dctc(s)和Dfpc(s)分别为粗、精跟踪控制器传递函数,Gctp(s)和Gfpp(s)分别为粗、精跟踪系统的伺服机构和被控对象传递函数;θt和θo分别是粗精复合轴跟踪系统期望的视轴角和实际输出角;θc和θf分别是粗、精跟踪控制回路的输出角;ec和ef分别为粗、精跟踪系统的跟踪误差.图1ATP系统粗精复合跟踪控制模型Fig.1ModelofcoarseandfinetrackingcontrolofATPsystem由图1可分别得出粗、精跟踪控制回路闭环等效传递函数为Gct(s)=Gcto(s)1+Gcto(s),(1)Gfp(s)=Gfpo(s)1+Gfpo(s).(2)式中:Gcto(s)为粗跟踪控制回路开环传递函数,Gcto(s)=Ects(s)Dctc(s)Gctp(s);Gfpo为精跟踪控制回路开环传递函数,Gfpo(s)=Efps(s)Dfpc(s)Gfpp(s).复合跟踪控制系统的闭环传递函数为Gclose(s)=θo(s)θt(s)=Gcto(s)+Gfpo(s)+Gcto(s)Gfpo(s)[1+Gcto(s)][1+Gfpo(s)].(3)由式(3)可得系统等效开环传递函数为Gopen(s)=Gcto(s)+Gfpo(s)+Gcto(s)Gfpo(s).(4)由式(4)可知,所研究的ATP系统粗、精复合控制跟踪精度由精跟踪系统控制精度决定[6],因此,精跟踪控制回路控制器的设计是改善ATP系统跟踪性能的关键.考虑粗、精跟踪系统的控制是独立的,本文中仅讨论精跟踪系统控制器的设计对ATP系统跟踪性能的影响.

2精跟踪控制器设计

一个快速高精度跟踪系统,既需要有高带宽、高精度的执行机构,又需要有响应快速、定位精度高的位置探测器件[7].图2为设计的精跟踪伺服系统控制回路.它由高精度四象限探测器、信标光斑位置解算处理单元、精跟踪控制器、压电陶瓷驱动器(PZT)和快速控制反射镜组成.小惯量的反射镜黏合在压电陶瓷上,可实现反射镜倾角的快速高精度调整.根据实验系统所选的压电陶瓷驱动器及实测输出的频率响应数据(输入电压幅值为10V),经曲线拟合得驱动器在方位(俯仰与方位相似)方向上的频率特性曲线如图3所示.由此可得压电陶瓷驱动的快速反射镜的模型为Gfpp(s)=θf(s)U(s)=KPZTω2n(τs+1)s2+2ζωns+ω2n.(5)式中:等效阻尼比ζ=0.7;等效振荡频率ωn=750Hz;压电陶瓷驱动器放大倍数KPZT=10.令Efps(s)=1,采用频域法设计精跟踪控制器的等效开环传递函数为滑模控制特性是一种使系统结构随时间变化的开关特性.从理论上分析可知,采用滑模控制,通过调节参数能够控制系统的增益、积分、微分常数实时地变化.

3精跟踪控制实验分析

ATP系统跟踪的目的在于稳定通信终端系统视轴,使主从激光通信终端之间存在相对运动时[9],系统视轴在跟踪过程中的角速度和角加速度对于位置伺服单元将引起动态滞后跟踪误差小于期望的数值.精跟踪系统能够完全校正粗跟踪系统的系统误差,因此ATP系统最终跟踪精度取决于精跟踪系统对粗跟踪系统产生的随机误差的校正能力.精跟踪系统控制带宽越宽,抑制粗跟踪系统产生随机误差的能力就越强.为研究滑模控制对ATP系统跟踪性能的影响,图4给出了用频域法和滑模控制方法设计的精跟踪控制误差抑制函数频率响应曲线.从图4可看出,用频域法控制时,误差频率响应曲线相对较陡,当其频率大于290Hz时,系统对误差没有校正能力,且0dB以上曲线凸起部分对系统随机误差起放大作用,放大倍数可达到1.5倍.而用滑模控制,在整个工作频率范围内,系统对误差都有校正能力,可见,滑模控制增加了系统中频段的控制带宽.从图4中还可看出,当粗跟踪系统随机误差频率为3.7Hz,频域法和滑模控制具有相同的抑制比,为-43dB.如果粗跟踪系统随机误差最大幅值为150μrad,为使跟踪系统的跟踪误差小于2μrad,误差抑制比应小于-37dB,此时若采用频域法,粗跟踪系统随机误差频率小于5.5Hz,而用滑模控制,粗跟踪系统随机误差频率小于8Hz.这说明滑模控制对误差的校正能力在中频段优于频域法设计的结果.图5给出了频率为8Hz时,模拟相对运动引起的动态滞后跟踪误差仿真结果,此时频域法和滑模控制的调节时间相同.滑模控制是根据误差和误差变化率的大小来改变精跟踪控制器输出的,从而达到改善精跟踪系统的过渡过程,提高跟踪系统控制精度的目的.

通信程序范文篇8

随着卫星通信的高速发展,星载数据的种类和数量不断增加,这就对高速海量星载数据的传输、接收和处理技术提出了新的要求。卫星下发大容量高速数据经地面站解调后,经由光纤以数字基带信号的形式传递给本地接收端,地面应用系统要采用高性能的接收处理设备,以达到对数据的实时接收、存储和处理。PCIExpress总线作为第3代I/O总线以其明显的优势,成为目前高速传输的主流平台。文献[1]以XC5VFX130T芯片为硬件核心,分析PCIExpress协议原理和内嵌硬核模块的结构,实现了具有PCIExpress系统主机接口的单通道FC总线接口板卡。文献[2]在XC5VLX30T器件中,设计实现PCIExpress总线接口,同时在接口内部设计直接存储器存储(DirectMemoryAccess,DMA)控制器。本文基于Xilinx公司的Virtex-5现场可编程门阵列(FieldProgrammableGataArray,FPGA)设计高速数据传输系统。该系统采用PCIExpress高速串行总线和基于Aurora协议的光纤通信模块,双单工同时收发。其中发送端和接收端分别包括上位机、驱动和端点设备,本文着重介绍端点设备设计。

2高速数据传输系统的工作原理

Xilinx公司的Virtex-5芯片的PCIExpress端点模块IP核,为用户提供了2种类型的数据通信:程控输入/输出(ProgrammedInput/Output,PIO)方式和总线主控存储器直接存储(Bus-masteringDMA,BMD)方式[3]。PCIExpress设备与系统存储器之间的数据通信可以用PIO方式,但一般采用效率较高的BMD方式。在BMD通信方式下,端点设备变成了一个总线主控设备,负责发起DMA读写操作。当设备要获取系统存储器的内容时,发起指向系统存储器的存储器读操作;当设备向系统存储器传送数据时,发起指向系统存储器的存储器写操作[4-5]。DMA控制器代替CPU发起传输事务,减轻了处理器的压力,而且在数据传送过程中允许其他处理行为发生。在降低CPU使用率的同时,带来较高的吞吐率和性能。基于上述理论的卫星通信星地链路的组成结构如图1所示。该传输系统功能主要由PCIExpress通信模块和光纤通信模块来完成。PCIExpress通信模块采用了总线主控DMA方式进行数据的传输。端点设备中设计了DMA控制器,负责控制数据的发送(存储器写)和从系统内存获得数据(存储器读)。在开始DMA传输之前需要一些初始业务信息,这些信息包括DMA读存储器地址、写存储器地址和传输的数据大小等,由系统软件产生的指向DMA控制/状态寄存器的PIO方式的存储器写包为其传送[6]。光纤通信模块采用了Aurora协议,该协议是为专有上层协议提供透明接口的串行互连协议[7],它可用于高速线性通路之间的点到点串行数据传输,同时其可扩展的带宽,为系统设计人员提供了所需的灵活性。Aurora链路层协议在物理层采用千兆位串行技术,每条物理通道的传输比特率可从622Mb/s扩展到3.125Gb/s。对于发送方,PCIExpress通信模块接收到数据后传输给以AuroraIPCore为核心的自定义的光纤通信模块,该模块通过RocketI/O端口发送给SFP光电转换模块,SFP模块将电信号转换为光信号发送到光纤信道上。对于接收方,数据的接收是一个逆过程。

3高速数据传输系统设计

根据实际实验条件和应用需求,本文设计的高速传输系统由2台PC机模拟卫星和地面站的数据传输。PCIExpress通信模块,选择为x8通道、工作频率250MHz。光纤通信模块工作频率为125MHz,采用8位并行数据传输模式[3,7-8]。高速数据传输系统结构如图2所示。其中,数据存储模块选用了位宽为32bit的RAM。在光纤通信模块中加入32bit/8bit模块和8bit/32bit模块,完成PCIExpress数据和光纤通信数据的传输转换。图2高速数据传输系统结构模拟卫星下发数据的应用软件在准备好待发送的数据后,将文件长度信息及相关命令经由驱动发送给端点设备,设备接到命令信息后启动DMA控制器中的DMA读操作。之后设备将从系统存储器读取的数据通过光纤通信模块发送给地面站。设备每次读取数据的间隔由光口传输速率决定,在不丢失数据的前提下,尽量提高信道的利用率。在模拟地面站接受数据的过程中,首先驱动将接收端系统存储器的目的地址信息发给端点设备,设备的DMA控制器接收到光纤通信模块的数据后启动存储器写操作,将有效数据分批次加载进指向系统存储器的存储器写TLP包中,发送到目的地址。

3.1光纤通信模块

光纤通信模块通过定制XilinxIP核来完成,由于实际需求,在光纤通信模块中要加入数据位转换模块,用来进行PCIExpress模块和光纤模块数据的转换。定制的光纤通信IP核,选择8bit/10bit编码和CRC校验,选用K28.1作为控制字串,当传送控制字串时,由RocketI/O模块的控制字标志输入管脚TX_CHARISK指定该字为控制字串。8bit/10bit编码可以避免数据流中出现连0、连1的情况,便于时钟恢复。在发送端CRC校验码被插入到待发送的并行数据中,数据经过8bit/10bit编码后,被写入发送端FIFO,经过串行化输出接口将并行数据转换成串行差分数据发送出去。接收端在收到的串行差分信号后,通过芯片内部的锁相环从中提取时钟,再按此同步时钟来采样数据,通过解串器将串行数据转换为并行数据,然后经过8bit/10bit解码,并将其写入接收端弹性缓冲器,CRC校验后并行输出。

3.2PCIExpress通信模块

3.2.1发送模块

发送模块流程如图3所示。图3发送模块流程DMA控制器中的发送模块主要完成3个功能:(1)在接收到指向DMA控制/状态寄存器的存储器读包后,通过发送CPLD包将DMA控制/状态寄存器中的信息发送给应用软件。在发送完一个CPLD包后进入等待状态,当确认发送成功后返回当前状态,继续发送CPLD包。这样保证了CPLD包的可靠传输。(2)卫星下发数据时,DMA控制器收到DMA读操作指示后,根据DMA控制/状态寄存器中读数据的大小,确定读操作次数及每次读取数据的大小。并按所确定的信息发送相应地址的存储器读包。(3)模拟地面站接收到数据后主动发起DMA写操作。读取数据存储模块中的数据,按存储器写包的格式(本设计中存储器写TLP包的有效数据载荷为32DW),将数据发送到指定系统存储器单元。传输完毕后,DMA控制器产生写完成中断信号,驱动收到中断后认为一次DMA传输结束,通知应用软件从系统存储器中读取数据。数据提取完毕后,驱动产生中断响应信号给端点设备,表明可以开始下一个DMA传输。

3.2.2接收模块

接收模块主要接收和处理IP核交付的存储器读包、存储器写包、CPL包和CPLD包。接收模块流程如图4所示。图4接收模块流程接收模块检测到的指向DMA控制/状态寄存器的存储器写包是携带有DMA控制器中控制/状态寄存器所需信息的PIO方式的存储器写包。接收模块负责将存储器写包携带的信息写入相应的控制/状态寄存器中。在之后检测到指向DMA控制/状态寄存器的存储器读包后,解析存储器读包的信息,获得要读取的DMA控制/状态寄存器的地址和内容后传输给发送模块,通知发送模块将应用软件预读取地址的数据以CPLD包的格式发送给应用软件。CPLD包是DMA传输中读操作后所收到的相应从系统存储器读取的数据。发送模块启动DMA读操作后,系统存储器的数据通过以CPLD包的格式发送给DMA控制器的接收模块。接收模块将有效数据传输给数据存储单元。接收完一次DMA读操作的数据后,设备产生中断信号通知驱动程序接收完毕,同时驱动产生中断应答信号,等待下一次的DMA传输。

4系统调试结果

在Xilinx公司提供的Virtex-5DMA测试底层驱动基础之上,添加了本传输系统所需的功能,作为所设计高速传输系统所使用的驱动程序。应用程序在VS2005环境下开发,实现对FPGA的初始化复位、配置寄存器信息、大容量数据的发送/接收控制等。本文选用ISEChipscope12.2工具对所设计系统进行调试。图5为发送方Chipscope局部放大图。可以看出,当发送方启动DMA读操作后,DMA控制器先发送存储器读包到trn_td_c接口上,之后trn_rd_c接收到带数据的完成包,如图所示接收的第一个32bit数据的16进制表示为30784142。当接收完毕后表明DMA读操作完毕,发送中断信号。数据存储模块将接收到的数据发送给光纤通信模块,经过32bit转8bit模块后,最终tile0_txdata0_i上的数据经过SFP转换模块发送到光纤信道上。该过程模拟了卫星发送大容量的高速数据。图5发送方Chipscope局部放大图图6为接收方Chipscope局部放大图。可以看出,光纤接收的数据tile0_rxdata1_i经由8bit/32bit转换后给DMA控制器,此时DMA控制器启动DMA写操作后,将接收到的数据打包成存储器写包trn_td_c给PCIExpressIP核,如图所示向PC机发送的第1个32bit数据的16进制表示为30784142。当发送完毕后产生中断信号,表明DMA写操作完毕。仿真结果表明,接收方可以实时有效地将光纤数据传输给系统存储器。实现对数据的接收和存储。

通信程序范文篇9

关键词:DSP网络通信程序通信协议网卡

DSP芯片是专门为实现各种数字信号处理算法而设计的、具有特殊结构的微处理器,其卓越的性能、不断上升的性价比、日渐完善的开发方式使它的应用越来越广泛。将计算机网络技术引入以DSP为核心的嵌入式系统,使其成为数字化、网络化相结合,集通信、计算机和视听功能于一体的电子产品,必须大大提升DSP系统的应用价值和市场前景。将DSP技术与网络技术相结合,必须解决两个关键问题:一是实现DSP与网卡的硬件接口技术,二是基于DSP的网络通信程序设计。DSP与网卡的硬件接口技术参考文献[1]有比较详尽的论述,以下主要讨论基于DSP的网络通信程序设计。

1通信协议的制定

协议是用来管理通信的法规,是网络系统功能实现的基础。由于DSP可以实现对网卡的直接操作,对应于OSI网络模型,网卡包含了物理层和数据链路层的全部内容,因此,规定了数据链路层上数据帧封装格式,就可以为基于DSP的局域网络中任意站点之间的通信提供具体规范。因为以太网是当今最受欢迎的局域网之一,在以太网中,网卡用于实现802.3规程,其典型代表是Novell公司的NE2000和3COM公司的3C503等网卡,所以研究工作中的具体试验平台是以DSP为核心构成的以太局域网,主要用于语音的实时通信,所使用的网卡为Novell公司的NE2000网卡。NE2000网卡的基本组成请见参考文献[2],其核心器件是网络接口控制器(NIC)DP8390。该器件有三部分功能:第一是IEEE802.3MAC(媒体访问控制)子层协议逻辑,实现数据帧的封装和解封,CSMA/CA(带碰撞检测功能的载波侦听多址接入)协议以及CRC校验等功能;第二是寄存器堆,用户对NE2000网卡通信过程的控制主要通过对这些寄存器堆中各种命令寄存器编程实现;第三是对网卡上缓冲RAM的读写控制逻辑。DP8390发送和接收采用标准的IEEE802.3帧格式。IEEE802.3参考了以太网的协议和技术规范,但对数据包的基本结构进行了修改,主要是类型字段变成了长度字段。所以,以DSP为核心的局域网内通信数据包基本格式如图1所示。

DSP读出数据包和打包从目的地址开始。目的地址用来指明一个数据帧在网络中被传送的目的节点地址。NE2000支持3种目的地址:单地址、组地址及广播地址。单地址表示只有1个节点可以接收该帧信息;组地址表示最多可以有64个字节接收同一帧信息;而广播地址则表示它可以被同一网络中的所有节接收。源地址是发送帧节点的物理地址,它只能是单地址。目的地址和源地址指网卡的硬件地址,又称物理地址。

在源地址之后的2个字节表示该帧的数据长度,只表示数据部分的长度,由用户自己填入。数据字段由46~1500字节组成。大于1500字节的数据应分为多个帧来发送;小于46字节时,必须填充至46字节。原因有两个:一是保证从目的地址字段到帧校验字段长度为64字节的最短帧长,以便区分信道中的有效帧和无用信息;二是为了防止一个站发送短帧时,在第一个比特尚未到达总线的最远端时就完成帧发送,因而在可能发生碰撞时检测不到冲突信号。NE2000对接收到的从目的地址字段后小于64字节的帧均认为是“碎片”,并予以删除。在数据字段,根据系统的具体功能要求,用户可以预留出若干个字节以规定相应的协议,以便通信双方依据这些字节中包含的信息实现不同的功能。

2基于DSP的网络通信程序设计

如果基于网络操作系统,用户可以利用一些软件对网络操作系统的支持,很容易地编写出优秀的网络通信程序,但这些程序必须依附于网络操作系统。而在DSP环境下,必须深入了解网络接口控制器(NIC)的工作原理[2],通过对网络直接编程,实现局域网内任意站点之间的通信而完全抛开网络操作系统。

DSP对网卡的通信过程控制就是DSP对DP8390中各种寄存器进行编程控制,完成数据分组的正确发送和接收。DP8390的所有内部寄存器都是8位,映像到4个页面。每个页面有16个可供读写的寄存器地址(RA=00H~0fH)。页面的选择由命令寄存器CA控制。第0页寄存器用于收发过程,第1页寄存器主要用于DP8390的初始化,第2页寄存器则用于环路诊断。DSP对寄存器的操作是将寄存器作为DSP的端口设备,其实际物理端口地址(PPA)为网卡基本I/O端口地址(BIOA)与寄存器地址(RA)之和(即PPA=BIOA+RA)。应注意的是,PPA与寄存器间并不存在一一对应关系,对PPA的读操作与写操作并不一定是对同一寄存器进行的,这种情况在第0页尤其明显。用户数据分组在DSP和网卡交互是通过网卡的数据端口实现的,既可以用DMA方式也可以用PIO方式读入数据分组或将数据分组送至网卡RAM缓冲区。在本系统中,DSP采用DMA方式对网卡进行数据读写。网卡的数据端口地址(NDPA)为网卡基本I/O地址(BIOA)加偏移地址10H(即NDPA=BIOA+10H)。

网卡通信过程控制可分为网卡初始化、接收控制和发送控制。下面分别予以讨论。

2.1网卡初始化

网卡初始化的主要任务是设置所需的寄存器状态,确定发送和接收条件,并对网卡缓冲区RAM进行划分,建立接收和发送缓冲环。具体过程请参阅参考文献[2]。需要说明的是,每一块网卡被赋予一个物理地址,以便通信站点的标识。这个物理地址存在网卡的PROM(存储地址为0000~0005H)六个单元中,在网卡初始化时,通过远程DMA读入DSP内存中,并送入网卡物理地址寄存器。在一步的意义在于:一方面,如果能正确读出网卡的物理地址,则说明网卡硬件基本没有问题,网卡的上电复位和DSP对网卡的初始化顺利通过;另一方面,这个物理地址可以用于DSP网络系统中的点名、包的过滤丢弃等服务,也就是说,在链路层根据数据帧携带的源地址和目的地址确定数据报从哪里来,是否接收或丢弃。网卡初始化时另一个重要的工作就是接收缓冲环的设置,为了有效利用缓冲区,NIC将接收缓冲区RAM构成环形缓冲结构,如图2所示。

接收缓冲区RAM分成多个256字节的缓冲区,N个(N最大为256)这样的缓冲区通过指针控制链接成一条逻辑上的缓冲环。缓冲环的开始页面地址存入PSTART寄存器,环页面结束地址存入PSTOP寄存器。PSTART和PSTOP确定了接收缓冲环的大小和边界。为便于缓冲环读写操作,还需要2个指针:当前页面指针CURR和边界指针BNRY。CURR确定下一包放在何处,起着缓冲环写页面指针作用;BNRY指向未经DSP取走处理最早到达的数据包起始页面,新接收的数据包不可将其覆盖,起着缓冲环读页面指针的作用。也就是说,CURR可以告诉用户网卡接收的数据分组当前放到了什么位置,而BNRY则用于确定DSP读缓冲环到了什么地方。由于接收缓冲区为环形结构,BNRY和CURR相等时,环缓冲区可能满也可能空。为了使NIC能辨别这两种状态,规定当BNRY等于CURR时,才认为环缓冲区满;当缓冲区空时,CURR比BNRY指针值大1。因此,初始化时设置:BNRY=PSTART,CURR=PSTART+1。这时读写指针不一致,为了保证正确的读写操作,引入一软件指针NEXTPK指示下一包起始页面。显然,初始化时NEXTPK=CURR。这时,缓冲环的读指针对NEXTPK,而BNRY只是存储分组缓冲区的起始页面边界指示,其值为NEXTPK-1。

2.2接收控制过程

DSP完成对DP8390的初始化后,网卡就处于接收状态,一旦收到分组,就自动执行本地DMA,将NIC中FIFO数据送入接收缓冲环,然后向主机申请“数据分组接收到”中断请求。DSP如果响应中断,则启动网卡远程DMA读,将网卡缓冲区中的数据分组读入学生机存储区,然后对接收缓冲环CURR、NEXTPK、BNRY指针内容进行修改,以便网卡能从网上正确接收后续分组。DSP响应网卡接收中断后,接收控制过程如下:

①设置远程DMA的起始地址;RSAR0=00H,RSAR1=Nextpk。

②设置远程DMA操作的字节数,这个长度在46~1500字节范围内根据具体要求自己确定。

③0AH送命令寄存器CR,启动远程DMA读。

④从网卡数据端口依序读入数据分组,注意,最先读入的4字节非数据分组内容,第1字节为接收状态,第2字节为下一包页地址指针,3与4字节为接收字节数。第2字节内容应该送入Nextpk,其它字节根据用户要求处理。

⑤修改边界指针BNRY=Nextpk-1。

⑥清除远程DMA字节数寄存器RBCR0和RBCR1。

2.3发送控制过程

DSP先执行远程DMA写操作,将内存中的数据分组传至网卡发送缓冲区,然后启动发送命令进行数据分组发送。发送控制过程如下:

①设置远程DMA的起始地址为网卡发送缓冲区起始地址;

②设置远程DMA操作的字节数;

③12H送命令寄存器CR,启动远程DMA写;

④依序送出数据分组至网卡发送缓冲区;

⑤清除远程DMA字节数寄存器;

⑥设置发送字节数寄存器TBCR0和TBCR1;

⑦12H送命令寄存器CR,启动数据分组发送。

3发送方发送频率的控制

发送方发送频率的正确控制主要保护两点:一是有一个最小发送时间间隔,否则会因为接收方不能及时接收而导致系统瘫痪;二是发送频率能够足具体的功能实现要求。譬如在语音的实时通信中,发送频率就取决于声卡的采样频率。在8kHz采样频率时,声卡每秒钟采样8000字节,采用1024字节需用时128ms,如果通信协议规定发送1次传送1024字节有效数据,则必须每128ms发送一次才能保证缓冲区有新数据待发送,也才能保证接收方有新数据播放。128ms是一个理论计算数值,在实际的操作中采样速度和发送频率之间总是不能完全匹配,而存放数据的缓冲区大小是有限的,如果没有良好的控制技巧来实现正确发送,就会造成声音抖动和延时。解决的办法是双缓冲技术和双指针控制,并且根据采样速度和发送频率之间的匹配情况送入不同的发送通信进行处理后发送。正确发送的含义有两方面,一是每次发送的都是新数据,二是能满足接收方总在播放新数据的需求。

4接收方防止数据包的丢失

由于DSP通过中断请求判断是否有数据分组到来,如果中断繁忙而两个数据包到来时间相差非常短,DSP有可能只响应一次中断,从而导致丢包的发生。分析网卡接收数据过程,当网卡收到数据分组时,首先执行本地DMA,将NIC中FIFO数据送入接收缓冲环,并将本地DMA操作的起始地址存放在当前页寄存器(CURR)和当前本地DMA寄存器(CLDA0、CLDA1)中,DSP从网卡接收缓冲环读出数据到存储器则称远程DMA操作,用软件指针Nextpk来指示远程DMA的起始页面。因此通过比较网卡本地DMA和远程DMA的当前地址,即在中断服务子程序中比较CURR和Nextpk指针,或比较CLDA0、CLDA1和Nextpk指针,就可以保证当前数据分组放到了哪里就读出到哪里,从而防止丢包的发生。

通信程序范文篇10

关键词JAVA,网络,SOCKET,APPLET

网络上的系统结构多为客户/服务器模式,服务器端负责数据和图像等的存储、维护、管理以及传递,客户端则负责人机界面的操作、送出需求及显示收回的数据。

下面介绍一下如何使用JAVA来进行网络编程:

1)由于客户端通过IE同服务器建立联系,所以客户端使用Applet,服务器端使用Application;

2)服务器应设置成多线程,应答多个客户的请求;

3)两端通信使用SOCKET机制。

1Java中输入/输出流概念:

过滤流DataInputStream和DataOutputStream除了分别作为FilterInputStream和FilterOutputStream的子类外,还分别实现了接口DataInput和DataOutput。接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean()readInt()、readLine()、readFully()等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble()DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream可以向所连接的输出流写入基本类型的数据。

2Socket机制

Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。

Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需求。使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程。使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行。

3Java语言

Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。

(1)简单性

Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的工作。这使程序设计更加简便,同时减少了出错的可能。

(2)面向对象

Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。

Java是一种完全面向对象的程序设计语言,它除了数组、布尔和字符三个基本数据类型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。

Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的单重继承,即每个类只能从一个类中继承。

Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。

(3)多线程

多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。

Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。

(4)分布性

Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。

(5)体系结构中立

Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。Java为了做到结构中立,除生成机器无关的字节码外,还制定了完全统一的语言文本,如Java的基本数据类型不会随目标机的变化而变化,一个整型总是32位,一个长整型总是64位。

为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。

java.lang:一般的语言包。其中包括用于字符串处理、多线程、异常处理和数字函数等的类,该包是实现Java程序运行平台的基本包

java.util:实用工具包。其中包括哈希表、堆栈、时间和日期等

java.io:基于流模型的输入/输出包。该包用统一的流模型实现了各种格式的输入/输出,包括文件系统、网络和设备的输入/输出等

:网络包。该包支持TCP/IP协议,其中提供了socket、URL和WWW的编程接口

java.awt:抽象窗口工具集。其中实现了可以跨平台的图形用户界面组件,包括窗口、菜单、滚动条和对话框等

java.applet:支持applet程序设计的基本包

(6)安全性

用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

4JAVA工具

(1)JDK

1)Java编译器

Java编译器将Java源代码文件编译成可执行的Java字节码。Java源代码文件的扩展名为.java,Java编译器把这种扩展名的文件编译成扩展名为.class的文件。源文件中的每个类在编译后都将产生一个class文件,这意味一个Java源代码文件可能编译生成多个class文件。

2)Java解释器

Java解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形Java程序的命令行工具。

3)Appletviewer

它是JavaApplet的简单测试工具,可使用它来测试JavaApplet程序,而不需要WWW浏览器的支持。

(2)VisualJ++

VisualJ++集成了可视化界面设计、交互式调试、代码编辑、联机帮助信息和介绍如何快速掌握该开发环境的实用向导等多项功能,同时具有能充分利用ActiveX和COM新技术的优势。利用VisualJ++可创建交互性很强的Internet应用程序,是难得的Java开发系统。

5客户机/服务器通信的实现:

(1)Application同Applet的通信

两端通过Socket机制进行连接:

1)客户端的编程流程:

?打开Socket,新建一个套接字;

?为套接字建立一个输入和输出流;

?根据服务器协议从套接字读入或向套接字写入;

?清除套接字和输入/输出流;

2)服务器端的编程流程:

?打开ServerSocket,创建一个服务器型套接字和一个普通套接字,服务器型套接字在指定端口为客户端请求的Socket服务;

?使用ServerSocket类的accept()方法使服务器型套接字处于监听状态并把监听结果返回给普通套接字;

?为该普通套接字创建输入和输出流;

?从输入和输出流中读入或写入字节流,进行相应的处理,并将结果返回给客户端;

?在客户端和服务器工作结束后关闭所有的对象,如服务器型的套接字,普通套接字,输入和输出流。

正是由于Java系统具有基于Socket的灵活通信机制,因而其应用程序能自由地打开和访问网络上的对象,就象在本地文件系统中一样。

(2)Applet之间的通信:

Applet之间的通信使用AppletContext类的getApplet()方法。

<appletcode=applet1.classwidth=200height=200name=first>

只要在程序中加入

Appletoneapplet=getAppletContext().getApplet(“first”);便可使用name为first的Applet中的方法了。

在该课题中大量使用了该种通信方法,因为专门同服务器端通信的Applet中包含接收信息方法和发送信息方法,所有客户端的Applet都要使用负责通信的Applet中的方法,所以客户端的Applet同负责通信的Applet必须进行通信。

6程序

//服务器端程序S.java负责与客户端通信

importjava.io.*;

.*;

importjava.lang.*;

importT2;

classThreadEchoHandlerextendsThread//创建线程

{

T2theT2=newT2();

Socketincoming;

intcounter;

ThreadEchoHandler(Socketi,intc)

{incoming=i;

counter=c;}

publicvoidrun()

{

try

{

DataInputStreamin=newDataInputStream(incoming.getInputStream());

DataOutputStreamout=newDataOutputStream(incoming.getOutputStream());

System.out.println("hello");

booleandone=false;

while(!done)

{Stringaa="";

Stringstr=in.readUTF();//从客户端得到字符串

//在此加入各自的服务程序

System.out.println(str);

theT2.pass(str);//解码

theT2.tongji();//修改监控库中的信息

aa=theT2.guan();//操纵数据库

System.out.println("stringzis:"+aa);

if(pareTo("null")!=0)

//若是查询数据库,返回查询后的结果

{//若不是查询数据库,不向客户端输出信息

out.writeUTF(aa);

out.flush();}

}//while

incoming.close();//线程关闭

}//try

catch(IOExceptione)

{System.out.println(e);}

}//endrun

}

//----------------------------------------

classS

{

publicstaticvoidmain(String[]args)

{

inti=1;

try

{

ServerSockets=newServerSocket(1111);

for(;;)

{

Socketincoming=s.accept();

System.out.println("connect:"+i);

newThreadEchoHandler(incoming,i).start();

i++;

}

}

catch(Exceptione)

{System.out.println(e);}

}

}

//客户端通信小应用程序Echo.java

importjava.io.*;

.*;

importjava.awt.*;

importjava.applet.*;

publicclassEchoextendsApplet

{

TextAreata;

SocketechoSocket;

DataOutputStreamos;

DataInputStreamis;

StringLine;

publicvoidinit()

{

setBackground(Color.white);

ta=newTextArea(5,80);

ta.setEditable(false);

add(ta);

try

{echoSocket=newSocket("10.102.4.41",1111);}//与服务器建立连接

catch(IOExceptione)

{System.out.println("error");}

}

publicvoidst(Stringstri)//发送字符串的方法

{

try

{DataOutputStreamos=newDataOutputStream(echoSocket.getOutputStream());

DataInputStreamis=newDataInputStream(echoSocket.getInputStream());

os.writeUTF(""+stri);//向服务器输送string

os.flush();

}

catch(IOExceptione)

{System.out.println("error:"+e);}

}

publicStringst1()//接收字符串的方法

{

StringLine="";

try

{DataOutputStreamos=newDataOutputStream(echoSocket.getOutputStream());

DataInputStreamis=newDataInputStream(echoSocket.getInputStream());

Line=is.readUTF();//从服务器读来的信息

ta.appendText(""+Line);//在文本域中输出信息

}

catch(IOExceptione)

{System.out.println("error:"+e);}

returnLine;

}

}

7程序调试心得:

1)在建立Socket连接时,两端的端口号必须设为一致,否则建立不了连接。服务器端必须有主机IP地址或主机名参数。

2)连接建立好之后应确定输入和输出流。起初程序中用的是DataInputStream和PrintStream,结果只能传输英文,传输中文时产生乱码,将PrintStream改为DataOutputStream,使用readUTF()和writeUTF()方法后,中文传输问题得到解决。

3)如果一个使用某端口的程序没有关闭,另一个程序就不能使用这个端口。

4)开始进行通信的程序均为Application,因不符合客户机/服务器机制,应将客户端的Application改为Applet。其转化的主要步骤如下:

?创建一个包含APPLET标签的HTML文件;

?去掉应用程序中的main()方法;

?类名应继承Applet类,而不是Frame类,并在程序开头加入

importjava.applet.*;语句;

?用init()方法代替Application程序中的构造方法,当浏览器创建Applet类对象的时候,它自动执行init()方法;

?如Application中缺省使用了BorderLayout布局管理器,应在Applet的init()方法中重新设定;

?如果Application中有setTitle()方法,必须将其去掉,如Application中使用了菜单,在Applet中用按钮来替换。

5)懂得了在一程序中如何引用自定义的类中的方法和变量,在程序开头加入import类名;在程序中加入类名实例=new类名();然后使用

实例.方法(),实例.变量即可。

参考文献:

[1]廖雷等,Java程序设计教程,中国电力出版社,2003