RS-485 通信故障排除

RS-485 通信故障排除

我有一个ND-6021 模拟量输入模块。它是一个 RS-485 设备,可以根据收到的命令设置可变输出电压。我正在尝试让它在 Linux Debian Stretch 下工作。我一直在使用minicom来看看它是否正常工作,所以我发出了读取配置命令:$012<CR>。设备回复消息!01320600!表示它正确接收了命令,消息的其余部分解释了它的配置方式。据我了解,这意味着连接已正确设置,并且不存在阻碍通信的硬件问题。

下一步是设置所需的输出电压水平。我已将数字电压表连接到设备,因此可以看到输出电压。我发出命令:#0108.467<CR>我应该在电压表上读到 8.467 伏的值,并且设备应该用 进行应答>,但电压保持在 0 并且设备没有应答。

我花了几个小时检查命令的语法,它是正确的,所以我又做了一次测试。我将设备连接到 Windows 笔记本电脑,并使用 termite 发出了完全相同的命令。读取配置命令 ( $012<CR>) 有效,我得到了与 Linux 中相同的答案,现在设置电压命令也有效:我>从设备得到了答案,并且输出电压已正确设置。

我很困惑,因为我的测试显示通信和硬件设置都正常,但显然,有一些东西不起作用,但是什么呢?

答案1

通常这是波特率或换行解释问题。 (即使命令部分有效)

索卡特是用于建立网络和串行连接并对其进行故障排除的出色工具。

socat - /dev/ttySX[,params]

如果空参数不起作用,您可以尝试使用参数添加显式波特率:b9600/b19200/b57600/b115200 ...所有列表检索socat -?? | grep 'b[1-9]'

然后专注于换行解释问题,尝试参数的组合:crcrnlecho=0raw

...因为有些模块坚持 cr+lf (\r\n) 行结尾,有些模块只需要 '\n',有时回显会造成混乱...而在您的情况下,模块只需要回车符 (\r) ,所以echo '#0108.467' | socat - /dev/ttySX,cr应该工作得很好。

相关内容