首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将MinimalModbus调试响应存储在变量中?

如何将MinimalModbus调试响应存储在变量中?
EN

Stack Overflow用户
提问于 2022-08-31 19:56:30
回答 1查看 36关注 0票数 1
代码语言:javascript
复制
import serial
import minimalmodbus
import time

instrument = minimalmodbus.Instrument('COM8', 127, debug=True)
instrument.serial.port
instrument.serial.baudrate = 19200
instrument.serial.parity = serial.PARITY_NONE
instrument.serial.bytesize = 8
instrument.serial.stopbits = 1
instrument.mode = minimalmodbus.MODE_RTU
instrument.serial.timeout = 0.300

b = instrument._communicate(b'\x7F\x66\x01\x00\x02\x00\x00\x00\x01\x00', 64)

print(b)

instrument.serial.close()

在终点站,我得到以下信息:

代码语言:javascript
复制
MinimalModbus debug mode. Create serial port COM8
MinimalModbus debug mode. Will write to instrument (expecting 64 bytes back): 7F 66 01 00 02 00 00 00 01 00 (10 bytes)
MinimalModbus debug mode. Clearing serial buffers for port COM8
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1222683890.00 ms, minimum silent period: 2.01 ms.
MinimalModbus debug mode. Response from instrument: 7F 66 01 00 4C 00 00 00 44 54 01 00 20 00 44 54 CB 74 14 43 AD B2 15 43 00 00 FA 44 00 94 9E 41 88 6D 08 00 88 6D 08 00 00 00 00 00 1A AB C3 40 45 A5 70 42 54 60 99 45 CF C4 03 00 00 00 00 00 (64 bytes), roundtrip time: 0.0 ms. Timeout for 
reading: 300.0 ms.

b'\x7ff\x01\x00L\x00\x00\x00DT\x01\x00 \x00DT\xcbt\x14C\xad\xb2\x15C\x00\x00\xfaD\x00\x94\x9eA\x88m\x08\x00\x88m\x08\x00\x00\x00\x00\x00\x1a\xab\xc3@E\xa5pBT`\x99E\xcf\xc4\x03\x00\x00\x00\x00\x00'

当打印b时,数据与来自仪器数据的响应不相同。我猜它被一些噪音扭曲了。只有原始数据存储在b中,如何获得实际数据,就像存储在变量b中的仪器的响应一样?

EN

回答 1

Stack Overflow用户

发布于 2022-08-31 23:16:25

我猜它被一些噪音扭曲了。

不-这只是输出它的方式;如果您不为它提供格式,print输出“正式字符串表示”(请参阅str())。即7f是不可打印的输出\7f66 = f所以输出f01是不可打印的输出\01等等。

这可以通过以下几个方面来证明:

代码语言:javascript
复制
sampleBytes = bytes(bytearray.fromhex('7F 66 01 00 4C 00 00 00 44 54 01 00 20 00 44 54 CB 74 14 43 AD B2 15 43 00 00 FA 44 00 94 9E 41 88 6D 08 00 88 6D 08 00 00 00 00 00 1A AB C3 40 45 A5 70 42 54 60 99 45 CF C4 03 00 00 00 00 00'))
print(sampleBytes)
print(" ".join([f"{x:02X}" for x in sampleBytes]) + " ({} bytes)".format(
        len(sampleBytes)
    ))

这将产生:

代码语言:javascript
复制
b'\x7ff\x01\x00L\x00\x00\x00DT\x01\x00 \x00DT\xcbt\x14C\xad\xb2\x15C\x00\x00\xfaD\x00\x94\x9eA\x88m\x08\x00\x88m\x08\x00\x00\x00\x00\x00\x1a\xab\xc3@E\xa5pBT`\x99E\xcf\xc4\x03\x00\x00\x00\x00\x00'
7F 66 01 00 4C 00 00 00 44 54 01 00 20 00 44 54 CB 74 14 43 AD B2 15 43 00 00 FA 44 00 94 9E 41 88 6D 08 00 88 6D 08 00 00 00 00 00 1A AB C3 40 45 A5 70 42 54 60 99 45 CF C4 03 00 00 00 00 00 (64 bytes)

所以你看到的是预期的结果,你已经有了你需要的数据。请注意,上面的第二个print使用MinimalModbus用于输出“来自仪器的响应”的代码;请参见这里这里

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

https://stackoverflow.com/questions/73561246

复制
相关文章

相似问题

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