You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
40 lines
1.2 KiB
|
4 weeks ago
|
/*
|
||
|
|
* modbus_tcp.h
|
||
|
|
*
|
||
|
|
* Change Logs:
|
||
|
|
* Date Author Notes
|
||
|
|
* 2024-04-01 qiyongzhong first version
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef __MODBUS_TCP_H__
|
||
|
|
#define __MODBUS_TCP_H__
|
||
|
|
|
||
|
4 weeks ago
|
#include "modbus_cfg.h"
|
||
|
|
#include "modbus_pdu.h"
|
||
|
4 weeks ago
|
|
||
|
|
#ifdef MB_USING_TCP_PROTOCOL
|
||
|
|
|
||
|
|
#define MB_TCP_MBAP_SIZE 7 //MBAP头尺寸
|
||
|
|
#define MB_TCP_FRM_MIN (MB_TCP_MBAP_SIZE + MB_PDU_SIZE_MIN)
|
||
|
|
#define MB_TCP_FRM_MAX (MB_TCP_MBAP_SIZE + MB_PDU_SIZE_MAX)
|
||
|
|
|
||
|
|
#define MB_TCP_MBAP_PID 0x0000//使用的协议类型代码
|
||
|
|
|
||
|
|
typedef struct{
|
||
|
|
u16 tid; //传输标识符, 响应须与请求一致
|
||
|
|
u16 pid; //协议类型, 响应须与请求一致
|
||
|
|
u16 dlen; //等于pdu数据长度加1, 打包时会自动计算处理不需人工赋值
|
||
|
|
u8 did; //逻辑设备ID, 响应须与请求一致
|
||
|
|
}mb_tcp_mbap_t;//TCP协议MBAP头定义
|
||
|
|
|
||
|
|
typedef struct{
|
||
|
|
mb_tcp_mbap_t mbap;//MBAP头
|
||
|
|
mb_pdu_t pdu;//PDU数据
|
||
|
|
}mb_tcp_frm_t;//TCP帧定义
|
||
|
|
|
||
|
|
int mb_tcp_frm_make(u8 *buf, const mb_tcp_frm_t *frm, mb_pdu_type_t type);//生成tcp帧, 返回帧长度
|
||
|
|
int mb_tcp_frm_parse(const u8 *buf, int len, mb_tcp_frm_t *frm, mb_pdu_type_t type);//解析tcp帧, 返回pdu数据长度, 解析失败返回0, 功能码不支持返回-1
|
||
|
|
|
||
|
|
#endif
|
||
|
|
#endif
|