如果字符串太长,将无法从功率计获得响应

问题描述 投票:3回答:1

我正在使用此代码与功率计通信:

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 \ ...

python python-3.x pyserial
1个回答
3
投票

您的代码中有一个微小但重要的问题。

© www.soinside.com 2019 - 2024. All rights reserved.