当前位置: 首页 > news >正文

libmodbus从linux访问window上的服务超时问题

window:

使用EasyModbusTCP Server Simulator 作为服务。

linux:

程序:

#include <stdio.h>
#include <modbus/modbus.h>int main()
{modbus_t *ctx;uint16_t holding_registers[1];// Create a new Modbus TCP contextctx = modbus_new_tcp("192.168.2.3", 502);if (ctx == NULL) {fprintf(stderr, "Error creating Modbus TCP context\n");return 1;}// Connect to the Modbus serverif (modbus_connect(ctx) == -1) {fprintf(stderr, "Error connecting to Modbus server: %s\n", modbus_strerror(errno));modbus_free(ctx);return 1;}// Read the value of holding register 0int rc = modbus_read_registers(ctx, 0, 1, holding_registers);if (rc == -1) {fprintf(stderr, "Error reading holding register: %s\n", modbus_strerror(errno));modbus_free(ctx);return 1;}// Print the value of the holding registerprintf("Value of holding register 0: %d\n", holding_registers[0]);// Disconnect from the Modbus server and free the contextmodbus_close(ctx);modbus_free(ctx);return 0;
}

反馈:

Error reading holding register: Connection timed out

后面添加了延时:

modbus_set_response_timeout(ctx, 1,0);

没有效果,然后再次添加了设置设备ID:

modbus_set_slave(ctx, 1);

这时的结果就是正确的:

Value of holding register 0: 23

原因分析:

modbus-TCP的设备ID的作用:

在 Modbus-TCP 中,设备 ID(Device ID)通常用于标识 Modbus 服务器或从设备。Modbus-TCP 是一种基于 TCP/IP 协议的 Modbus 通信协议,其中 TCP/IP 用于传输 Modbus 数据和命令。与传统的串行 Modbus 不同,Modbus-TCP 中的设备 ID 并不是必需的,因为网络地址可以唯一地标识 Modbus 服务器或从设备。

然而,设备 ID 仍然可以用于一些特殊的应用场景,例如在一个网络中存在多个 Modbus 服务器或从设备时,可以使用设备 ID 来区分它们。在这种情况下,设备 ID 可以被视为一个设备的逻辑地址,而网络地址则是物理地址。此外,设备 ID 还可以用于 Modbus-TCP 与其他 Modbus 协议之间进行转换时,例如将 Modbus-TCP 转换为 Modbus RTU,设备 ID 可以用于保持通信一致性和兼容性。(by chatGPT)

http://www.lryc.cn/news/24454.html

相关文章:

  • 挑战图像处理100问(26)——双线性插值
  • NXP iMX8系列处理器Pin Multiplexing定义说明
  • 用Python的Supervisor進行進程監控以及自動啓動
  • Centos和Window系统下Frp内网穿透
  • 春招冲刺(四):flex布局面试题总结
  • 我的 System Verilog 学习记录(7)
  • canvas复习笔记(绘制直线、矩形、圆形、圆弧)
  • LeetCode 653. 两数之和 IV - 输入二叉搜索树
  • 【Datawhale图机器学习】图神经网络
  • 【项目精选】 javaEE采购管理系统(论文+视频+源码)
  • 【Servlet篇2】创建一个web项目
  • Allegro如何手动让静态铜皮避让过孔操作指导
  • Java使用SpringBoot的Filter来扩展管道请求
  • 「JVM 高效并发」锁优化
  • 当园区物流遇上云计算,会发生什么事情?
  • 作为测试开发岗的面试官,我都是怎么选人的?
  • android事件分发机制源码分析
  • 今天,小灰37岁了!
  • 基于.NET 7 + iView 的前后端分离的通用后台管理系统开源框架
  • 新一代通信协议—— RSocket
  • 【编程实践】这个代码命名规范是真优雅呀!代码如诗!!(多读优秀的开源代码,多实践,你也可以一样优秀!)
  • Linux->进程终止和等待
  • 超店有数分享:tiktok数据分析工具推荐,助你成功出海!
  • 2022 第十四届蓝桥杯模拟赛第三期(题解与标程)
  • 「TCG 规范解读」PC 平台相关规范(1)
  • HNU工训中心:直流电路测量分析实验报告
  • tensorflow2.4--1.框架介绍
  • c++11 关键字 final 使用
  • 力扣(LeetCode)426. 将二叉搜索树转化为排序的双向链表(2023.02.28)
  • 华为OD机试真题Python实现【玩牌高手】真题+解题思路+代码(20222023)