12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #ifndef __MODBUS_COMMON_H__
- #define __MODBUS_COMMON_H__
-
- #include "st_sys.h"
- #define MODBUS_ENCODER_RTU 1
- #define MODBUS_ENCODER_ASCII 0
- //数据域定制结构体
- typedef struct
- {
- //所属的命令,可以是1\2\3\4,不同命令会有位宽需求,所以注册的时候需要自己保证
- //0x01是线圈,响应01、02、05、0F命令
- //0x03是数值,响应03、04、06、10命令
- //0xFE是系统自定义读写缓冲
- unsigned char data_type;
- unsigned short address; //开始地址
- unsigned short number; //大小
- unsigned char * buffer; //数据缓冲地址
- void * next;
- } modbus_dataarea_t;
- //通用主站命令结构
- typedef struct modbus_master_cmd
- {
- char id; //命令ID
- char cmd; //发送的命令
- char dir; //方向0,表示读,1表示写
- unsigned short address; //地址
- unsigned short number; //长度
- unsigned char * value; //对于读操作,是数值,对于写操作是要发送的值
- int respone_timeout; //响应超时时间
- char cmdcode; //命令编号
- void (* on_respone)(struct modbus_master_cmd * cmd, unsigned char * respone, int length); //回调函数
- } modbus_master_cmd_t;
- //周期命令结构
- typedef struct modbus_master_period_cmd
- {
- modbus_master_cmd_t cmd; //命令信息
- sw_timer_t timer; //命令周期定时器
- int period; //设置周期
- struct modbus_master_period_cmd * next;//下一条命令
- }modbus_master_period_cmd_t;
- //周期命令结构
- typedef struct modbus_master_once_cmd
- {
- modbus_master_cmd_t cmd; //命令信息
- char token; //是否有效
- struct modbus_master_once_cmd * next; //下一条命令
- }modbus_master_once_cmd_t;
- //主站信息结构体
- typedef struct modbus_master
- {
- char step; //步数
- char encoder_type; //编码类型,0是RTU,1是ASCII
- char retry; //重次次数
- char current_try_time; //当前尝试次数
- int short one_byte_time;//每个字节耗费的时间,单位us
- int short interval;//命令间隔
- int wait_respone_time; //等待响应的时间,自动计算
- unsigned short send_count;//发送计数;
- unsigned short receive_count;//接收计数;
- modbus_master_cmd_t current_cmd; //当前正在等待的命令
- sw_timer_t timer; //检测超时所用的定时器
- modbus_master_once_cmd_t * once_cmd_list; //单次命令列表
- modbus_master_period_cmd_t * period_cmd_list; //周期命令列表
- }modbus_master_t;
- //从站信息结构体
- typedef struct modbus_slave
- {
- unsigned char id; //该从站的ID号信息
- modbus_dataarea_t * data_area_list; //绑定的可读取数据区域
- void (*on_comm)(unsigned char,unsigned char cmd,unsigned short address, unsigned short number);
- //命令的回调函数
- }modbus_slave_t;
- #endif
|