#include <vcl\vcl.h>
#include <vcl/inifiles.hpp>
#include "head_a1.h"
#include "head_b.h"
////////////////////////////////////////////////////////////////////////////////
// 富春江电厂101规约: 2003。4。25 南瑞自控
// 遥信变位用20报文,遥测送实际值,
// 省局:乔司边厂家标志=1 !!!
////////////////////////////////////////////////////////////////////////////////
BYTE zhs_lslslsls_bz=0; // 平时一定要为零!!!!!! <测试YJDrtu的101规约>
#include "main.h"
BYTE bw_sss0[256]={0x10,0x0b,0x01,0x0c,0x16}; // 回答C9 询问报文
BYTE bw_sss1[256]={0xe5}; // 回答
BYTE bw_sss2[256]= // 召唤全数据
{0x68,0x0B,0x0B,0x68,0x73,0x01,0x64,0x01,0x06,0xFF,0xFF,0x00,0x00,0x00,0x14,0xF1,0x16};
BYTE bw_sss3[256]= // 单点控制命令(选择)
{0x68,0x0b,0x0b,0x68,0x53,0x01,0x2d,0x01,0x06,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x16};
BYTE bw_sss4[256]= // 单点控制命令(执行)
{0x68,0x0b,0x0b,0x68,0x53,0x01,0x2d,0x01,0x06,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x16};
BYTE bw_sss5[256]=
{0x10,0x49,0x01,0x4a,0x16};
BYTE bw_sss6[256]=
{0x10,0x40,0x01,0x41,0x16};
BYTE bw_sss7[256]= // 召唤一级数据
{0x10,0x4A,0x01,0x4B,0x16};
// IEC870-5-101 & 103
#define IEC_870_RTU_DOWN_RESET_RTU 0x80000000 // 主站复位RTU
#define IEC_870_RTU_DOWN_ASK_LINK 0x40000000 // 查询链路状态
#define IEC_870_RTU_DOWN_RESET_LINK 0x20000000 // 复位链路状态
#define IEC_870_RTU_DOWN_ASK_DCF_STU 0x10000000 // 询问子站DCF状态 (收到忙帧后)
#define IEC_870_RTU_DOWN_SETPOINT 0x04000000 // 设点
#define IEC_870_RTU_DOWN_YKABORT 0x00800000 // 遥控_撤消
#define IEC_870_RTU_DOWN_YKSEL 0x00400000 // 遥控_选择
#define IEC_870_RTU_DOWN_YKDONE 0x00200000 // 遥控_执行
#define IEC_870_RTU_DOWN_GET_BH_CS 0x00080000 // 取保护定值 <上虞 南自厂101>
#define IEC_870_RTU_DOWN_ASK_DATA1 0x00008000 // 询问I级数据
#define IEC_870_RTU_DOWN_TIME 0x00004000 // 校时
#define IEC_870_RTU_DOWN_ASK_ALL 0x00002000 // 总召唤
//#define IEC_870_RTU_DOWN_READ_SINGLE_YX 0x00001000 // 读单点遥信(金华)
#define IEC_870_RTU_DOWN_TEST 0x00000200 // 通道测试
#define IEC_870_RTU_DOWN_ASK_DL 0x00000100 // 询问电能数据
#define IEC_870_RTU_DOWN_ASK_DATA2 0x00000010 // 询问II级数据
// IEC870-5-101 规约:
struct rtu101_set_kzg_type {
BYTE factory; // 生产产家
// 0-通用 1-YL 2-ABB
BYTE network_setup; // 网络配置
// 0-点对点 1-多点-复用线路型 2-多个点对点 3-多点-星型
BYTE ph_or_bph; // 0-平衡/ 1-非平衡
BYTE link_address_tz; // 链路地址特征
// 0-无 1-一字节 2-二字节 3-结构化 4-非结构化
BYTE link_address; // 链路地址 0-255
BYTE common_address; //ASDU通用地址特征
// 0-一字节 1-二字节
BYTE information_address; // 信息对象地址特征
// 0-一字节 1-二字节 2-三字节 3-结构化 4-非结构化
BYTE transmit_reason; // 传输原因特征
// 0-一字节 1-二字节
BYTE common_address_num[4]; // 通用地址
BYTE save_zh[4]; // 存放站号
BYTE yk_tz1; // 单遥控 双遥控(合-分) 双遥控(分-合)
BYTE yk_tz2; // 选择/执行 仅执行
BYTE yk_tz3; // 无附加定义 短脉冲 长脉冲 持续输出
BYTE time_tag; // 时标标志 (0 - 3字节 1 - 7字节)
BYTE ls_bz[12]; // 保留
};
struct single_dzb_type {
BYTE common_addr0,common_addr1; // 通用地址
BYTE inform_addr0,inform_addr1,inform_addr2; //信息地址
BYTE tz; // 属性
BYTE ls_bz[2]; // 备用
};
struct zhss_iec101_kzg_type {
short xh;
WORD rtuh; // 对应的通道号
// struct iec101_rtu_set_kzg_type iec101_rtu_set_kzg;
DWORD dword_rtu_ddbz;
BYTE recv_tbbz,recv_tbs,recv_cltbbz,recv_js,recv_tol;
BYTE send_js,send_tol;
BYTE send_sjq[256],recv_sjq[256];
BYTE yk_xh,yk_zt;
BYTE yk_common_addr0,yk_inform_addr0;
BYTE send_allow_bz; // 发送允许标志 =1 有效
BYTE ls_oldtime_sec; // 老(上次)秒数 // ..
BYTE send_out_time_js; // 发送超时计数 // ////
BYTE rtu_tj_tol;
BYTE ask_all_bz; // 处于总召唤期间
BYTE no_ack_js; // 发送无回答计数
BYTE iec870_5_fcb_bz; // FCB标志
BYTE iec870_5_fcb_enable; // FCB标志有效标志
BYTE iec870_5_send_bz; // 发送报文标志
DWORD old_dword_rtu_ddbz;
BYTE down_bw_bz; // 0 or 1
BYTE down_bwh; // 0- ...
BYTE *input_buf;
WORD input_buf_tol;
WORD input_buf_ij,input_buf_jj;
WORD read_single_yx_js; // 读单个遥信记数
struct rtu101_set_kzg_type rtu101_set_kzg; // iec101设置参数!
struct single_dzb_type *r101_yc_dzb; // 对照表
struct single_dzb_type *r101_yx_dzb;
struct single_dzb_type *r101_yx_dzb2;
struct single_dzb_type *r101_dn_dzb;
struct single_dzb_type *r101_yk_dzb;
BYTE allow_yx_data_bz; // 接受遥信数据允许标志<金华云山变>
struct zhss_iec101_kzg_type *next_kzg; // 下一记录,无下一记录=NULL
};
struct zhss_iec101_kzg_type *zhss_iec101_kzg;
struct zhss_iec101_kzg_type *zhss_iec101_rtuh_pointer[256]; // 每个通道所指的记录
//BYTE Pls_iec_870_5_send_clcx(BYTE rtuh,BYTE *ls_sss);
//void Pls_ice870_5_cl(BYTE rtuh,BYTE *ls_sss);
//BYTE Pls_find_yc_dzb(BYTE ls_bz,BYTE rtuh,BYTE ls_ty_addr0,BYTE ls_ty_addr1,
// BYTE ls_xx_addr0,BYTE ls_xx_addr1,BYTE ls_xx_addr2,BYTE *ls_czh,
// WORD *ls_xh);
BYTE Pls_ice870_5_jmbz(BYTE ls_bz,BYTE rtuh,BYTE *ls_sss);
float Pls_r32_23_to_float(BYTE *ls_dat); // 短浮点型二字节转换成浮点型数据: NEW-101
// define in zhs12.cpp
#define NZC_WXB_BEGIN 130 // 南自厂WXB系列保护:
#define NZC_WXB_END 159
extern WORD Mls_ncz_wxb_dz_bz[30][50]; // WXB各类保护定值区分数据和控制字, 对应130-159号保护类型!
void ls_bhxx_sjjlclcx(struct bhxxsjjl_type *);
WORD Pls_Get_Bh_Lx(BYTE,BYTE,BYTE);
BYTE test_101_jmbz=0;
BYTE test_101_bwlen=0;
BYTE Pls_ice870_5_jmbz(BYTE ls_bz,BYTE rtuh,BYTE *ls_sss) // ls_bz==0 jm ==1 make
{BYTE ls_ren;
BYTE lsdy0,lsdy1,lsdy2;
ls_ren=0x00;
if(ls_bz==0) {
switch(ls_sss[0]) {
case 0xe5:
ls_ren=0x50;
break;
case 0x10:
if(ls_sss[3]==(BYTE)(ls_sss[1]+ls_sss[2])) ls_ren=0x50;
break;
case 0x68:
lsdy0=(BYTE)(ls_sss[1]+6);
if((lsdy0<=0xff) && (ls_sss[lsdy0-1]==0x16)) {
lsdy2=0x00;
for(lsdy1=4;lsdy1<(BYTE)(lsdy0-2);lsdy1++) {
lsdy2=(BYTE)(lsdy2+ls_sss[lsdy1]);
}
if(lsdy2==ls_sss[lsdy0-2]) ls_ren=0x50;
}
break;
}
}
else {
switch(ls_sss[0]) {
case 0x10:
if(test_101_jmbz!=0) {
test_101_jmbz=0;
ls_sss[1]|=(ls_sss[3] & 0x0f);
}
ls_sss[3]=(BYTE)(ls_sss[1]+ls_sss[2]);
break;
case 0x68:
/* if(ls_pointer1->down_bw_bz==0) {
ls_sss[4]=(BYTE)((ls_sss[4] & 0x0f) | 0x50);
ls_pointer1->down_bw_bz=1;
}
else {
ls_sss[4]=(BYTE)((ls_sss[4] & 0x0f) | 0x70);
ls_pointer1->down_bw_bz=0;
} */
if(test_101_jmbz!=0) {
test_101_jmbz=0;
ls_sss[4]|=(BYTE)(ls_sss[10] & 0x0f);
ls_sss[6]|=(BYTE)(ls_sss[10] & 0x0f);
}
lsdy0=(BYTE)(ls_sss[1]+6);
if((lsdy0<0xf0) && (ls_sss[lsdy0-1]==0x16)) {
lsdy2=0x00;
for(lsdy1=4;lsdy1<(BYTE)(lsdy0-2);lsdy1++) {
lsdy2=(BYTE)(lsdy2+ls_sss[lsdy1]);
}
ls_sss[lsdy0-2]=lsdy2;
}
break;
}
ls_ren=0x50;
}
return(ls
评论1