我在窗口中运行了下面的 .py 脚本,得到了结果,然后将它们作为 pscp 传递到 Raspberry Pi 来测试执行情况。
import minimalmodbus as minimalmodbus
import serial,time
import serial.tools.list_ports as sp
for i in range(len(sp.comports())):
desc = sp.comports()[i].description
if desc.find('USB2.0') != -1:
port = sp.comports()[i].device
break
if __name__ == '__main__':
# /dev/ttyUSB0
instrument = minimalmodbus.Instrument(port, 2)
instrument.serial.baudrate = 19200 # Baud
instrument.serial.bytesize = 8
instrument.serial.parity = serial.PARITY_NONE
instrument.serial.stopbits = 1
instrument.address = 2
instrument.mode = minimalmodbus.MODE_RTU
instrument.serial.timeout = 1 # seconds
instrument.clear_buffers_before_each_transaction = True
# instrument.debug = True
instrument.precalculate_read_size = True
while True:
# try:
temp1 = instrument.read_register(30033,functioncode=4)
# temp2 = instrument.read_register(1,functioncode= int('0x04',16))
print(temp1)
# print(temp2)
# time.sleep(10)
# temp1 = instrument.read_register(0,functioncode= int('0x04',16))
# except IOError as e:
# print("Failed to read from instrument",e)
重复连续执行的两种情况:
administrator@pi:~ $ python3 modbus_test.py
0
0
0
0
0
0
0
0
0
Traceback (most recent call last):
File "/home/administrator/modbus_test.py", line 28, in <module>
temp1 = instrument.read_register(30033,functioncode=4)
File "/usr/local/lib/python3.9/dist-packages/minimalmodbus.py", line 484, in read_register
returnvalue = self._generic_command(
File "/usr/local/lib/python3.9/dist-packages/minimalmodbus.py", line 1276, in _generic_command
payload_from_slave = self._perform_command(functioncode, payload_to_slave)
File "/usr/local/lib/python3.9/dist-packages/minimalmodbus.py", line 1353, in _perform_command
response_bytes = self._communicate(request_bytes, number_of_bytes_to_read)
File "/usr/local/lib/python3.9/dist-packages/minimalmodbus.py", line 1521, in _communicate
raise NoResponseError("No communication with the instrument (no answer)")
minimalmodbus.NoResponseError: No communication with the instrument (no answer)
administrator@pi:~ $ python3 modbus_test.py
0
0
0
Traceback (most recent call last):
File "/home/administrator/modbus_test.py", line 28, in <module>
temp1 = instrument.read_register(30033,functioncode=4)
File "/usr/local/lib/python3.9/dist-packages/minimalmodbus.py", line 484, in read_register
returnvalue = self._generic_command(
File "/usr/local/lib/python3.9/dist-packages/minimalmodbus.py", line 1276, in _generic_command
payload_from_slave = self._perform_command(functioncode, payload_to_slave)
File "/usr/local/lib/python3.9/dist-packages/minimalmodbus.py", line 1359, in _perform_command
payload_from_slave = _extract_payload(
File "/usr/local/lib/python3.9/dist-packages/minimalmodbus.py", line 1904, in _extract_payload
raise InvalidResponseError(text)
minimalmodbus.InvalidResponseError: Checksum error in rtu mode: b'\xfd\xe4' instead of b'\xfd0' . The response is: b'\x02\x04\x02\x00\x00\xfd\xe4' (plain response: b'\x02\x04\x02\x00\x00\xfd\xe4')
我不知道为什么以前在 Windows 上运行良好的脚本会变成这样。
我怀疑ch340驱动有问题。
我尝试: $lsusb
Bus 001 Device 009: ID 1a86:7523 QinHeng Electronics CH340 serial converter
$lsmod
ch341 16384 0
$dmesg
[11614.383123] usb 1-1.1.2: Product: USB2.0-Ser!
[11614.386616] ch341 1-1.1.2:1.0: ch341-uart converter detected
[11614.390040] ch341-uart ttyUSB0: break control not supported, using simulated break
[11614.390435] usb 1-1.1.2: ch341-uart converter now attached to ttyUSB0
我还不知道驱动是否安装了。 不过我一开始就确认了这个值是通过modbus输出的。
奇怪的是在windows下 起初,ch340 USB 无法识别。 安装ch340驱动后,USB的描述变为ch340。 它已经改变了。 但Linux使用的是USB2.0-Ser!描述已修复。
因此,ch340驱动是否连接仍然存在疑问。
我想知道。 ch340驱动现在运行正常吗? 如果正在运行,那么运行良好的脚本是否存在问题? 如果不起作用怎么办
我找到了答案。 这是电缆问题,不是编码问题,用Sysbase提供的电缆重新连接(测试)时,确认通讯正常。