1、仪表通讯协议:通讯格式为 8 位数据,2 个停止位,无校验位。数据包采用 16 位求和校验,它的纠错能力比奇偶校验高数万倍,可确保通讯数据的正确可靠。XM 系列仪表在上位计算机、通讯接口或线路发生故障时,仍能保持仪表本身的正常工作。仪表读写方式如下:读指令: Addr80H Addr80H 52H 要读参数的代号 00 00 CRC 校验码写指令: Addr80H Addr80H 43H 要写参数的代号 写入数低字节 写入数高字节 CRC 校验码读指令的 CRC 校验码为:52HAddr 要读参数的代号, Addr 为仪表地址参数值范围是 0100。写指令的 CRC 校验码为:43H要写的参数
2、值Addr 要写的参数代号。每 2 个 8 位数据代表一个 16 位整型数,低位字节在前,高位字节在后,各温度值采用补码表示,热电偶或热电阻输入时其单位都是 0.1。1V 或 0V 等线性输入时,单位都是线性最小单位。因为传递的是 16 位二进制数,所以无法表示小数点,要求用户在上位机处理。例:如需接收测量值和 Loc 值,且仪表的通信地址为 1,则发送读指令如下:81 81 52 00 00 00 53 00其中 81 81 为仪表的地址代号,52 00 为读参数的指令,53 00 为 CRC 校验码。只要上位机发送的命令格式正确时,将返回以下数据:XX XX XX XX XX XX XX
3、XX XX XXA1 A2 A3 A4 A5每个变量由两个字节组成,十进制转换格式为低位在前、高位在后含义如下:第一行的 A1、A2、A3、A4、A5 为变量名称,第一列为仪表为各仪表的型号仪表型号变量名称 A1 A2 A3 A4 A5SAIL-P 温度测控仪SAIL-M 温度巡检仪 测量值 - -相应的通信地址的参数值 CRC 校验码上位机通过分析可得到仪表当前的工作状态。上位机每向仪表发一个指令,仪表返回一个数据。编写上位机软件时,注意每条有效指令,仪表在 00.2 秒内作出应答,而上位机也必须等仪表返回数据后,才能发新的指令,否则将引起错误。如果仪表超过最大响应时间仍没有应答,则原因可能
4、为无效指令、通讯线路故障,仪表没有开机,通讯地址不合等,此时上位机应重发指令。特殊定义指令:对于 SAIL-M 系列仪表,兼容以上协议外,增加新的命令字(0x61,0x70),作用如下:读指令: Addr80H Addr80H 61H 00 00 00 CRC 校验码返回(16 路):Addr80H Addr80H 巡检通道数 最高路 pv 高字节 最高路 pv 低字节 第一路pv 高字节 第一路 pv 低字节返回(32 路):最高路 pv 高字节 最高路 pv 低字节 第一路 pv 高字节 第一路 pv 低字节读指令: Addr80H Addr80H 70H 00 00 00 CRC 校验码
5、返回(16 路):Addr80H Addr80H 巡检通道数 下限报警字节 1 下限报警字节 2 上限报警字节 1 上限报警字节 2 开路报警字节 1 开路报警字节 2返回(32 路):下限报警字节 1 . 下限报警字节 4 上限报警字节 1 . 上限报警字节 4 开路报警字节 1 . 开路报警字节 4注 1:发送数据时的校验码要符合原有协议注 2:16 路巡检报警字节 1 最高位到最低位分别为第 16 路第 9 路,报警字节 2 最高位到最低位分别为第8 路第 1 路注 3:32 路巡检报警字节 1 最高位到最低位分别为第 32 路第 25 路,报警字节 2 最高位到最低位分别为第 24 路
6、第 17 路报警字节 3 最高位到最低位分别为第 16 路第 9 路,报警字节 4 最高位到最低位分别为第 8 路第 1路用户自编程方法:将 Addr 为 1 的仪表的给定值(参数代号 0)写为 100.0(整数为 1000),用 BASIC 语言(VB)的编程方法如下:1、初始化通讯口,包括与仪表相同的波特率,数据位 8,停止位 2,无校验,如果采用 RS485 通讯口,要注意某些型号的 RS485 通讯口(或 RS232/RS485 通讯转换器)对 RTS、DTR 等控制线有一定的要求,上位机软件必须对这些控制线进行编程。2、VB3 编程指令如下:COMM1.OUTPUT=CHR$(129
7、)+CHR$(129)+CHR$(67)+CHR$(0)+CHR$(232)+CHR$(3)+CHR$(44)+CHR$(4)如果下传 20 给设定值则为:COMM1.OUTPUT=CHR$(129)+CHR$(129)+CHR$(67)+CHR$(0)+CHR$(200)+CHR$(0)+CHR$(12)+CHR$(1)数据分解如下(vb5):Dim instringDim pv as integerDim sv as integerDim mv as integerDim cs as integerDim crc as integerinstring = MSComm1.Input 设已经
8、有数据返回Open “datafile.bin“ For Binary As #1Put #1, 1, instringGet #1, 13, pv 因 VB5 字符格式为 32 位,所以从第三 13 位数据 开始才是真实数据(可以用 debug.exe 来查看 datafile.bin 对照)Get #1, 15, svGet #1, 17, mvGet #1, 19, csGet #1, 21, crcForm1.Print pv, sv, mv, cs, crcClose #13、VC+6.0 参考代码如下:a. SendData: glsmeter-SendCode = code;gl
9、smeter-SendAddr = addr;RequestFrame0 = 0x80+addr;RequestFrame1 = RequestFrame0;if (read_write)RequestFrame2 = 0x52;RequestFrame3 = code;RequestFrame4 = 0;RequestFrame5 = 0;tempAdd = 0x52 + addr + writenum + (code8;tempAdd = 0x43 + addr + writenum + (code8);RequestFrame 为请求帧数组(8 字节) b.ReceiveData:for(j=0;j8)AfxMessageBox(“数据接收有误!“); ReceiveFrame 为接收帧数组(10 字节) (以上代码为 VC+程序,仪表报文以前低后高形式两两组合为一个字)注意事项:从通讯口向仪表写数据时,每个存储单元(包括给定值)的写入次数是有限的,XM 仪表提供至少 10 万次的写入次数。如果写入次数超出要求,仪表存储单元可能损坏。