首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Netcat通过TCP/IP向温度控制器发送Modbus RTU请求

使用Netcat通过TCP/IP向温度控制器发送Modbus RTU请求
EN

Stack Overflow用户
提问于 2022-10-11 06:59:18
回答 1查看 82关注 0票数 0

我试图通过无线网络向温度控制器(PID)发送Modbus RTU消息,该设备接受传入的TCP/IP数据包,然后通过RS455连接转发其数据(让我们称该设备为“转换器”):

PC -(WiFi)-路由器-(RJ45)-转换器-(RS485)--> PID

该转换器被市场上称为Modbus TCP到RTU转换器,但它不是。这造成了一些混乱和挫折。但是,我决定继续使用该设备,并重写我的HMI代码来向其发送Modbus RTU消息,而不是Modbus TCP消息。

在开始重写代码之前,我想确保我知道自己在做什么,并且能够成功地向温度控制器发送请求并接收响应。我决定(也许是天真地)使用netcat通过命令行发送这条消息是最好的方法。

我正在发送的Modbus RTU消息包含以下请求:

  • 设备地址:1
  • 函数代码:3
  • 内存地址:1000
  • 寄存器数:1

H 117CRC:51840H 218f 219

转换器上的套接字将用于:

192.168.0.5

  • port:
  • IP地址:

因此,我发送的netcat命令如下:

代码语言:javascript
复制
echo -e -n '\x01\x03\x10\x00\x00\x01\x80\xCA' | nc 192.168.0.5 2000 -p 42998

在另一个终端,我正在收听:

代码语言:javascript
复制
nc -l 42998

我也用Wireshark捕捉流量,这样我就可以看到网络上发生了什么。

网络上正在进行的是:

一个好的,坚定的handshake

  • the Modbus请求从我的机器

  • 从转换器

  • 窗口调整大小通知从我的机器调整窗口大小从我的机器

  • 为Modbus请求从转换器

H 139我想要的h 240f 241

很明显,我在我的netcat上什么也没看到。

所以我想弄清楚温度控制器的反应是怎么回事。假设错误在于我,而不是硬件(冒着让你和我出丑的风险),下面是我认为可能出错的地方--或者至少我有一个问题,因为我在这一点上完全超出了我的深度:

  • Modbus RTU消息由11位字节组成--一个开始位、八个数据位、一个停止位和一个奇偶位
  • ,如果我只与netcat一起发送8位字节,以便温度控制器接收到消息,然后简单地以垃圾的形式丢弃它呢?
  • ,或者如果netcat发送11个字节,但奇偶性不同,甚至停止和启动位也不同?

我仔细研究了一下这个想法,并试着:

代码语言:javascript
复制
stty cs8 parenb -parodd

然后又发出了netcat命令,但是没什么区别,我真的觉得我现在就像河岸上的一条鱼,我很难找到tty,终端仿真器之类的信息,这些都让我点击。

Brits' answer to this SO question声明这种设备的驱动程序作为串口出现,而我的设备确实有这样的驱动程序--这些驱动程序是添加了启动、停止和奇偶位信息,还是要求它们在输入时出现?

根据你在这类事情上的更多经验,你有什么想法吗?有什么建议我可以解决吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-19 04:42:33

最后,一切都很顺利:

代码语言:javascript
复制
sudo echo -e -n '\x01\x03\x10\x00\x00\x01\x80\xCA' | nc 192.168.0.5 2000

问题是,TCP设备上的数据I/O使用RS485 A表示高,B使用B表示低,这与标准相反,但显然并不少见。

很烦人,但给你。小心点,我想。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74024146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档