无法在python中为xbee发送十六进制格式的命令

无法在python中为xbee发送十六进制格式的命令,python,xbee,zigbee,Python,Xbee,Zigbee,我正试图通过python为zigbee模块发送modbus十六进制命令(33 04 75 30 00 24 5b c0)。但是,取而代之的是以十六进制发送命令,而不是以ascii发送命令。谁能解决这个问题。我在python中使用digi xbee模块,它使用pyserial进行串行通信。下面是我试图发送的代码数据发送=(“\x33\x03\x75\x30\x00\x24\x5b\xc0”) 使用拉丁-1编码。 如果您使用的是UTF-8编码,它可能不是每次都正确。 所以,最好使用拉丁-1编码 例如

我正试图通过python为zigbee模块发送modbus十六进制命令
(33 04 75 30 00 24 5b c0)
。但是,取而代之的是以十六进制发送命令,而不是以ascii发送命令。谁能解决这个问题。我在python中使用digi xbee模块,它使用pyserial进行串行通信。下面是我试图发送的代码<代码>数据发送=(“\x33\x03\x75\x30\x00\x24\x5b\xc0”)

使用拉丁-1编码。 如果您使用的是UTF-8编码,它可能不是每次都正确。 所以,最好使用拉丁-1编码

例如:

from digi.xbee.devices import XBeeDevice, RemoteXBeeDevice, XBee64BitAddress
import serial
import logging

local_device = XBeeDevice("COM7", 9600)
data_send = ("\x33\x03\x75\x30\x00\x24\x5b\xc0")
try:
    local_device.open()
    remote_device = RemoteXBeeDevice(local_device, XBee64BitAddress.from_hex_string("0013A20041513885"))    
    local_device.flush_queues()
    print("Sending data asynchronously to %s >> %s " % (remote_device.get_64bit_addr(),data_send))#printing MAC add.
    local_device.send_data_async(remote_device, data_send)
    print("Success")

    print("Waiting for data...\n")
    xbee_message = local_device.read_data()
    if xbee_message is not None:
        print("From %s >> %s" % (xbee_message.remote_device.get_64bit_addr(),
                                         xbee_message.data.decode()))



finally:
    if local_device is not None and local_device.is_open():
        local_device.close()

请将所有相关代码作为代码格式文本添加到问题中。请编辑您的问题并将代码添加到那里!你说“以ASCII码发送”和“以十六进制发送”是什么意思?你在远端看到了什么,你希望看到什么?调试打印命令(“发送数据…”)看起来像是将数据编码为用于发送的字节。您可以使用
data\u send=b“\x33\x03\x75\x30\x00\x24\x5b\xc0”
,这样就可以清楚地看到您正在发送一个bytes对象(在字符串文本之前的
b
)。还要注意的是,paren不是必需的(可能会创建一个元组,而不仅仅是一个字符串/字节),并且实际上可能会导致发送问题。十六进制数据和ASCII数据(实际上它不是ASCII,而是ISO 8859-1)的差异只是表示。相同数据的不同显示。@tomlogic实际上我有一个设备,其中有xbee模块和rs-485端口。因此,我的要求是通过连接到pc的xbee向设备发送modbus命令,以便设备xbee可以接收命令并发送回modbus数据。如果modbus命令(33 03 75 30 00 24 5b c0)到达设备,则设备将发送回modbus数据。但不是以十六进制发送命令,而是以ascii等不同表示形式发送,因此设备接收命令:00。XCTU应用程序工作正常,因为我们可以在那里检查ascii和十六进制。
data_send = ("\x00\x01\x01\x01\x01\x00\x03\x08\x00\x00\x00\x14\x04\x00\x00\x00\x44\xf2\xfc").encode('Latin-1')