modbus_common.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef __MODBUS_COMMON_H__
  2. #define __MODBUS_COMMON_H__
  3. #include "st_sys.h"
  4. #define MODBUS_ENCODER_RTU 1
  5. #define MODBUS_ENCODER_ASCII 0
  6. //数据域定制结构体
  7. typedef struct
  8. {
  9. //所属的命令,可以是1\2\3\4,不同命令会有位宽需求,所以注册的时候需要自己保证
  10. //0x01是线圈,响应01、02、05、0F命令
  11. //0x03是数值,响应03、04、06、10命令
  12. //0xFE是系统自定义读写缓冲
  13. unsigned char data_type;
  14. unsigned short address; //开始地址
  15. unsigned short number; //大小
  16. unsigned char * buffer; //数据缓冲地址
  17. void * next;
  18. } modbus_dataarea_t;
  19. //通用主站命令结构
  20. typedef struct modbus_master_cmd
  21. {
  22. char id; //命令ID
  23. char cmd; //发送的命令
  24. char dir; //方向0,表示读,1表示写
  25. unsigned short address; //地址
  26. unsigned short number; //长度
  27. unsigned char * value; //对于读操作,是数值,对于写操作是要发送的值
  28. int respone_timeout; //响应超时时间
  29. char cmdcode; //命令编号
  30. void (* on_respone)(struct modbus_master_cmd * cmd, unsigned char * respone, int length); //回调函数
  31. } modbus_master_cmd_t;
  32. //周期命令结构
  33. typedef struct modbus_master_period_cmd
  34. {
  35. modbus_master_cmd_t cmd; //命令信息
  36. sw_timer_t timer; //命令周期定时器
  37. int period; //设置周期
  38. struct modbus_master_period_cmd * next;//下一条命令
  39. }modbus_master_period_cmd_t;
  40. //周期命令结构
  41. typedef struct modbus_master_once_cmd
  42. {
  43. modbus_master_cmd_t cmd; //命令信息
  44. char token; //是否有效
  45. struct modbus_master_once_cmd * next; //下一条命令
  46. }modbus_master_once_cmd_t;
  47. //主站信息结构体
  48. typedef struct modbus_master
  49. {
  50. char step; //步数
  51. char encoder_type; //编码类型,0是RTU,1是ASCII
  52. char retry; //重次次数
  53. char current_try_time; //当前尝试次数
  54. int short one_byte_time;//每个字节耗费的时间,单位us
  55. int short interval;//命令间隔
  56. int wait_respone_time; //等待响应的时间,自动计算
  57. unsigned short send_count;//发送计数;
  58. unsigned short receive_count;//接收计数;
  59. modbus_master_cmd_t current_cmd; //当前正在等待的命令
  60. sw_timer_t timer; //检测超时所用的定时器
  61. modbus_master_once_cmd_t * once_cmd_list; //单次命令列表
  62. modbus_master_period_cmd_t * period_cmd_list; //周期命令列表
  63. }modbus_master_t;
  64. //从站信息结构体
  65. typedef struct modbus_slave
  66. {
  67. unsigned char id; //该从站的ID号信息
  68. modbus_dataarea_t * data_area_list; //绑定的可读取数据区域
  69. void (*on_comm)(unsigned char,unsigned char cmd,unsigned short address, unsigned short number);
  70. //命令的回调函数
  71. }modbus_slave_t;
  72. #endif