关于Modbus字符排序说明

计算机字符传输过程的中的排序与堆栈处理原理有关,可以搜索相关计算机原理学习。

我们只要了解其特点即可:

  1. 计算机数据的最小单位是bit,也就是二进制的一位。
  2. 8个bit组成一个字节,也就是十六进制的一个数。
  3. 两个字节组成一个字。也就是16bit。
  4. 因此32位数据就是两个字,64位数据就是四个字…
  5. 堆栈处理,无非两种顺序:一正一反。但堆栈处理是可以同时存在的,我们就不深层讨论了。
  6. 在Modbus通信中,目前我们主要有16bit(AB)、32bit(AB CD)和最新的64bit(AB CD EF GH)三种数据长度。每个字母代表一个字节
  7. 针对16bit传输,只存在正序(AB)或反序(BA)两种方式,这里不多说明。关于更高位传输做以下说明。
  8. 先讲高位优先(MSRF正序)和低位优先(LSRF反序):它是以字节为单元处理的,比如一个双字(AB CD),那么正序传输对方收到AB CD,反序传输对方收到DC BA。
  9. 再讲一下字节互换(Swap)概念:它是以字为单元处理的,也就是一个双字(AB CD),正序字节互换传输,对方收到的是 BA DC。反序字节互换传输,对方收到CD AB。
  10. 那么64bit(AB CD EF GH)就存在四种传输顺序结构:
    一、正序传输 对方收到 AB CD EF GH
    二、反序传输 对方收到 HG FE DC BA
    三、正序字节互换传
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,我们可以得知modbus本身并不直接支持字符串类型数据,因此需要将字符串进行转换后进行存储,读的时候也是一样,通过读入一段连续的寄存器地址数据,再转成字符串。具体实现方法可以参考以下步骤: 1.将字符串转换为字节数组,例如: ```python str_data = "hello world" byte_data = bytes(str_data, encoding='utf-8') ``` 2.将字节数组拆分成多个寄存器,每个寄存器存储两个字节,例如: ```python register_data = [] for i in range(0, len(byte_data), 2): register_data.append((byte_data[i] << 8) + byte_data[i+1]) ``` 3.将多个寄存器的数据写入modbus设备,例如: ```python import modbus_tk.defines as cst from modbus_tk import modbus_rtu # 建立modbus连接 master = modbus_rtu.RtuMaster(serial.Serial(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1)) master.set_timeout(5.0) master.set_verbose(True) # 写入多个寄存器的数据 start_address = 0x0000 slave_id = 1 master.execute(slave_id, cst.WRITE_MULTIPLE_REGISTERS, start_address=start_address, output_value=register_data) ``` 4.从modbus设备读取多个寄存器的数据,例如: ```python # 读取多个寄存器的数据 start_address = 0x0000 slave_id = 1 quantity_of_x = len(register_data) response = master.execute(slave_id, cst.READ_HOLDING_REGISTERS, start_address=start_address, quantity_of_x=quantity_of_x) # 将多个寄存器的数据转换为字节数组 byte_data = bytearray() for i in range(0, len(response)): byte_data.append(response[i] >> 8) byte_data.append(response[i] & 0xFF) # 将字节数组转换为字符串 str_data = byte_data.decode('utf-8') ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值