关于VB与其它设备或PLC通过串行口通信的问题
有许多朋友来信询问采用VB与其它设备或PLC通过串行口通信的问题,特别是如何自定义通信协议。本文简介如下。
1、RS232只是一个电气接口标准,若进行数据通讯,除具有统一硬件标准(如RS232)外,还必须有统一软件标准,或简称通信协议。
2、RS232的通讯距离为15m,当距离超过时,须采用协议转换模块转化成RS485或422标准,距离可延长到1200m。串行通信有全双工和半双工两种形式,半双工即在任一时刻网络只有单向的数据流。当网络上节点数超过两个时,必须使用半双工方式。
3、VB语言通过控件MSCOMM对串口进行读写。该控件的使用方法及例子见VB帮助。
4、如果仪器是外购产品,必须向厂家索取其通信协议,若该协议为公开标准,你可到有关资料上查询。如果你的仪器是自制产品,则你必须在软件中约定通讯协议,见附例。
5、一般仪器的串行通信采用半双工方式,以便多个设备联在一个网上。你可将这些设备作为从站(各站具有唯一的地址),将你的VB程序作为主站,组成主从式网络。
6、各节点必须对串行口的参数进行约定,如波特率、校验方式等。
例:
某设备对外提供RS232和RS485两个完全光隔的通信接口,可以方便地将变频器连如RS485网络。设备与上位机之间的通信采用的命令和数据都是字符串,它具有特定的通信协议,该协议包括两大类命令,即读数据命令和写数据命令,这两类命令的格式介绍如下。
写命令
当上位机(PLC)想设定网络上某一台变频器的某一个参数时,上位机就发送下列格式的命令(图1):
EOT--复位码,STX--命令开始码,ETX--命令结束码,GA--组号,UA--单元号,M1、M2--参数号,P1、P2--参数在组内的序号,D1…DN--参数的值(D1为符号位),BCC--块校验和。
为防止发生意外,写命令的格式要求很严格,设备地址、参数、数据缺一不可。如果该命令能被设备识别,则返回ACK(成功),否则NAK(不成功)。
例1 要将第1组的第2个设备的参数"1.15"写为"1",则传送的信息如图2。
读命令
当上位机(PLC)想读取网络上某一台设备的某一个参数时,上位机就发送下列格式的命令(图3)。
如果该命令能被设备识别,则将返回如下结构的信息(图4)。
上述格式中的符号ENQ为查询码,其余符号含义与写命令相同。
例2 要读取第1组第2个设备"4.02"参数,则传送的信息如下(图5)。
返回信息为(图6)
这里值得一提的是BCC校验和,为保证由设备出入的信息在传输的过程中的准确无误,数据响应以块校验和数BCC字符结尾。BCC实际上是该命令中从STX控制码之后开始的所有字符的ASCII码的异或弛,若运算结果小于32,则加上20H,最终以ASCII码对应的字符加到读写指令中,上位机可以用该值来校验前面收到的数据的准确性。