3 实时串行通讯程序设计
3.1 通讯协议1da215【中国自动化网社区】ba57de【http://sns.ca800.com】983
(1) 一桢数据由1 位起始位, 8 位数据位、1位校验位、1 位停止位共11 位组成。9fd68e3【中国自动化网社区】1bd641【http://sns.ca800.com】ad64
(2) 波特率为9 600 bps。电动装置测试系统的单片机的串口选用UART0 进行数据的发送和接收, 为了得到准确的波特率, ARM 单片机采用振荡频率为111059 2 MHz 的晶振。PC 机串口波特率通过VB 通讯控件MSComm 的Setting 属性设置, 为保证数据传输的准确性, 两者的波特率必须一致。9fd68e3【中国自动化网社区】1bd641【http://sns.ca800.com】ad64
(3) 系统采用异步通讯方式, 上位机通过令牌传递总线(token - passing bus) 方式与远程单元进行通讯〔2〕。PC 机发送的信息为固定4 个字节。第1 个字节和第2 个字节分别为起始标志符和远程单元的具体地址号, 第3 个字节表示发送的是令牌还是命令, 第4 个字节为结束标志符。6ff46b【中国自动化网社区】291621【http://sns.ca800.com】ec48
6ff46b【中国自动化网社区】291621【http://sns.ca800.com】ec48
(4) 远程单元接收到令牌后, 对照令牌的地址号与本单元地址进行判断, 得知令牌是本单元的, 此时总线处于接收数据状态。此单元开始发送信息, 发送的信息共158 个字节。第1 个字节和第2 个字节分别表示起始标志符和命令符, 第3 个字节表示数据个数, 第4 个到第157 个字节表示采集的测试数据, 第158 个字节表示结束标志符。如果地址不符, 则将令牌转发到下一单元〔3〕。其通讯方式如图3 所示。6ff46b【中国自动化网社区】291621【http://sns.ca800.com】ec48
3.2 远程单片机控制系统的串行通讯程序设计61【中国自动化网社区】7c4481【http://sns.ca800.com】930d
远程ARM 单片机采用中断方式进行数据接收, 基于软件ADS112 编程与上位机进行通讯, 上位机通讯子程序流程图以及下位机中断子程序流程图分别如图4 和图5 所示。61【中国自动化网社区】7c4481【http://sns.ca800.com】930d
控制中心上位PC 机始终在循环发送令牌, 当远程单元接收到与本机地址相同的令牌时, 置接受数据标志, 接收到自己的令牌后, 远程单元开始上传数据到上位PC 机, 与此同时PC 机停止发送令牌并处于接收数据状态, 等到接收数据完毕并检验数据合格后发送确认命令到此远程单元, 如果没收到数据或数据不合格发送错误标志到此远程单元。如果收到的令牌与本机地址不同时, 程序返回中断入口处, 继续执行其它操作。这样可保证远程单元把数据准确地发送到上位机PC 机。61【中国自动化网社区】7c4481【http://sns.ca800.com】930d
61【中国自动化网社区】7c4481【http://sns.ca800.com】930d
950【中国自动化网社区】ef864c【http://sns.ca800.com】b0f78c
3.3 上位PC 机串行通讯程序设计方法950【中国自动化网社区】ef864c【http://sns.ca800.com】b0f78c
上位机利用VB 610 进行编程, 用VB 610 开发串行通讯程序普遍采用两种方法: 一种是利用Windows 的API 函数; 另一种是采用VB 的通讯控件MSComm。利用API 函数编写串行通讯程序较为复杂, 需要调用许多繁琐的API 函数, 而VB610 的MSComm 通讯控件提供了标准的事件处理函数、事件和方法, 用户不必了解通信过程中的底层操作和API 函数〔4〕, 从而比较容易、高效的实现了串口通信。950【中国自动化网社区】ef864c【http://sns.ca800.com】b0f78c
控件提供了两种功能完善的串口数据接收和发送功能: 一种是查询法, 通过Com2mEvent 的值来轮询(polling) 事件和通讯状态,可以使用定时器和DO .Loop 程序来实现; 另一种是事件驱动法( Event - driven) , 利用MSComm 控件OnComm 事件来捕获串口通讯错误或事件, 并在OnComm 事件中编写程序进行相应的处理〔5〕。本软件系统采用了定时器来发送令牌以及接收远程单片机的回执信息, 使PC 机作出更快的反应。950【中国自动化网社区】ef864c【http://sns.ca800.com】b0f78c
软件采用定时器Timer1 控件来实现令牌的循环发送。其中设置定时器响应一次的时间为10ms( Timer11Internal = 10) 。950【中国自动化网社区】ef864c【http://sns.ca800.com】b0f78c
3.4 下位机ARM2210 系列单片机串行通讯程序设计方法950【中国自动化网社区】ef864c【http://sns.ca800.com】b0f78c
下位机利用软件ADS112 进行编程, 此软件是专为ARM 单片机开发的一种软件, 其语言类似于C 语言, 有很好的应用性。950【中国自动化网社区】ef864c【http://sns.ca800.com】b0f78c
4 结语
该系统应用在对远程设备的在线监测, 其通讯网络部分运行平稳, 数据传输误码率低, 传输速度符合要求, 效率高, 操作简单, 组网方便, 满足生产现场的数据检测和控制要求。该系统可广泛应用于高精度的工业测控和数据采集等领域中。950【中国自动化网社区】ef864c【http://sns.ca800.com】b0f78c