?|总线/通信笔记2 —— Modbus TCP的使用
总线/通信笔记2 —— Modbus TCP的使用
- 1. libmodbus库的使用
- 2. Modbus TCP开发实践
- 3. Modbus TCP多机通信应用案例
1. libmodbus库的使用 Step 1:初始化RTU/TCP指针
modbus_t *ctx;Step 2:初始化变量
ctx = modbus_new_tcp(“192.168.191.1”,502);
uint16_t tab_reg[20];Step 3:建立连接
modbus_connect(ctx);Step 4:设置从站ID
rc = modbus_set_slave(ctx, SLAVE_ID);Step 5:读写寄存器/数据
modbus_read_registers(ctx, IndexStart, IndexEnd, tab_reg);Step 6:关闭连接
modbus_close(ctx);2. Modbus TCP开发实践 【?|总线/通信笔记2 —— Modbus TCP的使用】Step 1:新建工程
modbus_free(ctx);
Step 2:将config.h、modbus.h等头文件以及modbus.dll、modbus.lib文件复制到工程目录下,如下图所示。
文章图片
Step 3:把modbus.h和modbus.lib文件添加到资源文件中,如下图所示:
文章图片
文章图片
剩下的不多说,直接上代码
#include
#include
#include
#include
#include
#include "modbus.h"#define LOOP 1 //循环次数
#define SERVER_ID 1 //从端设备地址
#define ADDRESS_START 0//测试寄存器起始地址
#define ADDRESS_END99//测试寄存器结束地址using namespace std;
int main(void)
{
modbus_t *ctx;
int rc;
int nb=10;
uint16_t tab_reg[20];
/*TCP*/
ctx = modbus_new_tcp("192.168.191.1",502);
//创建TCP类型的容器
// modbus_set_debug(ctx, TRUE);
//设置debug模式 if (modbus_connect(ctx) == -1)
{
fprintf(stderr, "Connection failed:%d\n", modbus_strerror(errno));
modbus_free(ctx);
return -1;
} rc = modbus_read_registers(ctx, 0, nb, tab_reg);
if (rc == -1)
{
fprintf(stderr, "%s\n", modbus_strerror(errno));
return -1;
} for (int i = 0;
i < nb;
i++)
{
printf("reg[%d]=%d \n", i, tab_reg[i]);
} modbus_close(ctx);
modbus_free(ctx);
system("pause");
return 0;
}
文章图片
3. Modbus TCP多机通信应用案例 留坑待填
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- Android中的AES加密-下
- 【读书笔记】贝叶斯原理
- 【韩语学习】(韩语随堂笔记整理)
- 人性的弱点-笔记
- 读书笔记:博登海默法理学|读书笔记:博登海默法理学 —— 正义的探索(1)
- D034+3组苏曼+《写作这回事》读书笔记
- 《自我的追寻》读书笔记3
- 最有效的时间管理工具(赢效率手册和总结笔记)