2024-07-15 10:31:26 +08:00

329 lines
8.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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_dco2 控合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