首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >minimalmodbus :通过串行发送错误消息

minimalmodbus :通过串行发送错误消息
EN

Stack Overflow用户
提问于 2022-04-22 15:04:07
回答 1查看 122关注 0票数 1

因此,我想发送以下代码:01 00 14 00 58 over ModBus RTU,利用minimalmodbus到我的虚拟COM端口(COM2)。

因此,我确实得到了“代码”,但在代码之前和之后,我也得到了其他字节,我似乎知道它们来自何处,以及如何解决它。

终端输出图像

我确实试过使用另一个名为pymodbus的libary,但是我得到了相同的结果。

PythonCode :

代码语言:javascript
复制
import serial
import minimalmodbus as mrtu
mrtu.BYTEORDER_BIG = 1
insmrt = mrtu.Instrument('COM2',1 ,mrtu.MODE_RTU,close_port_after_each_call= False,debug=True)
insmrt.precalculate_read_size= False
insmrt.clear_buffers_before_each_transaction= True
insmrt.serial.baudrate = 38400
insmrt.serial.bytesize = 8
insmrt.serial.parity = serial.PARITY_NONE
insmrt.serial.stopbits  =1
insmrt.serial.timeout = 5
insmrt.handle_local_echo = None
def inscommmand():

    #insmrt.write_string = "$0100140058"
    insmrt.write_registers(0,[0x01,0x14,0x58])
while 1:
    try:
         inscommmand()
    except:
        continue
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-22 17:39:25

我不知道您想要做什么,也不知道通过Modbus发送这段代码意味着什么,但我担心库(minimalModbus)所做的正是它应该做的。

如果你打电话:

代码语言:javascript
复制
insmrt.write_registers(0,[0x01,0x14,0x58])

该库将构建以下Modbus框架:

代码语言:javascript
复制
01 10 0000 0003 06 0001 0014 0058 9ABE

这就是这个框架中的每个值的含义:

01:从地址(默认为地址1)

10:函数代码16 (编写多个持有登记册,16 = 10十六进制)

0000:第一个寄存器的地址(0000十六进制= 0,+40001偏移量=寄存器#40001)。

0003:要写入的寄存器数量,因为您提供了一个3元素列表。

06:后面的数据字节数(3个寄存器x2个字节=6个字节)。

0001:要写入注册40001的值

0014:要写入注册40002的值

0058:要写入注册40003的值

9ABE:用于错误检查的循环冗余检查( 启联 )。

序列01 00 14 00 58不是有效的Modbus帧,因为没有函数代码00(只允许1到6、15和16之间的值)。

也许你想要的只是通过串口发送那个序列?否则,您应该考虑这些值从何而来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71970874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档