传感器采用Modbus协议,通过R485接口。我想发送请求x00并读取其返回值。x00代表读取温度。
传感器期望的十六进制格式为:x00。
import serial # import the module
ComPort = serial.Serial('COM4') # open COM4
ComPort.baudrate = 9600 # set Baud rate to 9600
ComPort.bytesize = 8 # Number of data bits = 8
ComPort.parity = 'N' # No parity
ComPort.stopbits = 1 # Number of Stop bits = 1
ComPort.write.encode(hex(00))
ComPort.read()
print(ComPort.read())
ComPort.close() # Close the Com port
这是我的错误:
line 13, in <module>
ComPort.write.encode(hex(00))
AttributeError: 'function' object has no attribute 'encode'
.read()
接受一个整数作为参数。https://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial.Serial.read - tehCheatwrite
调用的右括号。这就是语法错误。对其余部分不做评论。 - GeneComPort.write(b'\x00)
,参见这里。其次,你需要使用ComPort = serial.Serial('COM4', timeout=5)
来增加默认超时时间或在写入和读取之间引入短暂的延迟time.sleep()
,以便设备有一些时间来处理和发送其响应。我再说一遍:如果你的设备期望Modbus,那么发送单个字节是行不通的。 - Marcos G.