- 主要结构体
结构体 modbus_t :
包含 int slave(从机地址)、timeout、 backend(各种操作); backend_data 等
结构体modbus_backend_t:
build_request_basis、set_slave、receive、send、connect 等操作
结构体 modbus_tcp_t :
包含ip 、port 等信息
2. 问 结构体之间如何使用和关联?
-
创建结构体变量 :const modbus_backend_t _modbus_tcp_backend ={_modbus_set_slave;...各种函数}
-
创建modbus_t 对象 ctx = (modbus_t *)malloc(sizeof(modbus_t)); // 最大的容器
-
modbus_t 通过指针关联各种操作ctx->backend = &_modbus_tcp_backend;
_modbus_tcp_backend 这个结构体变量里面定义了各种实际操作的函数。
- modbus_t 关联具体的实体属性 modubs_tcp/rtu :
ctx->backend_data = (modbus_tcp_t *)malloc(sizeof(modbus_tcp_t));
然后填充 backend_data 信息。
如何填充?为更好操作 定义一个指针先指向这块内存,然后给这块内存赋值。
modbus_tcp_t *ctx_tcp;
ctx_tcp = (modbus_tcp_t *)ctx->backend_data;
strlcpy(ctx_tcp->ip, ip, dest_size);
ctx_tcp->port = port;
- 最后:返回 modbus_t
modbus_backend_t * 指向不同的具体类型设备 tcp/rtu。重点在于理解面向对象的设计方法