libmodbus实现modbus_poll功能 发表于 2019-02-28 | 分类于 cpp | 评论数: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485#include <modbus.h>#include <iostream>#include<stdlib.h>#include<time.h>using namespace std;int main(){ modbus_t *ctx; srand((unsigned)time(NULL)); // 创建modbus连接 ctx = modbus_new_tcp("127.0.0.1", 502); if (ctx == NULL) { // 创建失败 fprintf(stderr, "Unable to allocate libmodbus context\n"); return -1; } // 设置调试模式 modbus_set_debug(ctx,true); // 设置连接的slave号,此处为1 int rc = modbus_set_slave(ctx, 1); if (rc == -1) { fprintf(stderr, "Invalid slave ID\n"); modbus_free(ctx); return -1; } // 连接 if (modbus_connect(ctx) == -1) { fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); modbus_free(ctx); return -1; } while(1) { // 读寄存器 uint16_t* dest= (uint16_t *) malloc(10 * sizeof(uint16_t)); memset(dest, 0, 10); int rc = modbus_read_registers(ctx, 0, 10, dest); if (rc == -1) { fprintf(stderr, "%s\n", modbus_strerror(errno)); return -1; } for(int i = 0; i < 10 ; i++) { cout << i << "\t:\t" << dest[i] << endl; } Sleep(1000); // 写寄存器 for(int i=0;i<10;i++) { if (dest[i] == 0) { dest[i] = rand() %20; } else { dest[i] *= 3; dest[i] %= 20 ; } } rc = modbus_write_registers(ctx, 0, 10, dest); if (rc == -1) { fprintf(stderr, "%s\n", modbus_strerror(errno)); return -1; } Sleep(1000); } modbus_close(ctx); modbus_free(ctx); return 0;} 参考:[1]. http://www.exbob.com/post/blog/2015-05-24[2]. http://libmodbus.org/docs/v3.1.4/ 坚持原创技术分享,您的支持将鼓励我继续创作! 打赏 微信支付