VB用Modbus RTU协议和仪表通讯的问题 PC 如何跟仪表通讯呢? 通过RS485 通讯协议modbu...

VB\u7528Modbus RTU\u534f\u8bae\u548c\u4eea\u8868\u901a\u8baf\u7684\u95ee\u9898

\u4f60\u53d1 02 03 14 50 00 01 81D8
\u4f60\u8981\u8bfb\u7684\u6570\u636e\u662f\u5c0f\u6570 \u600e\u4e48\u53ea\u8bfb1\u4f4d \u8981\u4e482\u4f4d(float)\u8981\u4e484\u4f4d(double)
\u6211\u8ba4\u4e3a\u4f60\u53ef\u80fd\u662f\u6570\u636e\u7c7b\u578b\u4e0d\u5bf9 ,\u8bfb\u7684\u6570\u636e\u7c7b\u578b\u8981\u548c\u6570\u636e\u5b58\u5165\u7684\u6570\u636e\u7c7b\u578b\u4e00\u81f4
\u4f60\u7167\u4e0b\u9762\u8bd5\u8bd5
\u8bfb\u547d\u4ee4\u4f60\u53d1 02 03 14 50 00 02 xx xx
\u5199\u51654000 \u4f60\u53d1 02 10 14 50 00 02 04 00 00 45 7A xx xx \u5199\u5165\u5c0f\u6570\u600e\u4e48\u80fd\u752806? 06 \u53ea\u80fd\u5199\u6574\u6570

\u9700\u5c06485\u4fe1\u53f7\u8f6c\u6362\u4e3a232\u4fe1\u53f7\u5230PC\u673a\u4e32\u53e3\u4e0a\u3002\uff08\u5373232\u63a5\u53e3) \u3002\u7136\u540e\u5728\u4eea\u8868\u4e0a\u8bbe\u7f6e\u597d\u76f8\u5173\u901a\u8baf\u53c2\u6570\u3002\uff08\u5982\u5730\u5740\uff0c\u6ce2\u7279\u7387\u7b49\uff09\u5728\u6839\u636emodbus\u534f\u8bae\u7684\u5185\u5bb9\u5199\u53d1\u9001\u547d\u4ee4\u3002\u6807\u51c6\u7684modbus \u534f\u8bae\u6709\u56fa\u5b9a\u683c\u5f0f\u5176\u5177\u4f53\u5bc4\u5b58\u5668\u5185\u5bb9\uff0c\u9700\u6839\u636e\u8be5\u4eea\u8868\u534f\u8bae\u6765\u5b9a\u4e49\u3002

这两个问题应该是同一个原因,Integer类型不够大。
在VB6里,Integer是有符号的,其取值范围是 -32767 到 32676。
试试看用 Long 取代 Integer 吧,应该能行。

再说说ModBus,读取指令 02 03 14 50 00 01 指定了读取一个单位(16位)的数据。
如果数据超过了65536,一个16位就显示不过来了,试试读取两个字的数据吧。
当然,也有部分设备使用某个特定数组来表示溢出,查查说明书应该会有收获。

发送问题也是类似的,如果该地址数据是有符号的,那么上限就是32767。
试试写两个字(32位)的数据。

dim a() as byte 改成这样再试试

扩展阅读:modbus rtu slave ... modbus rtu奇偶校验 ... modbus rtu over tcp ... modbus rtu轮询方式 ... modbus java ... modbus rtu转以太网 ... modbus poll key ... modbus rtu接线方式 ... 货源充足的modbus rtu ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网