协议驱动开发
介绍协议驱动开发入门
1 简介
1.1 目的
本文档是协议驱动开发的说明文档,阐述了与 PLC 设备的交互过程和具体接口定义,并不限于其中的某个功能的具体实现。
1.2 范围
所有协议驱动 SDK 适用。
2 接口详细设计
2.1 全局接口
2.1.1 全局初始化接口
/*
* @brief 全局初始化
* @param [IN] param 类型:(void*)INIT_PARAM
* @return void
* 日记初始化,资源初始化
*/
SYC_SDK_API void SYC_SDK_TYPE SYC_MODBUS_SDK_Init(void* param);
2.1.2 全局释放接口
/*
* @brief 全局释放
* @return void
* 释放初始化资源
*/
SYC_SDK_API void SYC_SDK_TYPE SYC_MODBUS_SDK_Fini();
2.2 通用接口
2.2.1 事件回调接口
/*
* @brief 事件回调接口
* @param [OUT] handle 为回调的设备句柄
* @param [OUT] events 为事件类型,
* @param [OUT] context 为用户上下文
*/
void(_ SYC_EVENT_CALLBACK)(void_ handle, int events, void* context);
2.2.2 设置事件回调
/*
* @brief 设置事件回调
* @param [IN] handle 创建设备时返回的设备句柄
* @param [IN] callback 事件回调接口,当有事件发生时,sdk 会回调该接口
* @param [IN] context 用户上下文,用于区分不同的使用者
* @return void
*/
SYC_SDK_API void SYC_SDK_TYPE SYC_MODBUS_SDK_SetEventCallback(SYC_HANDLE handle, SYC_EVENT_CALLBACK callback, void* context);
2.2.3 创建设备句柄接口
/*
* @brief 创建设备句柄接口
* @param [IN] ip 设备 ip 地址
* @param [IN] Port 设备端口(502)
* @param [IN] extparam 连接扩展参数 类型:(void*)CONNECT_EXT_PARAM
* @return sdk 句柄(连接不成功时,返回值为 null)
*/
SYC_SDK_API SYC_HANDLE SYC_SDK_TYPE SYC_MODBUS_SDK_CreateHandle(const SYC_CHAR* ip, int port, void* extparam);
2.2.4 释放设备句柄接口
/*
* @brief 释放设备句柄接口
* @param [IN] handle 设备句柄
* @return void
*/
SYC_SDK_API void SYC_SDK_TYPE SYC_MODBUS_SDK_DeleteHandle(SYC_HANDLE handle);
2.2.5 设备连接打开接口
/*
* @brief 打开设备连接接口
* @param [IN] handle 设备句柄
* @return bool 连接不成功时,返回值为 false
* 用于连接设备,连接成功返回设备句柄
*/
SYC_SDK_API bool SYC_SDK_TYPE SYC_MODBUS_SDK_Open(SYC_HANDLE handle);
2.2.6 设备连接关闭接口
/*
* @brief 关闭设备连接接口
* @param [IN] handle 设备句柄
* @return void
*/
SYC_SDK_API void SYC_SDK_TYPE SYC_MODBUS_SDK_Close(SYC_HANDLE handle);
2.2.7 通用采集接口
* @brief 通用读接口
* @param [IN] handle 设备句柄
* @param [IN] addr 起始地址
* @param [IN] offset 读取的偏移量,字寄存器时,单位为字节;位寄存器时,单位为位
* @param [IN] data 存放读取结果的缓存首地址
* @param [IN] size 读取结果的大小
* @param [IN] extparam 扩展参数 类型:(void*)STD_PARAM
* @return bool 读成功时返回 true,失败时返回 false
*/
SYC_SDK_API bool SYC_SDK_TYPE SYC_MODBUS_SDK_Read(void* handle, const char* addr, int offset, void* data, int& size, void* extparam);
2.2.8 通用控制接口
/*
* @brief 通用写接口
* @param [IN] handle 设备句柄
* @param [IN] addr 起始地址
* @param [IN] data 存放待写入数据的缓存首地址
* @param [IN] size 待写入数据的大小
* @param [IN] extparam 扩展参数 类型:(void*)STD_PARAM
* @return bool 读成功时返回 true,失败时返回 false
*/
SYC_SDK_API bool SYC_SDK_TYPE SYC_MODBUS_SDK_Write(void* handle, const char* addr, void* data, int size, void* extparam);
2.3 数据结构定义
//全局初始化参数
typedef struct tagInitParam
{
int logLevel; //日志等级
unsigned int logKeepDays; //日志保存时间
unsigned long logCapacity; //日志保存容量
tagInitParam()
{
logLevel = 0;
logKeepDays = 0;
logCapacity = 0;
}
}INIT_PARAM, * LP_INIT_PARAM;
//连接扩展参数
typedef struct tagConnectExtParam
{
unsigned int connectTimeout; //连接超时,单位 s
unsigned int responseTimeout; //响应超时,单位 ms
tagConnectExtParam()
{
connectTimeout = 3;
responseTimeout = 1000;
}
}CONNECT_EXT_PARAM, * LP_CONNECT_EXT_PARAM;
//驱动原始报文
typedef struct tagDriverDebugMsg
{
SYC_U8 msg[5120];
SYC_S32 len;
SYC_S64 time;
SYC_S32 code;
tagDriverDebugMsg()
{
code = 0;
_memset_(msg, 0, 5120);
time = 0;
len = 0;