Modbus RTU主机-带Modbus的python脚本
我想用MODBUS RTU中的python脚本控制执行器 大师。我试着用图书馆来交流(写作) 位,写和读寄存器)与我的奴隶 当我启动我的代码时,我有一些错误。有人能帮我找到解决办法吗 我的代码:Modbus RTU主机-带Modbus的python脚本,python,modbus,minimalmodbus,Python,Modbus,Minimalmodbus,我想用MODBUS RTU中的python脚本控制执行器 大师。我试着用图书馆来交流(写作) 位,写和读寄存器)与我的奴隶 当我启动我的代码时,我有一些错误。有人能帮我找到解决办法吗 我的代码: import minimalmodbus import os import struct import sys import serial import time instrument = minimalmodbus.Instrument('/
import minimalmodbus
import os
import struct
import sys
import serial
import time
instrument = minimalmodbus.Instrument('/dev/ttyRS485', 1)
instrument.serial.port
instrument.serial.baudrate = 9600
instrument.serial.parity = serial.PARITY_NONE
instrument.serial.bytesize = 8
instrument.serial.stopbits = 1
instrument.mode = minimalmodbus.MODE_RTU
instrument.serial.timeout = 0.05
modbus = instrument.write_bit(0x0427, 1)
print (modbus)
alarme = instrument.write_bit(0x0404, 1)
print (alarme)
alarme = instrument.write_bit(0x0404, 0)
print (alarme)
on = instrument.write_bit(0x0403, 1)
print (on)
home = instrument.write_bit(0x040B, 1)
print (home)
position = instrument.write_register(0x9900, 0, number_of_decimals=2,functioncode=16, signed=False)
print (position)
posi = instrument.write_register(0x9901, 6000, number_of_decimals=2,functioncode=16, signed=False)
print (posi)
错误:
========================= RESTART: /home/pi/test.py =========================
None
None
None
None
None
None
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.5/site-packages/minimalmodbus.py", line 2448, in _pack
result = struct.pack(formatstring, value)
struct.error: 'H' format requires 0 <= number <= 65535
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/test.py", line 36, in <module>
posi = instrument.write_register(0x9901, 6000, number_of_decimals=2, functioncode=16, signed=False)
File "/home/pi/.local/lib/python3.5/site-packages/minimalmodbus.py",line 518, in write_register
payloadformat=_PAYLOADFORMAT_REGISTER,
File "/home/pi/.local/lib/python3.5/site-packages/minimalmodbus.py",line 1166, in _generic_command
payloadformat,
File "/home/pi/.local/lib/python3.5/site-packages/minimalmodbus.py",line 1514, in _create_payload
value, number_of_decimals, signed=signed
File "/home/pi/.local/lib/python3.5/site-packages/minimalmodbus.py", line 1991, in
_num_to_twobyte_string outstring = _pack(formatcode, integer)
File "/home/pi/.local/lib/python3.5/site-packages/minimalmodbus.py", line 2454, in _pack
raise ValueError(errortext.format(value, formatstring))
ValueError: The value to send is probably out of range, as the num-to-bytestring conversion failed.
Value: 600000 Struct format code is: >H
===============================重新启动:/home/pi/test.py=========================
没有一个
没有一个
没有一个
没有一个
没有一个
没有一个
回溯(最近一次呼叫最后一次):
文件“/home/pi/.local/lib/python3.5/site packages/minimamodbus.py”,第2448行,在\u pack中
结果=结构包(格式字符串,值)
struct.error:“H”格式需要0以响应您在注释中对替代库的请求,以下是我使用pymodbus库读取modbus的内容:
import pymodbus
from pymodbus.pdu import ModbusRequest
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.transaction import ModbusRtuFramer
port = '/dev/tty.usbserial-AQ00BYCR'
baudrate = 38400
client = ModbusClient(
method = 'rtu'
,port='/dev/tty.usbserial-AQ00BYCR'
,baudrate=baudrate
,parity = 'O'
,timeout=1
)
connection = client.connect()
registers = client.read_holding_registers(0,100,unit=1)# start_address, count, slave_id
print (registers.registers)
注意,在上述情况下,对于从机id 1,读取从地址0开始,继续到地址100
要写入寄存器,请执行以下操作:
write = client.write_register(1,425,unit=1)# address = 1, value to set = 425, slave ID = 1
你能提到你的错误吗?错误位于代码的末尾对不起,没有看到没有担心,谢谢你的更改你有什么想法吗?非常感谢!星期一我会试试的!你有写寄存器和两个值的多个寄存器的例子吗?我更新了上面的答案,包括一个写例子。我不知道你所说的“两个值的多个寄存器”是什么意思。如果你详细说明的话,我可能会帮上忙。如果这解决了您的问题,请将其标记为“正确”。谢谢对的非常感谢。