1

概念

我们有一个船舶模拟器(客户端)和 Modbus 控制器(服务器)。我们的目标是在我的 PC 上开发一个模拟器(如控制器) 。但是我们没有关于客户端(模拟器)的信息。

进步

  • 首先,我们检查了控制器(服务器)的实际输出。有 7 个不同的变量,如发动机电报、舵角等。
  • 其次,我检查了存储命令值的控制器的寄存器号。那是从0到7。

安装了 Modpoll 软件的轮询服务器服务器:

屏幕1

  • 我检查了寄存器类型。这是一个持有登记册

  • 我编写了一个脚本来开发一个像 pymodbus Server 的控制器一样的服务器。我不仅可以在保持寄存器上写入从 0 到 7 的特定值,而且还有适当的握手和对模拟器(客户端)的响应

问题

  • 客户端使用 256 的寄存器号发送读取请求这意味着我的服务器以零值响应,而不是用寄存器上从 0 到 7 写入的命令值。但问题是模拟器(客户端)在其图形用户界面上显示参数的变化。

来自 wireshark 的屏幕截图 - 它显示 clinet(simulator) 从 246 发送一个注册号为 246 的请求:

屏幕2

  • 客户端不仅发送读取请求,还发送写入请求,写入请求会覆盖服务器(PC)写入的值。

问题

  1. 模拟器怎么可能通过请求不同的寄存器号来接收命令信号?客户端必须发送一个注册号从 0 开始的请求才能接收命令信号。

  2. 我无法理解为什么客户端在从服务器读取值之前先写入。此读取请求会覆盖服务器 (pc) 写入的值。服务器(控制器或 pc)将向模拟器发送命令信号。我不知道为什么模拟器首先在服务器上写入一些值并读取它。

请就这个问题提出建议。

最好的问候 Byeon seongsu。

4

0 回答 0