通过Python与USB仪器(AlphaLab Gaussmeter)进行串行通信时出现问题

时间:2019-07-02 02:22:59

标签: python usb pyserial

我正在尝试通过其USB端口与python中的串行端口与AlphaLabs GM-2高斯计(https://www.alphalabinc.com/product/gm2/)通信。高斯计是一种非常简单的设备,仅在前面板上显示被测磁场的数字值。我们希望能够直截了当,我们可以读取测量值并将其与时间作图。

目前,我们在与设备通信方面遇到问题,希望能获得一些帮助!我一直在尝试针对他们的系统(https://www.alphalabinc.com/wp-content/uploads/2018/02/alphaapp_comm_protocol.pdf)遵循他们的《数据采集手册》 ...但是,可惜,我们的确遇到了很大的障碍。

根据手册,如果我想向设备发送ID_METER_PROP命令,则需要向设备提供命令字节:0x01,后跟“内容无关紧要的五个字节”。这应该给我们一个ASCII块,后跟一个终止字节或一个表明有更多数据的字节。

从我们的代码中,我们可以得到一个ASCII块,后跟这个“确认字节”(表明它们是要从高斯计发送的更多数据...),但是我们似乎无法退出程序来接收所述数据。一旦我们调用该程序,它就会冻结高斯计……就像它试图发送更多数据一样,只是不能。

感谢您的任何建议!

我曾尝试与Alpha Labs的技术支持联系,但可悲的是,他们无法在其预制的GUI之外提供任何编码帮助。

'''python

# Define the command to send to the device
command = serial.to_bytes([0x01, 0x03, 0x03, 0x03, 0x03, 0x03])
#print(command)

# Send command to device and save its return
ret=gaussmeter.getIdentification(command)
print(ret) # print return variable


#-----
#Defined Function getIdentification for reference
#-----
    def getIdentification(self, command):
        time.sleep(self.DEFAULT_SLEEP_TIME)
        self.port.write(command)
        identification = self.port.read(self.DEFAULT_READ_SIZE)
        test = self.port.read(self.DEFAULT_READ_SIZE)
        return identification, test

'''

上面的代码输出:(b':METER_NAME = GM2_GAUS \ x08',b'')

“ \ x08”是上面和手册中定义的“确认字节”。 调用此代码将冻结高斯计设备,并且重置它的唯一方法是拔下其插头,然后重新插入。

我们希望看到手册中定义的更多设备ASCII设置,而且我们绝对不希望设备出现故障

1 个答案:

答案 0 :(得分:0)

首先,我相信您应该在之后致电write。

文档中说,如果得到了“确认字节”,则应该重复该过程。

因此,您发送命令进行读取,如果收到确认字节,请重复。