VB6.0 PC与智能仪表COM通讯modbus协议485 50
波特率:2400校验位:无数据位:8停止位:1通讯方式:异步串口寻址间隔时间:大于5秒发送格式:(表号)+(读命令03)+(起始地址)+(数据长度)+(校验码)CRC响应...
波特率:2400
校验位:无
数据位:8
停止位:1
通讯方式:异步串口
寻址间隔时间:大于5秒
发送格式:(表号)+(读命令03)+(起始地址)+(数据长度)+(校验码)CRC
响应格式:表号+03+(数据长度X2)+(数据X1~X28)+ CRC码
32位浮点数格式:IEEE 754-1
说明:两种数据提取方式
第一种:提取单个数据
表号: 01
读命令: 03H
起始地址: 0000H (0000H~0003H内容为单位和介质,详看说明1)
或 0004H (0004H~0007H内容为频率值,单位Hz)
或 0008H (0008H~000BH内容为温度值,单位℃)
或 000CH (000CH~000FH内容为压力值,单位KPa)
或 0010H (0010H~0013H内容为密度值,单位Kg/ m3 )
或 0014H (0014H~0017H内容为流量值,单位根据0000H中的内容)
或 0018H (0018H~001BH内容为累计值,单位根据0000H中的内容)
数据长度: 0002H
CRC校验码: CRC低字节 CRC高字节
响应:表号+03+04+(4字节浮点数)+CRC码
例如:提取累积流量,发送:表号+03+0018(注意)+02+CRC码,响应:表号+03+04+(累积流量)+CRC码
第二种:提取全部数据:
例如:发送:表号+03+0000(注意)+000E+CRC码,响应:表号+03+1C+(数据X1~X28)+ CRC码
其中:x1~x4单位和介质,x5~x8频率值,x9~x12温度值,x13~x16压力值,x17~x20密度值,x21~x24流量值,x25~x28累计值。
说明1:介质和单位(数据格式:00H 00H XXH YYH)
单位 介质
XXH 瞬时流量 累积流量 YYH
00H m3/h m3 00H 液体
01H Nm3/h Nm3 01H 气体
02H Kg/h Kg 02H 饱和蒸汽
03H t/h t 03H 过热蒸汽
04H Km3/h Km3
05H NKm3/h NKm3
例如:提取的地址0000H内容为00 00 02 03(十进制为515),XX=02H,表示瞬时流量单位是Kg/h;YY=03H,表示该介质是过热蒸汽;累积流量单位是Kg。
在VB下我要查询累计流量,我的 MSComm1.Output=后面该怎么写?
我要输出指令01 03 00 08 00 02 45 C9 应该怎么写?
用MODSCAN32读数如上图,41037后面的数值:0.0366该如何用VB获取 展开
校验位:无
数据位:8
停止位:1
通讯方式:异步串口
寻址间隔时间:大于5秒
发送格式:(表号)+(读命令03)+(起始地址)+(数据长度)+(校验码)CRC
响应格式:表号+03+(数据长度X2)+(数据X1~X28)+ CRC码
32位浮点数格式:IEEE 754-1
说明:两种数据提取方式
第一种:提取单个数据
表号: 01
读命令: 03H
起始地址: 0000H (0000H~0003H内容为单位和介质,详看说明1)
或 0004H (0004H~0007H内容为频率值,单位Hz)
或 0008H (0008H~000BH内容为温度值,单位℃)
或 000CH (000CH~000FH内容为压力值,单位KPa)
或 0010H (0010H~0013H内容为密度值,单位Kg/ m3 )
或 0014H (0014H~0017H内容为流量值,单位根据0000H中的内容)
或 0018H (0018H~001BH内容为累计值,单位根据0000H中的内容)
数据长度: 0002H
CRC校验码: CRC低字节 CRC高字节
响应:表号+03+04+(4字节浮点数)+CRC码
例如:提取累积流量,发送:表号+03+0018(注意)+02+CRC码,响应:表号+03+04+(累积流量)+CRC码
第二种:提取全部数据:
例如:发送:表号+03+0000(注意)+000E+CRC码,响应:表号+03+1C+(数据X1~X28)+ CRC码
其中:x1~x4单位和介质,x5~x8频率值,x9~x12温度值,x13~x16压力值,x17~x20密度值,x21~x24流量值,x25~x28累计值。
说明1:介质和单位(数据格式:00H 00H XXH YYH)
单位 介质
XXH 瞬时流量 累积流量 YYH
00H m3/h m3 00H 液体
01H Nm3/h Nm3 01H 气体
02H Kg/h Kg 02H 饱和蒸汽
03H t/h t 03H 过热蒸汽
04H Km3/h Km3
05H NKm3/h NKm3
例如:提取的地址0000H内容为00 00 02 03(十进制为515),XX=02H,表示瞬时流量单位是Kg/h;YY=03H,表示该介质是过热蒸汽;累积流量单位是Kg。
在VB下我要查询累计流量,我的 MSComm1.Output=后面该怎么写?
我要输出指令01 03 00 08 00 02 45 C9 应该怎么写?
用MODSCAN32读数如上图,41037后面的数值:0.0366该如何用VB获取 展开
1个回答
展开全部
你在VB中通过串口类中的方法向仪表发送MODBUS指令,然后解析返回数据即可。MODBUS读寄存器指令,你问题中的表号,一般叫做设备ID,设备ID是一个字节,从0到255,0一般不用,比如设备ID是1,读取4XXX寄存器的指令是 十六进制03,起始地址是1037(前面的4去掉),连续读取两个寄存器,也就是寄存器长度为2,每个寄存器两个字节,返回数据就应该是四个字节,最后是两个字节的CRC16校验码。指令是这样的
01(设备ID) 03(读寄存器) 10 37(起始地址) 00 02(寄存器个数) CL CH(CRC16校验码)
CRC16校验码我没法给你算,你需要在程序中实现指令的重组和CRC16校验码的生成,解析时,在返回数据的指定位置截取下连续的四个字节数据,转换为浮点数即可。VB中都有相应的类和方法,不便详述。
01(设备ID) 03(读寄存器) 10 37(起始地址) 00 02(寄存器个数) CL CH(CRC16校验码)
CRC16校验码我没法给你算,你需要在程序中实现指令的重组和CRC16校验码的生成,解析时,在返回数据的指定位置截取下连续的四个字节数据,转换为浮点数即可。VB中都有相应的类和方法,不便详述。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询