本文主要是介绍C++ 使用libmodbus通信示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码示例
#include <future>
#include <iostream>
#include <thread>#include <modbus.h>// 寄存器数量
#define TEST_MAX_REGISTERS 100
// 读取寄存器数量
#define TEST_MAX_READ 5int main()
{// C++ 异步auto&& f1 = std::async(std::launch::async, []() {std::this_thread::sleep_for(std::chrono::seconds(1));uint16_t tab_reg[TEST_MAX_REGISTERS] = { 0 };// 创建Modbus上下文modbus_t* ctx = modbus_new_rtu("COM2", 9600, 'N', 8, 1);modbus_set_slave(ctx, 1);modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232);modbus_rtu_set_rts(ctx, MODBUS_RTU_RTS_UP);if (modbus_connect(ctx) == -1) {fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));modbus_free(ctx);return;}modbus_set_response_timeout(ctx, 0, 1000000);while (true) {// 读取保持寄存器的值int rc = modbus_read_registers(ctx, 0, TEST_MAX_READ, tab_reg);if (rc == -1) {fprintf(stderr, "%s\n", modbus_strerror(errno));continue;}for (int i = 0; i < TEST_MAX_READ; ++i) {printf("<%#x>", tab_reg[i]);}printf("\n");std::this_thread::sleep_for(std::chrono::seconds(1));}});auto&& f2 = std::async(std::launch::async, []() {modbus_t* ctx = modbus_new_rtu("COM3", 9600, 'N', 8, 1);modbus_set_slave(ctx, 1);modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232);modbus_rtu_set_rts(ctx, MODBUS_RTU_RTS_UP);if (modbus_connect(ctx) == -1) {fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));modbus_free(ctx);return;}// 创建寄存器映射modbus_mapping_t* mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, MODBUS_MAX_READ_REGISTERS, 0);if (mb_mapping == NULL) {fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno));modbus_free(ctx);return;}uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];while (true) {// 初始化寄存器for (size_t i = 0; i < TEST_MAX_REGISTERS; i++) {mb_mapping->tab_registers[i] = rand() % 100;}memset(query, 0, sizeof(query));// 读取寄存器值int rc = modbus_receive(ctx, query);if (rc == -1) {continue;}// 响应请求modbus_reply(ctx, query, rc, mb_mapping);}});while (true) {std::this_thread::sleep_for(std::chrono::seconds(1));}return 0;
}
效果
这篇关于C++ 使用libmodbus通信示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!