我试图理解为什么实例化的模块变量在导入后被修改一次后不会重置。我一直在使用minimalmodbus
,如果默认设置与连接设备不匹配,我会尝试重置波特率。设置我自己的默认值,我无法重新初始化minimalmodbus
来改变波特率。例如:
import minimalmodbus
minimalmodbus.BAUDRATE=9600
comm=minimalmodbus.Instrument('COM4',1) #baud rate set to 9600 here for comm
minimalmodbus.BAUDRATE=19200
comm=minimalmodbus.Instrument('COM4',1) #attempting to change baud rate
print comm #displays all information, and showing that baudrate=9600, not 19200
我使用其他几个模块时遇到过这个问题,我真的很想知道为什么会这样。
答案 0 :(得分:1)
第一次使用给定的串口minimalmodbus
creates a serial.Serial
instance using the current value of BAUDRATE
and saves it:
def __init__(self, port, slaveaddress, mode=MODE_RTU):
if port not in _SERIALPORTS or not _SERIALPORTS[port]:
self.serial = _SERIALPORTS[port] = serial.Serial(port=port, baudrate=BAUDRATE, parity=PARITY, bytesize=BYTESIZE, stopbits=STOPBITS, timeout=TIMEOUT)
else:
self.serial = _SERIALPORTS[port]
if self.serial.port is None:
self.serial.open()
...
即使BAUDRATE
稍后更改,将来尝试使用该串行端口也会使用旧的serial.SERIAL
实例和旧的波特率。
我不知道Modbus协议是什么样的,或者你应该如何使用这个模块,所以我不能告诉你你应该如何做你想要做的事情或者它是否是一个好主意。无论如何,现在你知道发生了什么。