Python Can';t使用Modbus与Modbus设备通信
我无法与使用Modbus、Modbus RTU的设备通信 我已经通过usb到rs-485适配器(FTDI芯片)a到a和B到B将设备连接到raspberry pi 设备配置如下所示:Python Can';t使用Modbus与Modbus设备通信,python,modbus,rs485,minimalmodbus,Python,Modbus,Rs485,Minimalmodbus,我无法与使用Modbus、Modbus RTU的设备通信 我已经通过usb到rs-485适配器(FTDI芯片)a到a和B到B将设备连接到raspberry pi 设备配置如下所示: 端口设置: 波特率:9600 平价:没有 停止位:1 静音间隔:70毫秒 传输方式:RTU 接口2线RS485 ECM接头:DB9 连接:针脚1、4上的A。针脚6、9上的B Modbus保持寄存器(为本例简化) 交换的浮点格式: 40001(地址0)参数1 40003(地址2)参数2 我曾尝试使用
- 端口设置:
- 波特率:9600
- 平价:没有
- 停止位:1
- 静音间隔:70毫秒
- 传输方式:RTU
- 接口2线RS485
- ECM接头:DB9
- 连接:针脚1、4上的A。针脚6、9上的B
- 交换的浮点格式:
- 40001(地址0)参数1
- 40003(地址2)参数2
导入Modbus
仪器=最小Modbus.仪器('/dev/tty/USB1',1)
instrument.debug=True
instrument.handle_local_echo=True#串行设备回显每次写入,因此
instrument.serial.baudrate=9600
instrument.serial.timeout=1
值=仪器读取寄存器(0,2)
打印值
我希望收到某种答复,即使是错误或不正确的,但我什么也得不到。Modbus的调试输出显示“IOError:与仪器无通信(无应答)”
与传感器要求相比,我的代码是否有任何明显的错误?我与制造商确认了我的接线,并且是正确的。我看不到您那边有明显的错误。这相当困难,因为您使用的是硬件。 我将提供一些代码。我用它做了一个原型,它是一个带有USB到RS485转换器的树莓皮3B() 当我读取我使用的寄存器时,例如:
self.slave.read_register(2)
//or
self.slave.read_float(5)
我不确定我使用的是哪个python版本。我想是3.6.x.我看不出你那边有什么明显的错误。这相当困难,因为您使用的是硬件。 我将提供一些代码。我用它做了一个原型,它是一个带有USB到RS485转换器的树莓皮3B() 当我读取我使用的寄存器时,例如:
self.slave.read_register(2)
//or
self.slave.read_float(5)
我不确定我使用的是哪个python版本。我想是3.6.x.引用了您的有线电视手册: USB-RS485-WE电缆允许通过更改FT232R中的位来启用/禁用本地回波 EEPROM。如果EEPROM中的CBUS4设置为“PWRON#”,则启用本地回波。如果EEPROM中的CBUS4为 为“TXDEN”本地回显设置被禁用。 用户可以通过www.ftdichip.com上的MPROG进行设置 本地回显的默认设置为禁用(CBUS4设置为“TXDEN”) 呸!里面有很多信息。根据对您问题的评论,您在minimalModbus上激活了软件回音处理,因为否则您的例程将不会等待另一端设备的响应。这让人想到您的电缆是否启用或禁用了本地回音 幸运的是,您可以很容易地进行检查。正如手册所说,只需获取MPROG.Extract并运行即可(是的,您需要Windows来安装此工具,但您可以在虚拟机上运行它) 将电缆连接到USB端口(如果正在运行虚拟机,请不要忘记将设备发送到虚拟机),然后在MPROG上选择
Tools-->Read and Parse
这是你应该得到的:
确保您在C4框中选择了TXEN。根据手册,默认情况下您应该有TXEN,如果您看到
PWRON
,则表示本地回音处于活动状态。禁用它,您就可以使用Modbus了。引用电缆手册:
USB-RS485-WE电缆允许通过更改FT232R中的位来启用/禁用本地回波
EEPROM。如果EEPROM中的CBUS4设置为“PWRON#”,则启用本地回波。如果EEPROM中的CBUS4设置为
为“TXDEN”本地回显设置被禁用。
用户可以通过www.ftdichip.com上的MPROG进行设置
本地回显的默认设置为禁用(CBUS4设置为“TXDEN”)
呸!里面有很多信息。根据对您问题的评论,您在minimalModbus上激活了软件回音处理,因为否则您的例程将不会等待另一端设备的响应。这让人想到您的电缆是否启用或禁用了本地回音
幸运的是,您可以很容易地进行检查。正如手册所说,只需获取MPROG.Extract并运行即可(是的,您需要Windows来安装此工具,但您可以在虚拟机上运行它)
将电缆连接到USB端口(如果正在运行虚拟机,请不要忘记将设备发送到虚拟机),然后在MPROG上选择Tools-->Read and Parse
这是你应该得到的:
确保您在C4框中选择了TXEN。根据手册,默认情况下您应该有TXEN,如果您看到
PWRON
这意味着本地回音处于活动状态。禁用它,您就可以使用Modbus了。功能代码正确吗?您可以尝试读取寄存器(0、2、3)
相反。你能用另一个主设备测试你的modbus从设备并确认它工作吗?@Bosz是的功能代码应该是正确的。我尝试了你的解决方案,但仍然存在相同的问题。@JWo我只有树莓pi(3b+)还有我的笔记本电脑,我可以作为主机使用。无论哪种方式,我都会使用python。我可能会尝试从我的笔记本电脑上运行它。你能发布一个到USB-to-RS485电缆的链接吗?半双工Modbus需要一个方向控制信号,你的电缆有硬件方向控制吗?功能代码正确吗?