我正在使用此代码与功率计通信:
def Hello() :
answer = SendMessage("\x10\x49\x01\x00\x4A\x16","100b01000c16")
if answer == 1:
answer = SendMessage("\x10\x40\x01\x00\x41\x16","100001000116")
if answer == 1:
answer = SendMessage("\x10\x49\x01\x00\x4A\x16","100b01000c16")
if answer == 1:
answer = SendMessage("\x68\x0D\x0D\x68\x73\x01\x00\xB7\x01\x06\x01\x00\x00\x01\x00\x00\x00\x34\x16","100001000116")
if answer == 1:
input3 = input ("progress")
def SendMessage(message, expected):
out = ''
while out == '':
# send the character to the device
print (message)
ser.write(message.encode())
#Let's wait one second before reading output (let's give device time to answer)
time.sleep(0.02)
while ser.inWaiting() > 0:
out += ser.readline().hex()
if out != '':
print (">>>>" + out)
if out == expected:
print("Correct response")
out = ''
answer = 1
return answer
else:
print("Incorrect response")
answer = 0
return answer
OpenComm = Hello()
代码远非理想。现在这只是概念证明。
根据发送时来自同一功率计的日志,>
68 0D 0D 68 73 01 00 B7 01 06 01 00 00 01 00 00 00 34 16
应该回复
10 00 01 00 01 16
但是现在,当我发送该特定消息时,它什么也不做(尽管它确实响应了先前的消息)。十六进制可能太长吗?如果是这样,关于如何解决该问题的任何想法?
这是我配置串行端口的方式:
ser = serial.Serial(
port = "COM3",
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.EIGHTBITS,
timeout=1
)
我正在使用此代码与电表进行通信:def Hello():答案= SendMessage(“ \ x10 \ x49 \ x01 \ x00 \ x4A \ x16”,“ 100b01000c16”,如果答案== 1:答案= SendMessage(“ \ x10 \ x40 \ ...
您的代码中有一个微小但重要的问题。