329 lines
8.8 KiB
C
329 lines
8.8 KiB
C
#ifndef IEC104CLN_DLL_H
|
||
#define IEC104CLN_DLL_H
|
||
|
||
///////////////////////////cbt add 2020.2.1///////////////////////
|
||
|
||
//delphi定义回调函数
|
||
typedef int (*CALLBACK_DEV_ON)(unsigned char devAddr);//装置(104从站)已连接,执行该回调函数
|
||
typedef int (*CALLBACK_DEV_OFF)(unsigned char devAddr);//装置(104从站)已断开,执行该回调函数
|
||
|
||
#pragma pack(1)//1字节对齐
|
||
//cbt add 2020.3.11 104动态库启动不读配置文件,所有配置从参数传入
|
||
typedef struct{
|
||
|
||
/*unsigned char dev_num;//装置数量*/ //cbt modified 2020.4.3只设置一台装置
|
||
|
||
unsigned char dev_type;//1我司装置、0标准104协议装置
|
||
char dev_ip[20];//每台装置ip
|
||
unsigned short dev_port;//每台装置的端口号
|
||
unsigned char dev_addr;//每台装置的地址
|
||
|
||
unsigned int dev_yc_num;//每台装置的遥测数量
|
||
unsigned int dev_yc_start;//每台装置的遥测起始地址
|
||
unsigned int dev_yx_num;//每台装置的遥信数量
|
||
unsigned int dev_yx_start;//每台装置的遥信起始地址
|
||
unsigned int dev_dd_num;//每台装置的电度数量
|
||
unsigned int dev_dd_start;//每台装置的电度起始地址
|
||
|
||
}CLN104_PARAM;
|
||
|
||
//cbt add 2020.3.11 104主站动态库 增加变位遥信循环缓冲区
|
||
typedef struct {
|
||
|
||
unsigned char dev_addr;
|
||
unsigned char dev_sector;
|
||
unsigned int dev_inf;
|
||
unsigned char yx_val;
|
||
unsigned char tm[7];
|
||
}RECORDYXBURST;
|
||
|
||
#pragma pack()
|
||
|
||
/*启动104客户端,装置ip和端口以及装置地址在./Config.ini文件中的YKDevAddr一行配置
|
||
|
||
返回值 0:启动成功
|
||
返回值 <0: 启动失败。若启动失败,检查下各配置文件是否完备,各配置文件是否按照要求进行了配置。
|
||
*/
|
||
__declspec(dllexport) int iec104cln_start(CLN104_PARAM cln104_param, CALLBACK_DEV_ON callback_dev_on, CALLBACK_DEV_OFF callback_dev_off);
|
||
|
||
/*关闭104客户端
|
||
|
||
返回值 0:关闭成功
|
||
返回值 <0: 关闭失败
|
||
*/
|
||
__declspec(dllexport) int iec104cln_end(void);
|
||
|
||
/*获取装置的TCP连接状态,该状态写入参数commState中
|
||
|
||
参数
|
||
devAddr:装置地址
|
||
commState : 保存连接状态
|
||
|
||
返回值 0:获取状态成功,此时commState指示的状态有效,commState大于等于3 表示已经建立TCP连接
|
||
返回值 -1:获取状态失败,此时commState指示的状态无效。可能是该装置地址没有在Config.ini中配置
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_device_comm_state(unsigned char devAddr, unsigned char *commState);
|
||
|
||
/*获取装置的协议连接状态
|
||
参数
|
||
addr:装置地址
|
||
|
||
返回值 0:装置在线,此时可以下发总召唤、遥控等命令
|
||
返回值 -1:装置不在线。装置(104从站)还未与104主站连接上
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_dev_status( unsigned char addr );
|
||
|
||
|
||
/*获取装置的总召唤完成状态 cbt add 2020.4.24
|
||
参数
|
||
addr:装置地址
|
||
|
||
返回值 0:装置已经总召唤完成,可以读取遥信遥测
|
||
返回值 -1:传入的装置地址错误,或装置还未完成总召唤,遥信遥测不可用。
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_dev_callstatus( unsigned char addr );
|
||
|
||
|
||
/*获取遥测值
|
||
参数
|
||
dev_addr :装置地址
|
||
dev_sector:装置扇区
|
||
dev_inf :装置信息序号
|
||
|
||
yc_val:存储获取的遥测值
|
||
|
||
返回值 0:获取成功,此时yc_val保存的值有效
|
||
返回值 -1:获取失败,此时yc_val保存的值无效。可能是点表中没有与 (地址、扇区、inf) 这个三元素 匹配的条目
|
||
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_yc(unsigned char dev_addr, unsigned char dev_sector, unsigned int dev_inf, float *yc_val);
|
||
|
||
/*获取遥信值
|
||
参数
|
||
dev_addr :装置地址
|
||
dev_sector:装置扇区
|
||
dev_inf :装置信息序号
|
||
|
||
yx_val:存储获取的遥信值,遥信为双点遥信。遥信为0x83表示该遥信,装置未上送
|
||
|
||
返回值 0:获取成功,此时yx_val保存的值有效
|
||
返回值 -1:获取失败,此时yx_val保存的值无效。可能是点表中没有与 (地址、扇区、inf) 这个三元素 匹配的条目
|
||
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_yx(unsigned char dev_addr, unsigned char dev_sector, unsigned int dev_inf, unsigned char *yx_val);
|
||
|
||
/*获取电度值
|
||
参数
|
||
dev_addr :装置地址
|
||
dev_sector:装置扇区
|
||
dev_inf :装置信息序号
|
||
|
||
dd_val:存储获取的电度值
|
||
|
||
返回值 0:获取成功,此时dd_val保存的值有效
|
||
返回值 -1:获取失败,此时dd_val保存的值无效。可能是点表中没有与 (地址、扇区、inf) 这个三元素 匹配的条目
|
||
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_dd(unsigned char dev_addr, unsigned char dev_sector, unsigned int dev_inf, unsigned long *dd_val);
|
||
|
||
|
||
/*下发遥控命令
|
||
参数
|
||
dev_addr :装置地址
|
||
dev_sector:装置扇区
|
||
dev_inf :装置信息序号
|
||
yk_dco:2 控合,1控分
|
||
|
||
返回值 0:下发遥控命令成功
|
||
返回值 -1:下发遥控命令失败。可能是装置(104从站)还未与104主站连接上,或者该装置地址没有在Config.ini中配置
|
||
返回值 -2 :上一次的遥控命令还未下发完成,需等待一段时间后再调用本接口函数发送遥控命令
|
||
*/
|
||
__declspec(dllexport) int iec104cln_yk(unsigned char dev_addr, unsigned char dev_sector, unsigned int dev_inf, unsigned char yk_dco);
|
||
|
||
|
||
/*总召唤类型*/
|
||
#define IEC104_STATUS_CALL 0 //通信状态总召唤
|
||
#define IEC104_YX_CALL 1 //遥信遥测总召唤
|
||
#define IEC104_DD_CALL 2 //电度总召唤
|
||
|
||
/*总召唤
|
||
参数
|
||
call_type:总召唤类型,获取遥信遥测请使用IEC104_YX_CALL
|
||
dev_addr :装置地址
|
||
|
||
返回值 0:下发总召唤命令成功
|
||
返回值 -1:下发总召唤命令失败。可能是装置(104从站)还未与104主站连接上,或者该装置地址没有在Config.ini中配置
|
||
|
||
*/
|
||
__declspec(dllexport) int iec104cln_call(unsigned char call_type,unsigned char dev_addr);
|
||
|
||
/* 读取遥信变位缓冲区
|
||
参数: yx_burst 读取到的遥信变位存储在这个参数中
|
||
|
||
返回值:0成功读取,-1未读取(读取失败是因为缓冲区已读完)
|
||
*/
|
||
__declspec(dllexport) int iec104cln_read_yx_burst_record(RECORDYXBURST *yx_burst);
|
||
|
||
|
||
|
||
#if 0
|
||
/* 获取数据(遥测、遥信、电度)缓冲区
|
||
参数:data 遥测缓冲区起始地址
|
||
|
||
返回值:0成功获取数据缓冲区地址,-1失败
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_yc_buf(float** data);
|
||
|
||
|
||
/* 获取数据(遥测、遥信、电度)缓冲区
|
||
参数:data 遥信缓冲区起始地址.遥信值存储在该结构体的dpi元素中
|
||
|
||
返回值:0成功获取数据缓冲区地址,-1失败
|
||
*/
|
||
typedef struct{
|
||
unsigned char sector; //扇区
|
||
unsigned char dpi; //遥信值
|
||
unsigned char chgFlag; //遥信变位标志
|
||
unsigned char resv; //预留
|
||
}YXDATA_TYPE;
|
||
__declspec(dllexport) int iec104cln_get_yx_buf(YXDATA_TYPE** data);
|
||
|
||
|
||
/* 获取数据(遥测、遥信、电度)缓冲区
|
||
参数:data 电度缓冲区起始地址
|
||
|
||
返回值:0成功获取数据缓冲区地址,-1失败
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_dd_buf(unsigned long** data);
|
||
|
||
#else
|
||
|
||
//cbt add 2020.4.2 增加遥信、遥测、电度的自定义结构体
|
||
typedef struct{
|
||
unsigned char addr;//装置地址
|
||
unsigned char sector;//装置扇区
|
||
unsigned short inf;//信息序号(信息体地址)
|
||
float val;//遥测值
|
||
unsigned int chgFlag;//值变化的标志(0未变化,1变化)
|
||
unsigned char tm[7];//变化时间--不带时标上送的采用系统时标 cbt add 2020.4.24
|
||
}YC_TYPE;
|
||
|
||
|
||
typedef struct{
|
||
unsigned char addr;
|
||
unsigned char sector;
|
||
unsigned short inf;
|
||
unsigned char val;
|
||
unsigned char resv[3];//预留,字节对齐,无实际作用
|
||
unsigned int chgFlag;
|
||
unsigned char tm[7];//变化时间--不带时标上送的采用系统时标 cbt add 2020.4.24
|
||
}YX_TYPE;
|
||
|
||
|
||
typedef struct{
|
||
unsigned char addr;
|
||
unsigned char sector;
|
||
unsigned short inf;
|
||
unsigned long val;
|
||
unsigned int chgFlag;
|
||
unsigned char tm[7];//变化时间--不带时标上送的采用系统时标 cbt add 2020.4.24
|
||
}DD_TYPE;
|
||
|
||
/* 获取数据(遥测、遥信、电度)缓冲区,每次调用自动偏移读取指针
|
||
参数:data 遥测缓冲区数据
|
||
|
||
返回值:0成功获取数据,-1数据未变化,-2到达缓冲区末尾
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_yc_buf(YC_TYPE* data);
|
||
|
||
|
||
/* 获取数据(遥测、遥信、电度)缓冲区,每次调用自动偏移读取指针
|
||
参数:data 遥信缓冲区数据
|
||
|
||
返回值:0成功获取数据缓冲区数据,-1数据未变化,-2到达缓冲区末尾
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_yx_buf(YX_TYPE *data);
|
||
|
||
|
||
/* 获取数据(遥测、遥信、电度)缓冲区,每次调用自动偏移读取指针
|
||
参数:data 遥测缓冲区数据
|
||
|
||
返回值:0成功获取数据,-1数据未变化,-2到达缓冲区末尾
|
||
*/
|
||
__declspec(dllexport) int iec104cln_get_dd_buf(DD_TYPE* data);
|
||
|
||
#endif
|
||
|
||
|
||
//cbt add 2020.7.27 以结构体的方式获取三遥
|
||
|
||
typedef struct
|
||
{
|
||
int ret;//处理结果,为0表示获取成功,此时yc_val保存的值有效;为-1表示获取失败,此时yc_val保存的值无效
|
||
float yc_val;
|
||
}CALL_YC_TYPE;
|
||
|
||
typedef struct
|
||
{
|
||
int ret;//处理结果,为0表示获取成功,此时yx_val保存的值有效;为-1表示获取失败,此时yx_val保存的值无效
|
||
unsigned char yx_val;
|
||
}CALL_YX_TYPE;
|
||
|
||
typedef struct
|
||
{
|
||
int ret;//处理结果,为0表示获取成功,此时dd_val保存的值有效;为-1表示获取失败,此时dd_val保存的值无效
|
||
unsigned long dd_val;
|
||
}CALL_DD_TYPE;
|
||
|
||
|
||
|
||
/*获取遥测值
|
||
参数
|
||
dev_addr :装置地址
|
||
dev_sector:装置扇区
|
||
dev_inf :装置信息序号
|
||
|
||
yc_val:存储获取的遥测值
|
||
|
||
返回值 0:获取成功,此时yc_val保存的值有效
|
||
返回值 -1:获取失败,此时yc_val保存的值无效。可能是点表中没有与 (地址、扇区、inf) 这个三元素 匹配的条目
|
||
|
||
*/
|
||
__declspec(dllexport) CALL_YC_TYPE iec104cln_get_yc_struct(unsigned char dev_addr, unsigned char dev_sector, unsigned int dev_inf);
|
||
|
||
/*获取遥信值
|
||
参数
|
||
dev_addr :装置地址
|
||
dev_sector:装置扇区
|
||
dev_inf :装置信息序号
|
||
|
||
yx_val:存储获取的遥信值,遥信为双点遥信。遥信为0x83表示该遥信,装置未上送
|
||
|
||
返回值 0:获取成功,此时yx_val保存的值有效
|
||
返回值 -1:获取失败,此时yx_val保存的值无效。可能是点表中没有与 (地址、扇区、inf) 这个三元素 匹配的条目
|
||
|
||
*/
|
||
__declspec(dllexport) CALL_YX_TYPE iec104cln_get_yx_struct(unsigned char dev_addr, unsigned char dev_sector, unsigned int dev_inf);
|
||
|
||
/*获取电度值
|
||
参数
|
||
dev_addr :装置地址
|
||
dev_sector:装置扇区
|
||
dev_inf :装置信息序号
|
||
|
||
dd_val:存储获取的电度值
|
||
|
||
返回值 0:获取成功,此时dd_val保存的值有效
|
||
返回值 -1:获取失败,此时dd_val保存的值无效。可能是点表中没有与 (地址、扇区、inf) 这个三元素 匹配的条目
|
||
|
||
*/
|
||
__declspec(dllexport) CALL_DD_TYPE iec104cln_get_dd_struct(unsigned char dev_addr, unsigned char dev_sector, unsigned int dev_inf);
|
||
|
||
|
||
|
||
|
||
////////////////////////////////////////////////////////////
|
||
|
||
|
||
#endif
|