ModBus的通讯总线在电量监测中的应用
温馨提示:这篇文章已超过147天没有更新,请注意相关的内容是否还可用!
合肥市巢湖水源厂低压配电房安装了7台型号为CD194E-2S4型电力仪表,通过RS485口,用双屏蔽通讯线将它们与上位机连接起来,上位机选用的是研华工控机。上位机的通信软件采用VB6.0的开发环境。一般用VB开发串行通信程序有两种方法:一是利用Windows的通信API函数;另一种是采用VB标准控件Mscomm来实现。利用API编写串口通信程序较为复杂,需要掌握大量通信知识,其优点是可实现的功能更丰富、应用面更广泛,更适合于编写较为复杂的低层次通信程序。VB通信控件Mscomm提供了功能完善的串口数据的发送和接收功能,Mscomm控件具有两种处理方式:1。事件驱动方式:由Mscomm控件的OnComm事件捕获并处理通信错误及事件;2。查询方式:通过检查CommEvent属性的值来判断事件和错误。Mscomm控件的通信功能实现,实际上是调用了API函数,而API函数是由解释并传给设备驱动程序执行的,对于VB程序开发者只需知道Mscomm控件的属性和事件的用法即可以实现串口的操作。不论采用哪种方法编写的串行端口通信程序,一般都可分为以下几个过程:
(1)初始化串行端口
在初始化程序中,需要设定好整个帧结构的命令数组、传输波特率、奇偶校验、停止位,开辟数据缓冲区,完成一些必须的串口初始化设定。
(2)数据传输
读写串行端口可分四种方式:查询方式、同步I/O、异步(后台)I/O和事件驱动I/O。命令字的发送应该严格按照Modbus规约所设计的帧格式和上下位机在该规约基础上所定义的通信协议来编程。
(3)超时控制
为了防止意外情况使串口读写无休止地等待,必须在程序中设置超时控制。
(4)CRC校验的实现
目前仪表类比较普遍采用的是CRC16校验码。其生成多项式为X16+X15+X2+1。在算法实现上,可以先预置一个16位的寄存器FFFF(全1),然后把8位的2进制数据(一个字节)与16位的CRC寄存器低8位异或,并把结果放回CRC寄存器同时寄存器内容右移,MSB补0,并检查移出的LSB。如果LSB为0则继续右移动,为1则CRC寄存器与多项式异或。重复上面操作到一个8bit字节完成,再继续对下一个数据进行相同处理,直到所有数据结束。这个时候CRC寄存器中的数据就是我们所要的CRC码了。
下位机一般是使用固化好通信协议及工作指令的单片机。因为测控系统多采用的是单发多收的通信机制[4],所以在下位机要允许用户预先设定本机的地址码,并且保证不能重复。此外,要注意通信波特率必须与上位机的波特率相匹配。在下位机软件开发中,要遵循Modbus规约的通信帧结构对上位机传输的命令进行解析:非呼叫对象应能及时重新恢复等待接受状态;响应呼叫的下位机要解析命令代码并进行相应的功能处理,对非法的命令操作要能回送报错信息。在具体的工程开发中,下位机多是采用各个厂家出产的基于Modbus规约的智能仪表。这样虽然简化了我们开发的工作量,但是下位机的合理安排与设计能降低系统误码率、提高可靠性。因此是每个工业系统设计人员所不应该忽略的重要部分。在工业控制中,因为各种干扰源的存在且一般下位机数量较大,要对RS-485芯片选型有很认真的考虑。条件许可的话尽量选用抗电击和有较大级连驱动能力的芯片。理论上485芯片的级连能力至少32门,目前很多芯片厂家都能使工业级的级连数达到128以上。在实际应用中应该让系统具有一定的富余度,一般级连数不能超过该器件满载的70%。在选配RS232到RS485转换头的时候也应该尽量选用有源的转换器,以提高驱动能力和稳定性。此外,工业现场的降噪、隔离、布线、屏蔽等等措施的合理与否也会对最后系统的稳定产生影响。
发布于:2024-12-19,除非注明,否则均为
原创文章,转载请注明出处。
还没有评论,来说两句吧...