概念
我们有一个船舶模拟器(客户端)和 Modbus 控制器(服务器)。我们的目标是在我的 PC 上开发一个模拟器(如控制器) 。但是我们没有关于客户端(模拟器)的信息。
进步
- 首先,我们检查了控制器(服务器)的实际输出。有 7 个不同的变量,如发动机电报、舵角等。
- 其次,我检查了存储命令值的控制器的寄存器号。那是从0到7。
安装了 Modpoll 软件的轮询服务器服务器:
我检查了寄存器类型。这是一个持有登记册
我编写了一个脚本来开发一个像 pymodbus Server 的控制器一样的服务器。我不仅可以在保持寄存器上写入从 0 到 7 的特定值,而且还有适当的握手和对模拟器(客户端)的响应
问题
- 客户端使用 256 的寄存器号发送读取请求。这意味着我的服务器以零值响应,而不是用寄存器上从 0 到 7 写入的命令值。但问题是模拟器(客户端)在其图形用户界面上显示参数的变化。
来自 wireshark 的屏幕截图 - 它显示 clinet(simulator) 从 246 发送一个注册号为 246 的请求:
- 客户端不仅发送读取请求,还发送写入请求,写入请求会覆盖服务器(PC)写入的值。
问题
模拟器怎么可能通过请求不同的寄存器号来接收命令信号?客户端必须发送一个注册号从 0 开始的请求才能接收命令信号。
我无法理解为什么客户端在从服务器读取值之前先写入。此读取请求会覆盖服务器 (pc) 写入的值。服务器(控制器或 pc)将向模拟器发送命令信号。我不知道为什么模拟器首先在服务器上写入一些值并读取它。
请就这个问题提出建议。
最好的问候 Byeon seongsu。