串行协议问题将代码从C移植到Python

串行协议问题将代码从C移植到Python,python,serial-port,protocols,pyserial,Python,Serial Port,Protocols,Pyserial,我是一个C语言和复杂的串行通信的初学者。我会尽我所能提供关于这个问题的所有信息;让我知道,如果有任何额外的我应该提供,这将有帮助 我正在将串行设备(微操作器)的通信协议从C移植到Python,以便在我的实验室正在开发的Python应用程序中使用。该公司为我们提供了一个用于与设备接口的小型命令行实用程序的源代码。使用这种逻辑,我们的Python模块能够生成正确/相同的数据块,包括CRC。但是,当Python代码发送数据块(与C代码生成的数据块相同)时,它不会收到来自设备的响应。使用串口监控程序(免

我是一个C语言和复杂的串行通信的初学者。我会尽我所能提供关于这个问题的所有信息;让我知道,如果有任何额外的我应该提供,这将有帮助

我正在将串行设备(微操作器)的通信协议从C移植到Python,以便在我的实验室正在开发的Python应用程序中使用。该公司为我们提供了一个用于与设备接口的小型命令行实用程序的源代码。使用这种逻辑,我们的Python模块能够生成正确/相同的数据块,包括CRC。但是,当Python代码发送数据块(与C代码生成的数据块相同)时,它不会收到来自设备的响应。使用串口监控程序(免费串口监控),我注意到Python和设备之间的通信在某些情况下与该公司提供的实用程序不同

下面是所提供实用程序的日志截图,该实用程序工作正常。它显示一个数据块的发送及其响应,以及第二个数据块的发送和响应的开始

下面是Python代码的屏幕截图;如您所见,它发送数据块时没有响应

至于其他可能有用的信息,我正在使用标准的Python串行库。数据块的结构为14个ASCII字符,以STX开头,以ETX结尾。前八个数据字符对应于函数、地址、值等,而最后四个字符是CRC

正如我所说,我在这方面有点不知所措,我真的不知道从哪里开始。任何可能帮助我解决这个问题的建议、帮助或资源都将不胜感激,如果有任何更具体的信息我应该提供,请告诉我


我发现pyserial附带的win32serial.py提供了直接(绑定?)到Windows API串行设置的功能,在我从C代码逐行复制设置(包括流控制和RTS)后,该功能似乎已经发挥了作用。非常感谢@Serge为您提供的时间和帮助

也许您应该发布一些C和python代码。也许您没有以相同的方式配置端口。你在使用流量控制吗?此外,没有所谓的“标准Python串行库”。在大多数情况下,人们使用pyserial。我在您发送的日志中看到,当您使用SOH(0x01)时,原始实用程序使用STX(0x02)作为消息的开始符号,在这种情况下,我很可能使用pyserial,我已经安装了它。我不知道我是否在使用流量控制。我把一些配置选项弄得有点乱,比如self.setDsrDtr(True)self.setDTR(True)self.setRTS(0),让串行监视器上的指示器在C程序运行时与指示器匹配(尽管我真的不知道我在这里做什么。)谢谢Serge,我会检查一下。好的@Serge,我再次查看了文件,似乎对于数据块(.21000000EABC.),第一个字符是0x02,STX。至于前面的数据,我不知道它是什么,但它不是由数据块代码生成的。对于初步通信,是否可能必须将起始字符设置为STX?