串口通讯接收温度问题
各位高人你们好!我单位购买了一台双回路温控器(可测量两路温度值),过去有一台单路(只能测一个温度值)。我打算将两路温度分别显示出来,如显示到TEXT1和TEXT2两个文本中。但弄了几天怎们也不行呀,烦!!!所以只能求教大家,先谢谢!北京杨
单路测温的读值问题如下:
Private Sub Timer1_Timer() ' USING 仪表地址(Addr)设为 1
''''''''''''' pv ''''''''''
MSComm1.Output = Chr(4)+Chr(48)+Chr(49)+Chr(82)+Chr(48)+Chr(48)+Chr(5) '向仪表发送数据
Call delay(2000000) '注意延时
BUFpv = 0
BUFpv = MSComm1.Input
pos1 = InStr(1, BUFpv, "+")
text1.Text = Val(Mid(BUFpv, pos1 + 1, 9 - pos1))
Call delay(2000000)
End Sub
如果是双路的如何修改那???有如下是通讯部分说明书内容:
五、 通讯说明
本仪表可另配RS232、RS485接口,直接与计算机通讯,RS485标准通讯距离1.5km,可以挂接多个仪表。RS232标准通讯距离15m,只能挂接一个仪表。RS232接口的TXD、RXD、GND分别接计算机串口的第2、3、5管脚。数据格式为1个起始位﹑8个数据位﹑无校验﹑1个停止位。Modbus通讯协议几乎能和所有的组态软件连接,本公司自行开发的协议更适合用户自己编写计算机软件连接仪表。
(1) Modbus通讯协议
仪表采用标准Modbus通讯协议,在使用组态软件时,须选用的设备为modicon(莫迪康)的PLC,Modbus-RTU地址型,数据为整型16位。
使用组态王寄存器从4001开始,别的组态软件有可能是从3001开始。
4x0001 第1路测量值
4x0002 第2路测量值
例:读地址为1的仪表的第1路测量值 (PV1=1000值
发送数据为 01 03 00 00 00 01 84 0A
(其中01 是仪表地址,03是功能号,00 00是寄存器起始地址,00 01 表示读一个数,84 0A是CRC校验码。如果要读第1、2路测量值两个数据,则可以发送,01 03 00 00 00 02 C4 0B。返回数据为 01 03 02 03 E8 B8 FA (其中03 E8—1000)。
(2)本公司自行开发的协议
所有数字变成ASCⅡ码传输:
从仪表读数据
例:发送 [04,30h,31h,52h,30h,30h,05h]
EOT 仪表编号(十位) 仪表编号(个位) R 参数 ENQ
仪表返回
[02h,30h,31h,30h,32h,2bh,31h,32h,33h,2eh,34h,2bh,34h,33h,32h,2eh,31h,03h]
STX 仪表编号(十位) 仪表编号(个位) 测量路数高位 测量路数低位 第一路数据符号位 数据第四位 数据第三位 数据第二位 第一路小数点 数据最低位 第二路数据符号位 ••••••数据最低位 ETX
说明:
(1) 仪表编号由仪表中“Addr”参数决定,它为2位数字的ASCⅡ码。
(2) 在命令及返回参数中的EOT,STX等均为一个ASCⅡ码,它们的码值为:STX=02H;ETX=03H;ENQ=05H;EOT=04H,R表示读ASCⅡ码值=82
(3) 由于测量信号为2路,测量路数高位为30h,低位为32h。小数点位置根据各路设置不同而变化。
例如:第一路测量值=123.4,则数据千位为31H、百位为32H、十位为33H、个位为34H、符号位2BH为正、符号2DH为负。
(4) 用户在使用时,为了有效的防止误码最好判断起始结束字符等。