通讯程序(精选5篇)
通讯程序 篇1
1. 引言
ZigBee技术是一种新兴的近距离、低复杂度、低功耗、低数据速率、低成本的无线网络技术, 可以实现一点对多点的快速自动组网。该技术主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输, 以及典型的有周期性数据、间歇性数据和低反应时间数据传输。在以微机为控制中心的自动控制系统中, 可以使用ZigBee模块采集数据, 然后用异步串行通信方式传给微机, 微机进行数据处理后, 再将控制信息发送给ZigBee模块实现自动控制。因此实现ZigBee模块与微机串口的全双工通信具有重要意义。Java是一种跨平台的面向对象编程语言, 由于Java语言内置了对多线程的支持, 所以Java语言非常适合开发同时采集多个节点信号的应用软件。本文作者采用cc2430作为ZigBee模块的核心, 利用javax.comm开发包中的类实现了微机通过串口与ZigBee模块的全双工通信。
2. Java串口通信程序的编写
2.1 javax.comm包介绍及配置
Java语言由语法规则和类库两部分组成。语法规则确定了Java程序的书写规范。类库是实现各种功能的类的集合, 每个类通常对应一种特定的功能, 这样在编写Java程序完成某一功能的时候, 就可以直接利用这些类。Java SE本身并不提供对串口操作的类, 如果要实现对串口读写操作, 可到Sun公司网站下载javax.comm包。该包以Javacomm20-win32.zip形式发布, 解压后, 得到10个文件, 2个文件夹, 其中有3个文件编程时必须用到, comm.jar提供了对RS-232串行端口通讯的支持, Java通过该类库能够极大地简化对串口的操作过程, 另外两个重要的文件:win32com.dll和javax.comm.properties。win32com.dll提供了comm.jar调用的本地驱动接口, javax.comm.properties是这个驱动的配置文件。将comm.jar拷贝到<JDK>jrelibext目录, 将win32com.dll拷贝到<JDK>jrebin目录, 将javax.comm.properties拷贝到<JDK>jrelib目录, 便可对串口编程了。
2.2 Java读写串口的编程实现
根据编程要求, 需要声明的对象如下:
Java读写串口过程主要是调用Javax.comm包中的Java Communications API函数。我们需要获得一个SerialPort对象。办法是调用CommPortIdentifier的open方法, 然后将结果转换为SerialPort引用。open方法有两个参数:第一个参数是一个字符串, 它指出谁打开此端口。第二个参数是时间, 表示开启端口超时的毫秒数。catch () 表示如果端口被另外的应用程序占用时或该端口操作不被支持, 程序将抛出异常。实现上述功能的代码如
正确使用串口完成通信功能还需要初始化串口, 需要初始化的参数有:通信口、波特率、数据位、停止位、奇偶校验位等。实现串口初始化的代码如下:
要想实现串口的读写功能, 还必须创建输入流和输出流。由serialPort对象调用getInputStream () 方法可以获得端口的字节输入流, 调用getOutputStream方法可以获得端口的字节输出流。创建输入流和输出流的代码如下:
可用字节输入流in调用read (byte[]b) 方法读出串口中的数据。实现代码如下:
可用字节输出流out调用write (int b) 方法向串口对象的数据流写数据。实现代码如下:
使用完端口后, 要将其关闭, 这样可以让其它的程序有机会使用它, 否则其它程序使用该端口时可能会抛出端口正在使用中的错误。可调用CommPort类的close () 方法关闭端口。部分代码如下:
3. 硬件接口与cc2430的串口操作
cc2430与微机之间的硬件接口可用1片MAX232芯片与几个电容实现。USART0和USART1是cc2430的串行通信接口, 它们能够分别运行于异步UART模式或者同步SPI模式。UART操作由USART控制和状态寄存器UxC-SR以及UART控制寄存器来控制。这里的x是USART的编号, 其数值为0或者1。当UxCSR.MODE设置为1时, 就选择了UART模式。
(1) UART发送
当USART收/发数据缓冲器、寄存器UxBUF (寄存器UxBUF双缓冲, 这里的x是USART的编号, 其数值为0或者1, ) 写入数据时, 该字节发送到输出引脚TXDx。
(2) UART接收
当1写入UxCSR.RE位时, 在UART上数据接收就开始了。然后UTART会在输入引脚RXDx中寻找有效起始位, 并且设置UxCSR.ACTIVE位为1。当检测出有效起始位时, 收到的字节就传入接收寄存器, UxCSR.RX_BYTE位设置为1。该操作完成时, 产生接收中断。通过寄存器UxBUF提供收到的数据字节。当UxBUF读出时, UxCSR.RX_BYTE位由硬件清0。
4. 结束语
介绍了利用javax.comm开发包实现Java与ZigBee模块串口通信的基本方法。该方法在基于ZigBee技术的温度控制系统中得到验证, Java程序能够与ZigBee模块实现全双工的串口通信, 串口通信应用广泛, 因而具有一定的实用意义。
摘要:在简单介绍ZigBee技术的基础上, 论述了在Java程序中利用javax.comm开发包中的类实现微机的RS-232串口与ZigBee模块通信的方法。
关键词:Java,ZigBee,串行通信,javax.comm
参考文献
[1]Stephen Potts等著, 马朝晖等译.Java2技术内幕[M].北京:机械工业出版社, 2003.
[2]周海涛, 高兴锁, 江晓峰.基于java数据采集串口通讯的设计和实现[J].微计算机信息, 2006, 22 (4) :141-142.
[3]李正, 关永, 王亮, 宁婷婷.嵌入式ZigBee串口模块的设计[J].微计算机信息, 2009, 25 (20) :40-41.
[4]霍晓丽, 贾祥芝.利用comm.jar开发包实现Java与单片机全双工串口通信[J].工矿自动化, 2005, (2) :49-52.
[5]李良, 朱善安.基于Java的串口通信[J].电子器件, 2007, 30 (2) :714-720.
通讯程序 篇2
伺服系统的主要控制部分是通过ACU (天线控制单元Antenna Control Unit) 来完成的, 用工控机及相应板卡作为硬件平台来实现ACU是目前伺服设备中较为流行的方案体制。在这种体制下实现ACU, 软件设计成了整个设备质量的关键。本文就ACU软件设计中遇到的有关通讯程序的两个问题进行了分析研究, 并提出相应的处理方法, 达到了预期效果。
2 程序设计难点
2.1 RS-485通讯的查询—应答机制
2.1.1 问题的提出
PLC (可编程控制器Programmable Logic Computer) 作为一种稳定可靠, 控制程序灵活可变的控制器, 在工业控制系统中已经得到了广泛应用[1]。PLC在ADU (天线驱动单元Antenna Drive Unit) 的应用更是十分普遍。ACU通过PLC的RS-485 接口与ADU进行通讯, 可以在一条电缆上传输IO、模拟量等信号, 在极大地节约电缆成本的同时提高了系统的可靠性, 丰富了A C U —ADU之间信息交互和控制信号的类型, 并使得A C U和ADU在标准化设计上少了许多接口上的障碍[2]。但是, PLC多采用RS-485 接口, 因为其半双工特性和节点的不对等特性, 使得A C U在通讯程序上的设计多了许多应该特别注意的地方。简单的定时发送数据 (盲发) 可能会导致如下问题:
① 通讯可能冲突, 引发通讯失败 (如:ADU还没有发送完毕, ACU就发送下一帧数据, 使数据冲突) ;
② 为避免数据冲突而延长ACU端发送数据的间隔, 使通讯速率 (通讯周期) 下降, 甚至满足不了实时性需求。
另外, RS-485 接口本身可以联网, 但没有调度的通讯方式无法满足联网的要求, 被迫在硬件上采用点对点方案, 增加了硬件的复杂程度并降低了可靠性。
2.1.2 问题的对策
遵循RS-485 规范, 采用查询—应答机制进行通讯。
RS-485 的物理层上是半双工的, 同一时间只允许一个节点进行发送, 其它节点必须处于接收状态, 这使得RS-485 的节点设备被分为主站和从站两种类型。在一个RS-485 网络中只允许存在一个主站设备, 其他的设备都应该是从站设备[3]。
RS-485 网络上的通讯是由主站设备主动发起的, 即主站发送查询信息帧, 从站在接收到了查询帧后再进行应答 (发送数据) ;在联网应用中, 任何一个从站设备必须在收到地址码与自己适配的查询帧后才能应答。
通过查询- 应答机制, 保证了RS-485 网络上的所有发送过程都在主站的掌握中, 不会出现多个设备同时发送时可能带来的冲突。
从站在收到查询帧后立即应答;同样, 主站在接收到从站的应答帧后可以立即发送下一个查询帧, 这样就不用为了避免冲突而人为的延长查询帧之间的间隔, 从而最大限度地提高了通讯速率 (通讯周期) 。
查询—应答机制的流程如图1 所示。
在天线伺服系统中, 一般将ACU作为主站, 将ADU (PLC) 作为从站。
2.1.3 超时无应答的重发机制
在查询—应答的通讯机制中有一个问题必须解决, 即当从站因某些原因未响应主站查询时整个通讯可能会中断。比如:ACU先于A D U开机, 当A D U开机时已收不到查询帧, A D U在等待查询, 而A C U又在等待应答, 这样就会造成通讯逻辑的死锁。
作为主站, 必须要有超时重发功能, 即当超过一定时间没有收到从站的应答信息时, 必须要重新发送查询帧, 重新建立通信流程。
图2 为引入超时无应答重发处理之后的流程图。
2.1.4 设计与实现
在某工程应用中, A C U — A D U之间的大致通讯设置为:
波特率:19.2 bps
ACU下行帧长:16 bytes
ADU上行帧长:14 bytes
PLC采用5ms空闲行检测进行帧数据接收, ACU采用10ms空闲行检测进行帧数据接收。
要求ACU与ADU的通讯速率尽量满足20Hz要求。
根据以上通讯设置, 整个通讯周期需要的时间为:
PLC字符间隔检测时间:5ms
ACU空闲行检测时间:10ms
PLC发送延时 (用以适配PPI电缆的方向转换) :5~10ms
A C U发送延时 ( 用以适配P P I电缆的方向转换) :6ms
这样, 一个完整的通讯周期与20Hz (50ms) 之间的时间裕度为3.94~9.94ms, 因为Windows的多线程在时间分配和C P U负荷的原因, 这几个毫秒的时间裕度很容易被系统吃掉, 采用20Hz定时发送就比较容易出现发送冲突。为了保证较低的通讯误码率, 就必须降低ACU发送数据的频率, 从而达不到设计要求 (20Hz) 。
采用了查询—应答机制后, ACU自动根据实际的通讯周期调整发送, 保证了极高的通讯速率和可靠性。在测试中连续进行的两百万次通讯中误码率为0, 而平均的通讯周期达到46.7ms。实践证明, 查询—应答机制比“盲发”机制在快速性和可靠性上有本质上的提高。
2.2 串行异步通讯的滑动窗口解帧
2.2.1 问题的产生
串行异步通讯是面向字节的, 而在A C U的外部设备通讯中信息的封装是面向帧的, 从连续的字节流中解出正确的信息帧是A C U通讯中面临的一个问题。
在有通讯同步信号时, 同步信号之后的所有字节都按一帧数据处理, 帧解码不存在问题;否则, 必须在一帧数据中附带帧的识别信息, 如帧头/ 帧尾、帧头/ 帧长等帧信息。依靠帧信息进行帧识别, 必须要求在进行通讯协议时进行周全的考虑, 在帧信息中不能重复出现帧的识别信息, 如帧头、帧尾、帧长等数据不能出现在帧的数据信息中, 否则会引起帧的误判, 如截断帧、丢失帧等。
例如, 某通讯协议规定:通讯帧长16 字节, 帧头为STX (0 × 02) , 帧尾为ETX (03) , 在帧信息中又出现了ETX, 那么按帧头/ 帧尾解帧时会出现帧的提前截断, 如图3 所示。
在串行通讯的协议制定中一般采用A S C I I码或BCD码封装帧信息、用不可打印字符如STX、ETX等封装帧控制信息的方法来避免控制信息和数据信息的冲突[4], 但这种封装方法会造成帧过大, 在强调通讯实时性的A C U应用中往往不大适合。
特别是对于ACU — ADU之间的通讯, 需要封装的数据有角度、开关量、电流值等信息, 如果都采用ASCII码封装, 其长度可能难以接受, 同时因为PLC在运算能力和数据空间上的限制, 进行ASCII码封装的代价是比较大的; 反之, 用二进制原码封装的效率是最高的, 对PLC等低运算能力设备的要求也是最低的, 但其解帧时的误码无法避免。
2.2.2 问题的对策
对于ACU与周边设备的实时通讯, 其长度往往是固定的, 因此我们可以采用帧头/ 帧尾+帧长同时适配的方法, 对接收到的数据采用滑动窗口提取的机制, 既降低了对通讯协议的要求, 又大大降低了通讯解帧的误码率。
所谓滑动窗口是指:将接收到的数据先存入缓冲区, 然后从缓冲区的起始点开始以指定帧长, 按帧头/ 帧尾进行搜索, 从整个缓冲区中找出三者同时适配的段并提取。
2.2.3 设计与实现
例如, 某通讯协议规定:通讯帧长16 字节, 帧头为STX (0×02) , 帧尾为ETX (03) , 在帧信息中又出现了ETX, 按照本方法, 将不会出现帧的提前截断。如图4 所示, 虽然在信息中出现了ETX (0×03) , 但因为其帧长不为16, 所以不会在此处提前将帧截断。帧解码问题得到较好解决。
滑动窗口法处理的基本流程图如图5[5]所示。
3 试验结果
如图6 所示, 这是在某型设备伺服系统中应用上述方法后进行天线性能测试时的运行图, 可以看出设备在运行中曲线正常, 且经过长时间的运行符合技术指标, 达到了设计的要求和目的。
4 结束语
上述问题的解决方法已经成功应用于某型设备伺服系统中, 目前该设备已经通过验收并已形成测控能力。实践证明本文提出的方法对系统软件性能和稳定性有了较大的改善, 对于其他类似工程也具有一定的借鉴作用。
参考文献
[1]赵巍巍, 王洪诚等.LabVIEW下多台S7200 PLC自由口通信方法研究[J].自动化技术与应用, 2013, (4) :58-62.
[2]何衍庆, 常用PLC应用手册[M].电子工业出版社, 2008.03.
[3]谢瑞和, 串行技术大全[M].清华大学出版社, 2003.04:5-9.
[4]于英民, 于佳.计算机接口技术 (第三版) [M].电子工业出版社, 2004.10:193-198.
通讯程序 篇3
小应用程序是通过<APPLET>标记嵌入网页运行的。<APPLET>标记具有许多属性, 包括不可缺省的CODE (指定要运行的小程序类文件) 、WIDTH (小程序界面宽度) 和HEIGHT (小程序界面高度) , 以及其它可以缺省的CODEBASE (类文件URL基址) 、从外部为小应用程序传递参数的参数属性 (<PARAM>) 等。本文介绍运用<APPLET>标记的NAME (实例名) 属性实现同一网页中多个小应用程序之间的相互通讯。
2. 实现小应用程序之间通讯的方法
一个Web页面可以包含一个以上的小应用程序。通过<APPLET>标记的NAME属性可以实现同一个页面的小应用程序之间相互通讯的功能。一方面, 需要在页面的HTML文档的各个小应用程序标记中设置NAME属性, 为各个小应用程序指定其实例名。另一方面, 在各个小应用程序类中用getAppletContext () 方法获取页面的小应用程序上下文 (环境) , 用该上下文调用getApplet (String name) 获取指定实例名name的其它小应用程序实例对象, 然后再用实例对象调用方法实现数据通讯。
3. 小应用程序通讯例程
【程序描述】在同一个页面中, 通过二个小应用程序间的通讯, 使文档数据有两种不同的显示和编辑方式:当第一个小应用程序中用户运用两个文本框设置坐标位置按回车键后, 第二个小应用程序中的小方块自动移动到相应位置;当第二个小应用程序中用户单击鼠标后, 小方块自动移动到相应位置, 同时第一个小应用程序中两个文本框自动显示鼠标坐标。
【程序代码】:
程序运行结果如图1所示。
【程序分析】程序中, 方法public AppletContext getAppletContext () 是java applet.Applet类的成员方法。小应用程序调用该方法可以获取其上下文AppletContext接口的引用。java.applet.AppletContext是小应用程序及其运行环境之间的标准接口, 小应用程序可以使用此接口中的方法获取有关其环境的各种信息。小应用程序环境包括小应用程序所在的HTML文档以及同一文档中的其他小应用程序。本例程通过该接口引用调用接口方法Applet getApplet (String name) , 获取指定实例名 ("No.1"、"No.2") 的小应用程序实例对象, 进而由小应用程序实例对象调用小应用程序类中定义的通讯发送方法send与通讯接收方法receive, 实现TextApplet与MouseApplet小应用程序之间的相互通讯。
4. 结语
同一网页中多个小应用程序之间实现相互通讯的一般方法是:
在页面的HTML文档的各个小应用程序<APPLET>标记中设置NAME属性, 为各个小应用程序指定其实例名。
在各个小应用程序类中定义其通讯发送方法 (send) 与通讯接收方法 (receive) , 发送方法 (send) 用来向其它小应用程序发送自己的信息;接收方法 (receive) 用来接收其它小应用程序发来的信息并作出自己的响应。
在定义小应用程序的通讯发送方法 (send) 时, 一般先运用getAppletContext () 获取上下文AppletContext接口引用, 再用其调用接口方法getApplet (String name) 获取实例名为name的其它小应用程序实例对象, 进而调用name的通讯接收方法 (receive) 接收信息作出响应。
参考文献
[1]朱福喜, 唐晓军等编著.Java程序设计技巧与开发实例.人民邮电出版社, 2004.2
通讯程序 篇4
关键词:OPC接口,组态软件WinCC,VC应用程序
0 引言
某钢厂新上一套轧后淬火处理线, 基础自动化级 (L1) 主要由PLC主控制器和远程I/O组成, 完成对现场阀门、仪表等的自动控制, 过程控制级 (L2) 由组态软件Win CC组成, 实现数据处理/存储、生产过程监控、操作指导及过程优化控制等功能[1]。
上位机组态软件Win CC操作简单, 组态简便, 但数据处理的速度不及VC。为了实现上位机组态软件Win CC的模型控制功能, 本文用VC开发了基于OPC接口的客户端应用程序, 实现VC与Win CC之间的通讯。淬火冷却项目中Win CC完成监控功能, 而模型的运算处理交由VC应用程序来完成, 两者通过OPC接口完成实时通讯。
1 OPC接口概述
OPC是OLE for Process Control的缩写, 即过程控制用对象链接与嵌入 (OLE) 技术。OPC是一套在基于Windows操作平台的工业应用程序之间提供高效的信息集成和交互功能的组件对象模型的接口规范, 该规范定义了一个开放的接口, 在这个接口上, 基于PC的软件组件能交换数据。
O P C的结构采用服务器/客户端模型。O P C服务器是数据源, 它们拥有数据, 或者从各种设备、系统、控制器得到数据, 可以是组态软件, 也可以是C或C#编成。OPC客户机是数据用户, 它们在应用中使用数据, 但不需要了解数据来源, 典型的是用VC、VB、Excel、Delphi等写成。
2 现场上位机组成
计算机控制系统的模型机放在服务器中, 用于进行运算处理, 设定用于过程控制的模型。组态软件Win CC实现现场的可视化并提供控制操作, 但Win CC的数据处理运算能力不高, 为了得到更加实时的控制, 使用VC开发OPC客户机, 完成数据的运算处理, 之后通过接口传回OPC服务器Win CC, 实现数据采集与处理的无缝连接。
淬火冷却处理线上基础自动化级 (L1) 与过程控制级 (L2) 之间进行通讯的变量依据现场工艺确定。
钢板出精轧机后, 经辊道传输进入淬火控冷区, 在精轧机后的HMD检测到钢板信号后, 会将通讯变量传送到Win CC上进行显示, 当设定条件触发后, 由VC根据OPC接口传输来的变量进行模型计算, 重新设定集管流量、辊道速度等, 然后将计算后的模型传回Win CC, 对淬火控冷过程进行设定控制[2]。
3 客户端VC应用程序实现
Win CC与VC之间基于OPC接口的通讯程序开发的实现过程如下[3]:
1) V C中利用M F C A p p W i z a r d生成程序框架, 建立基于对话框的应用程序项目。执行“File”—“New”命令, 出现New对话框, 选择“MFC App Wizard[exe]”项, 输入程序名“OPCClient”, 单击“OK”按钮, 选择“Dialog based”完成创建。
2) 添加控件及成员变量。该应用程序要求VC客户端能够从Win CC服务器获取通讯变量数据, 经过运算后, 再将计算结果返回给Win CC, 所以程序界面中药设置各种控件。根据项目要求在VC开发环境下添加编辑框、按钮等控件, 并为控件关联成员变量。
3) 添加其他成员变量。在基于对话框应用程序的头文件中, 添加程序所需要的其他变量:
4) 包含OPC头文件。开发OPC客户应用程序, 除了需要OPC接口外, 还需要在程序中包含OPC标准库文件:
包含了头文件后, 再指定这些文件的存放路径就可以了, 在VC环境中的“Tools”—“Options”对话框下设置。
5) COM支持库。在使用接口类之前, 必须首先初始化COM库, 函数Co Initialize () 可以完成此功能, 代码如下:
Co Initialize (NULL) ;//初始化COM库
6) 得到OPC服务器的CLSID。每个服务器都有一个字符串类型的Prog ID, 通过它可以得到一个全球唯一的CLSID, 函数CLSIDFrom Prog ID () 可以完成此转换, 代码如下:
7) 连接OPC服务器。OPC客户能够连接到OPC服务器上, 并建立OPC组和OPC数据项, 这是OPC数据访问的基础。
8) 创建OPC组和OPC数据项, 该步骤要依据通讯变量表中变量的个数来确定数据项数目。代码如下:
9) 读写数据。添加完数据项后, 就可以用IOPCSync IO接口的Read () 和Write () 方法进行读写操作, 为了匹配两种方法的参数, 需要将添加结果传递给OPCHANDLE类型的变量, 代码如下:
然后就可以编写读写的消息映射函数了, 在此不做详细介绍。
10) 删除对象, 释放内存。在VC应用程序停止运行之前, 必须删除已创建的OPC对象并释放内存, 代码如下:
至此, OPC客户端VC应用程序编写完成, 项目中, 根据现场的实际情况和服务器Win CC与客户端VC之间传递的参数表, 定义了传递的变量, 完成数据的通讯, VC中接收到组态软件Win CC传递过来的参数后, 进行模型的运算处理, 对控制冷却模型进行修正, 再将修正后的模型参数传递给Win CC, Win CC通过以太网通信传递给下位机PLC, 完成淬火空冷线的控制任务。
Win CC与VC之间的通讯界面如图1和图2所示。
4 结论
某钢厂的轧后淬火处理项目, 为了更好地实现模型控制, 使用OPC接口实现了二级过程控制级Win CC组态软件与VC客户端之间的通讯, 完成两者之间的数据交换。结果表明, Win CC与VC之间通讯正常, 数据交换速度能够满足工业控制要求, 从而为二级系统的控制集成功能提供了保障。
参考文献
[1]王继忠, 童朝南, 彭开香, 等.淬火机计算机过程控制系统技术研究[J].电气传动, 2007, 37 (1) :45-47.
[2]胡志坤.Visual C++通信编程工程实例精解[M].北京:机械工业出版社, 2007.
通讯程序 篇5
由于可靠性高, 接口功能多, 体积小等优点, 单片机在机器人工业中得到了广泛的应用, 但是单片机无法单独构成完整的控制系统, 对于复杂的计算和实时显示各传感器的状态, 无友好的控制界面, 不利于监控。而在工业现场控制中一般是使用上位机与单片机组成分布式控制系统, 这就需要使用单片机的通讯技术。
本文设计的堆垛式机器人的监视及控制系统中采用以STC12C5A60S2为核心的机器人作为下位机, 完成传感器的数据采集及控制量的输出, 上位机采用个人计算机来完成传感器数据的处理及反馈, 路线规划, 状态显示, 执行部件检测等功能, 实现对堆垛式机器人的实时监视与控制。
为了实现STC12C5A60S2单片机与上位机的通讯, 有多种技术可以使用, 其中Visual C#2010是一套独立的windows32 X86架构的软件开发系统, 是可视化、面向对象、采用事件驱动方式的高级程序设计语言, 尤其是它提供了预置对象——COM通讯组件, 通过对该COM通讯组件的相关属性设置, 可以完成获取单片机的相关端口状态, 向单片机发送相关指令, 可以很方便的完成目标程序与单片机之间的通讯, 以实现稳定可靠地通讯。
二、STC12C5A60S2与上位机之间的通讯协议
通讯协议包含了两方面的内容:1、通讯接口, 2通讯方式。
STC12C5A60S2与上位机之间的通讯一般采用RS232接口实现, 在本例中使用MAX232芯片完成电平转换以实现COM口与单片机之间的通讯。通讯方式有两种:一种是上位机使用具有初始传送优先权, 所有的通讯指令均由上位机发出, 下位机始终处于被动状态, 另外一种单片机具有优先权, 命令有单片机发出, 本例中采用了两种结合的通讯方式。
单片机与上位机的通讯以帧为单位进行, 由于数据采集具有特殊性难以找到通用的协议, 根据设计需求设定发送数据位的通讯格式为:
以上通讯协议中每一均含8位数据, 由此可见每一次通讯使用9个字节, 具体的在单片机端的实现代码如下
通过在单片机中定时循环调用自定义的sendbyte函数实现定时发送单片机各端口的状态值。
三、上位机的数据接收及处理
在.NET Framework 4.0中提供了Serial Port类, 该类主要实现串口数据通信等。
其中重要的属性如下
SerialPort类的常用方法如下
通过以下代码将下位机发送的信息进行拆分校验
其中170, 90、165、106为设定的分割标志。
四、上位机对下位机的操控
在获取各传感器状态的基础上, 当机器人出现故障时, 运行通过人机界面来完成各执行电机的动作, 如托盘的进出, 巡线电机的前进后退, 手抓电机的张开或者收缩等。
上位机通过serialWrite ("g") 函数向下位机发送各种操作指令, 在操作前需对串口进行设置, 例如串口值、波特率等
在下位机中使用串口中断来接受各种指令, 具体指令如下
五、结论
通过对该机器人的监控程序的具体设计, 阐述了C#与单片机的通讯方式, 自定义通讯协议的定义方法, 程序设计方法, 系统运行表明, 使用C#提供的通讯控件设计的程序稳定可靠, 很好地满足了监控系统的设计需求, 由于篇幅所限, 仅列出核心通讯协议代码及控制代码。
摘要:单片机在机器人中有着广泛的应用, 但是由于计算性能欠佳, 无法完成复杂的功能, 需要使用上位机对其进行监控, 本文针对ZKRT-300机器人采用C#环境设计了监控程序, 就通讯协议及数据处理进行了论述.
关键词:单片机,C#,监控,程序设计
参考文献
[1]谈士力, 沈俊杰, 张海洪等.VB下的PLC通讯以及在壁面清洗机器人监控中的应用[J].机器人, 2001, 23 (2) :118-122.
[2]智少磊, 夏继强, 张炯等.基于OPC的服务机器人监控系统设计[J].计算机工程, 2012, 38 (14) :266-268, 271.DOI:10.3969/j.issn.1000-3428.2012.14.079.