80
最 新 评 论
80
专 题 分 类
80
最 新 日 志
80
最 新 留 言
80
搜 索
用 户 登 录
友 情 连 接
我 的 好 友
80
博 客 信 息
80


AF50-APFSVG  HMI COM程序 | 2022/1/10 17:09:00

#include "MacroInit.h"

//---------------------------------------------------------------------//保存日志信息

void save_one_log(void) //保存一个记录状态

{

short int *pi,*px; //这里的指针指的是什么?

int i,j,disp_times; //这几个变量表示的是什么?

LocalWord[51995] = 0; //内部使用,不对外开放,LW51995是DOWNPAGE

LocalWord[50294] = 0; //这个地址应该在断电保护区,这里的是什么意思呢?如何定义的


pi = & LocalWord[50300]; //让pi指向LocalWord[50300]的地址空间

px = & LocalWord[1001]; //让px指向LocalWord[1001]的地址空间(记录页面时间的第一个地址)

pi = pi + LocalWord[51996]; //内部使用,不对外开放 LW51996是RECORD_POINT,初值为0

*pi++ = LocalWord[60005]; //先*p=i,然后p再自增1(相当于*p++=i怎么理解) 本地年

*pi++ = LocalWord[60004]; //本地月,把月的值赋给当前的地址

*pi++ = LocalWord[60003]; //本地日

*pi++ = LocalWord[60002]; //本地时

*pi++ = LocalWord[60001]; //本地分

*pi++ = LocalWord[60000]; //本地秒

*pi++ = LocalWord[89]; //LW89是状态值,可以从最下面的读状态可以得到


if(LocalWord[51996]+ 7 < 1400) //最多存放200个数据,LW51996是RECORD_POINT,记录点初值为0

LocalWord[51996] += 0x07; //这里应该是下一行数据,记录完一行数据,然后记录点的值加7

else LocalWord[51996] = 0; //内部使用,不对外开放 ,超过1400就返回初值0

if(LocalWord[51997] < 200) //LW51997是LOG_TIMES,也就是记录次数

LocalWord[51997]++; //记录次数加1,记录完一行数据

}

//---------------------------------------------------------------------//任务返回

void task_return(void) //任务返回

{

LocalWord[3]=1; //返回的时候就把LW3置成1 LW3=0 发送命令

LocalWord[4]=8; //最大模块数量 5

return; //退出等待接收

}

//---------------------------------------------------------------------//启动设备的滤波功能

void send_AF_on_data(void) //启动设备的滤波功能

{

char Pdata[11]; //发送数据存储数组,大小为11

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x10; //功能码,10写命令

Pdata[2] = 0x00; //地址高位

Pdata[3] = 0x01; //地址低位

Pdata[4] = 0x00; //数据量H

Pdata[5] = 0x01; //数据量L

Pdata[6] = 0x02; //数据长度,按字节算

Pdata[7] = 0xaa; //具体数据,启动滤波的数据,下位机接收之后开始启动

Pdata[8] = 0xaa;

crc = CRC(Pdata,9);

Pdata[9] = (char)crc; //CRC低位

Pdata[10] = (char)(crc>>8); //CRC高位

PUTCHARS(0,Pdata,11); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------停止设备的滤波功能

void send_AF_off_data(void) //停止设备的滤波功能

{

char Pdata[11]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x10;

Pdata[2] = 0x00;

Pdata[3] = 0x02;

Pdata[4] = 0x00;

Pdata[5] = 0x01;

Pdata[6] = 0x02;

Pdata[7] = 0x00;

Pdata[8] = 0x00; //停机的具体数据

crc = CRC(Pdata,9);

Pdata[9] = (char)crc;

Pdata[10] = (char)(crc>>8);

PUTCHARS(0,Pdata,11); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------清除故障

void send_reset_err_data(void) //清除故障

{

char Pdata[11]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x10;

Pdata[2] = 0x00;

Pdata[3] = 0x04;

Pdata[4] = 0x00;

Pdata[5] = 0x01;

Pdata[6] = 0x02;

Pdata[7] = 0x00;

Pdata[8] = 0x00;

crc = CRC(Pdata,9); //计算出16位的CRC校验值

Pdata[9] = (char)crc;

Pdata[10] = (char)(crc>>8);

PUTCHARS(0,Pdata,11); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------设置滤波器参数

void send_set_AF_data(void) //设置滤波器参数(功能设置部分修改完成,9月4号修改读指令部分)

{

char Pdata[47]; //发送数据存储数组

char temp;

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x10; //写命令

Pdata[2] = 0x00; //地址H

Pdata[3] = 0x03; //地址L

Pdata[4] = 0x00; //数据量H

Pdata[5] = 0x08; //数据量L

Pdata[6] = 0x26; //数据字节数

temp = 0;

if(LocalBit[1] == 1) //接触器状态位 (新添加进来)

temp += 1;

Pdata[7] = temp;

temp = 0;

if(LocalBit[37] == 1) //C相互感器反接 (新添加进来)

temp += 0x80;

if(LocalBit[36] == 1) //B相互感器反接 (新添加进来)

temp += 0x40;

if(LocalBit[35] == 1) //A相互感器反接 (新添加进来)

temp += 0x20;

if(LocalBit[34] == 1) //互感器位于源侧

temp += 0x10;

if(LocalBit[30] == 1) //谐波过滤位

temp += 8;

if(LocalBit[31] == 1) //相位平衡位

temp += 4;

if(LocalBit[32] == 1) //无功补偿位

temp += 2;

if(LocalBit[33] == 1) //功能优先顺序位

temp += 1;

Pdata[8] = temp; //应该是按照十六进制相加 10000+1000+100+10+1=11111(然后第七位储存这个数据)

temp = 0;

if(LocalBit[40] == 1) //选择几次谐波 3次

temp += 1;

if(LocalBit[41] == 1) //5次

temp += 2;

if(LocalBit[42] == 1) //7次

temp += 4;

if(LocalBit[43] == 1) //9次

temp += 8;

if(LocalBit[44] == 1) //11次

temp += 0x10;

if(LocalBit[45] == 1) //13次

temp += 0x20;

if(LocalBit[46] == 1) //15次

temp += 0x40;

if(LocalBit[47] == 1) //17次

temp += 0x80;

Pdata[16] = temp;

temp = 0;

if(LocalBit[48] == 1) //19次

temp += 1;

if(LocalBit[49] == 1) //21次

temp += 2;

if(LocalBit[10] == 1) //23次

temp += 4;

if(LocalBit[11] == 1) //25次

temp += 8;

if(LocalBit[56] == 1) //27次 位需要修改

temp += 0x10;

if(LocalBit[57] == 1) //29次

temp += 0x20;

if(LocalBit[58] == 1) //31次

temp += 0x40;

if(LocalBit[59] == 1) //33次

temp += 0x80;

Pdata[15] = temp; //char类型占一个字节,先取高8位,后取低8位

temp = 0;

if(LocalBit[60] == 1) //35次

temp += 1;

if(LocalBit[61] == 1) //37次

temp += 2;

if(LocalBit[62] == 1) //39次

temp += 4;

if(LocalBit[63] == 1) //41次

temp += 8;

if(LocalBit[64] == 1) //43次

temp += 0x10;

if(LocalBit[65] == 1) //45次

temp += 0x20;

if(LocalBit[66] == 1) //47次

temp += 0x40;

if(LocalBit[67] == 1) //49次

temp += 0x80;

Pdata[14] = temp;

temp = 0;

if(LocalBit[68] == 1) //2次

temp += 1;

if(LocalBit[69] == 1) //4次

temp += 2;

if(LocalBit[70] == 1) //6次

temp += 4;

if(LocalBit[71] == 1) //8次

temp += 8;

if(LocalBit[72] == 1) //10次

temp += 0x10;

if(LocalBit[73] == 1) //12次

temp += 0x20;

if(LocalBit[74] == 1) //14次

temp += 0x40;

if(LocalBit[75] == 1) //16次

temp += 0x80;

Pdata[13] = temp;

temp = 0;

if(LocalBit[76] == 1) //18次

temp += 1;

if(LocalBit[77] == 1) //20次

temp += 2;

if(LocalBit[78] == 1) //22次

temp += 4;

if(LocalBit[79] == 1) //24次

temp += 8;

if(LocalBit[80] == 1) //26次

temp += 0x10;

if(LocalBit[81] == 1) //28次

temp += 0x20;

if(LocalBit[82] == 1) //30次

temp += 0x40;

if(LocalBit[83] == 1) //32次

temp += 0x80;

Pdata[12] = temp;

temp = 0;

if(LocalBit[84] == 1) //34次

temp += 1;

if(LocalBit[85] == 1) //36次

temp += 2;

if(LocalBit[86] == 1) //38次

temp += 4;

if(LocalBit[87] == 1) //40次

temp += 8;

if(LocalBit[88] == 1) //42次

temp += 0x10;

if(LocalBit[89] == 1) //44次

temp += 0x20;

if(LocalBit[90] == 1) //46次

temp += 0x40;

if(LocalBit[91] == 1) //48次

temp += 0x80;

Pdata[11] = temp;

temp = 0;

if(LocalBit[92] == 1) //50次

temp += 1;

Pdata[10] = temp;

Pdata[9] = 0; //为方便调整,将位数Pdata(9-16)进行前后调整--19.4.12

Pdata[17] = (char)(LocalWord[50]>>8); //互感器变比,初值为100(以下十几行均代表初值)

Pdata[18] = (char)LocalWord[50]; //这里是取地址的高字节和低字节。

//Pdata[19] = (char)(LocalWord[51809]); 51809居然是无功相位

Pdata[20] = (char)LocalWord[53]; //并行模块,1

Pdata[21] = (char)(LocalWord[55]>>8); //直流母线电压,DC 700V

Pdata[22] = (char)LocalWord[55];

Pdata[23] = (char)(LocalWord[58]>>8); //最大电流,50

Pdata[24] = (char)LocalWord[58]; //这里是取地址的高字节和低字节

Pdata[25] = (char)(LocalWord[63]>>8); //电网缺相点

Pdata[26] = (char)LocalWord[63];

Pdata[27] = (char)(LocalWord[64]>>8); //电网欠压点

Pdata[28] = (char)LocalWord[64];

Pdata[45] = (char)(LocalWord[65]>>8); //电网过压点

Pdata[46] = (char)LocalWord[65];

Pdata[29] = (char)(LocalWord[61]>>8); //电压过频点

Pdata[30] = (char)LocalWord[61];

Pdata[31] = (char)(LocalWord[62]>>8); //电压欠频点

Pdata[32] = (char)LocalWord[62];

Pdata[33] = 0; //无功幅值,10 (修改为运行模式)

Pdata[34] = (char)LocalWord[500]; //运行模式 0-正常运行 1-主动发波 2-测试模式

Pdata[35] = 0; //3次幅值,10

Pdata[36] = (char)LocalWord[501];

Pdata[37] = 0; //5次幅值,10

Pdata[38] = (char)LocalWord[502];

/*

Pdata[39] = 0; //无功相位,50 (A相互感器方向)

Pdata[40] = (char)LocalWord[503];

Pdata[41] = 0; //3次相位,50 (B相互感器方向)

Pdata[42] = (char)LocalWord[504];

Pdata[43] = 0; //5次相位,50 (C相互感器方向)

Pdata[44] = (char)LocalWord[505];

*/

//temp = (char)LocalWord[500]<<4; //temp=1010

//temp = temp + (char)LocalWord[501]; //3次福值,10

//Pdata[33] = temp; //temp=1010

//Pdata[34] = (char)LocalWord[502]; //5次福值,10

//temp = (char)LocalWord[503]<<4; //无功相位,50

//temp = temp + (char)LocalWord[504]; //3次相位,50

//Pdata[35] = temp; //temp=1010

//Pdata[36] = (char)LocalWord[505]; //5次相位,50

crc = CRC(Pdata,47);

Pdata[47] = (char)crc;

Pdata[48] = (char)(crc>>8);

PUTCHARS(0,Pdata,49); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读设备的电压和电流功能

void send_read_AF_vi_data(void) //读设备的电压和电流功能(这里不用动,具体可以参考协议)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x01;

Pdata[4] = 0x00;

Pdata[5] = 0x11;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读设备负载功率数据

void send_read_AF_power_load_data(void) //读设备的POWER LOAD功能(负载功率)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x02;

Pdata[4] = 0x00;

Pdata[5] = 0x0d;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读设备主电源功率数据

void send_read_AF_power_mains_data(void) //读设备的POWER MAINS功能(主电源功率)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x03;

Pdata[4] = 0x00;

Pdata[5] = 0x0d;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读负载侧A相电流谐波含量

void send_read_AF_THDi_LOAD_L1_data(void) //读设备(负载电流谐波含量A相1-50次)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x04;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读负载侧B相电流谐波含量

void send_read_AF_THDi_LOAD_L2_data(void) //读负载的电流谐波含量B相(1-50次)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x05;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读负载侧C相电流谐波含量

void send_read_AF_THDi_LOAD_L3_data(void) //读负载的电流谐波含量C相(1-50次)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x06;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读负电源A相电流谐波含量

void send_read_AF_THDi_MAIN_L1_data(void) //读主电源电流的谐波含量A相(1-50)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x07;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读负电源B相电流谐波含量

void send_read_AF_THDi_MAIN_L2_data(void) //读主电源电流的谐波含量B相(1-50)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x08;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读负电源B相电流谐波含量

void send_read_AF_THDi_MAIN_L3_data(void) //读主电源电流的谐波含量C相(1-50)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x09;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读总谐波含量

void send_read_AF_THD_TOTAL_data(void) //总的谐波含量 (负载和电网THDi和电网THDu)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x0a;

Pdata[4] = 0x00;

Pdata[5] = 0x14;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读设备的参数

void send_read_AF_set_data(void) //读设备的参数

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x0b;

Pdata[4] = 0x00;

Pdata[5] = 0x08;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读设备的状态

void send_read_AF_status_data(void) //读设备状态

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x0c;

Pdata[4] = 0x00;

Pdata[5] = 0x01;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读主电源电压的谐波含量A相

void send_read_AF_THDu_MAINS_L1_data(void) //读主电源电压的谐波含量A相(1-50)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x0d;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读主电源电压的谐波含量B相

void send_read_AF_THDu_MAINS_L2_data(void) //读主电源电压的谐波含量B相(1-50)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x0e;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//--------------------------------------------------------------------读主电源电压的谐波含量C相

void send_read_AF_THDu_MAINS_L3_data(void) //读主电源电压的谐波含量C相(1-50)

{

char Pdata[8]; //发送数据存储数组

short crc;

Pdata[0] = LocalWord[310];

Pdata[1] = 0x03;

Pdata[2] = 0x00;

Pdata[3] = 0x0f;

Pdata[4] = 0x00;

Pdata[5] = 0x0e;

crc = CRC(Pdata,6);

Pdata[6] = (char)crc;

Pdata[7] = (char)(crc>>8);

PUTCHARS(0,Pdata,8); //发送函数,发送数据到串口

task_return();

}

//---------------------------------------------------------------------主程序

void Macro_main(IN *p)

{

MarcoInit

//ToDo

char Gdata[60]; //接收数据存储数组,数组大小为50

short temp=0,temp0,temp1,temp2,crc;

int bufferlen,com1_bufferlen,PortID;

char i,flag_data_right;

PortID=0;

if(LocalWord[3]==0) //LW3等于0,发送命令 LW3等于零的时候是不返回状态

{

CLEARBUFFER(PortID); //清除串口缓冲区数据,该函数仅适用于自由口通讯

DELAY(50); //等待

if( LocalWord[6] == 0) //初始化的时候有定义

{

if(LocalWord[310] >= LocalWord[53]) //模块数,看不懂,LW52是参数里面的控制算法选项 LW53是参数里面的模块数机号大于等于模块数??

{

if(LocalWord[40001] == 0xaa) //aa和开机有关

{

LocalWord[2] = 0x01; //LW2是通讯协议中的功能选择,启动命令

LocalBit[0] = 0x01; //首页指示灯开关 ON

LocalWord[40001] = 0;

}

else if(LocalWord[40002] == 0xaa) //1010 1010

{

LocalWord[2] = 0x02; //停止命令

LocalBit[0] = 0x00; //OFF 状态 关机

LocalWord[40002] = 0;

}

else if(LocalWord[322]>0) //和开机关机有关,保持现有的状态

{ //点击启动的时候,LW322被赋值0x01,关闭的时候被赋值0x02,不懂? read_AF_status_deal提到

LocalWord[2] = LocalWord[322];

LocalWord[322] = 0; //开机或者停机之后LW322被清零

} //只有deal中的LW322被赋值0x03的时候是大于零的;

else //LW322等于0; 上面被赋值0,继续执行这一步;

{

LocalWord[2] = LocalWord[23]; //不懂? LW23的值等于LW2的值;

}

LocalWord[310] = 0x01; //选择第一台机

}

else //(与LW310=0一组) 机号小于模块数

{

LocalWord[310] ++;

}

}

if(LocalWord[2]==1) //启动设备

{

send_AF_on_data();

}

else if(LocalWord[2]==2) //停止设备

{

send_AF_off_data();

}

else if(LocalWord[2]==3) //参数设置

{

send_set_AF_data();

}

else if(LocalWord[2]==17) //清除故障

{

send_reset_err_data();

}

else if(LocalWord[2]==4) //读设备的电压电流

{

send_read_AF_vi_data();

}

else if(LocalWord[2]==5) //读设备的POWER_LOAD

{

send_read_AF_power_load_data();

}

else if(LocalWord[2]==6) //读设备的POWER_MAINS

{

send_read_AF_power_mains_data();

}

else if(LocalWord[2]==7) //读设备的THD_LOAD_L1负载电流谐波含量L1(1-50)

{

send_read_AF_THDi_LOAD_L1_data();

}

else if(LocalWord[2]==8) //读设备的THD_LOAD_L2负载电流谐波含量L2(1-50)

{

send_read_AF_THDi_LOAD_L2_data();

}

else if(LocalWord[2]==9) //读设备的THD_LOAD_L3负载电流谐波含量L3(1-50)

{

send_read_AF_THDi_LOAD_L3_data();

}

else if(LocalWord[2]==10) //读设备的THD_MAINS_L1 主电源电压谐波含量1-50

{

send_read_AF_THDu_MAINS_L1_data();

}

else if(LocalWord[2]==11) //读设备的THD_MAINS_L2 主电源电压谐波含量1-50

{

send_read_AF_THDu_MAINS_L2_data();

}

else if(LocalWord[2]==12) //读设备的THD_MAINS_L3 主电源电压谐波含量1-50

{

send_read_AF_THDu_MAINS_L3_data();

}

else if(LocalWord[2]==13) //读设备的THD_TOTAL

{

send_read_AF_THD_TOTAL_data();

}

else if(LocalWord[2]==14) //读设备的设置参数

{

send_read_AF_set_data();

}

else if(LocalWord[2]==15) //读设备的状态

{

send_read_AF_status_data();

}

else if(LocalWord[2]==18) //读主电源电流的谐波含量A相(1-50) //原本设置LW25到27,但是读命令不显示,最终改成18到20

{

send_read_AF_THDi_MAIN_L1_data();

}

else if(LocalWord[2]==19) //读主电源电流的谐波含量B相(1-50)

{

send_read_AF_THDi_MAIN_L2_data();

}

else if(LocalWord[2]==20) //读主电源电流的谐波含量C相(1-50)

{

send_read_AF_THDi_MAIN_L3_data();

}

else if(LocalWord[2]==16)

{

}

}

//---------------------------------------------------------------------接收数据

else //LW3不等于0,接收数据

{

bufferlen = GETBUFFERLENGTH(PortID); //从通信口获得缓冲区数据长度

if(bufferlen == 0) //得到的长度等于0

{

LocalWord[4]--; //初值不是为0的么?

if(LocalWord[4]==0)

{

LocalWord[3]= 0;

LocalWord[6]++; //可能和等待有关

if(LocalWord[6]>2) //前两次的时候不执行这条语句

{

LocalWord[0] = LocalWord[310]; //LW0是主界面的模块号

LocalWord[7] = 0x19;

LocalWord[23]=0x10; //即16,空操作

LocalWord[6]=0;

}

}

}

else if(bufferlen == LocalWord[5] ) //LW5可能代表缓冲区长度

{

if(bufferlen>60) //接收字节数大于60(与DSP侧设置保持一致,否则数据丢失),错误命令,清除串口内BUFFER;

{

CLEARBUFFER(PortID); //清除串口缓冲区数据,该函数仅适用于自由口通讯

return;

}

LocalWord[6] = 0; //

GETCHARS(PortID, Gdata); //从通信口获得数据

LocalWord[321]= Gdata[0]; //LW321以及下面这些可能是数据缓冲区,收到以后要先筛一遍

LocalWord[311]= Gdata[1]; //不能直接送到相应位,先放在缓冲区(个人猜测)

LocalWord[312]= Gdata[2];

LocalWord[313]= Gdata[3];

LocalWord[314]= Gdata[4];

LocalWord[315]= Gdata[5];

LocalWord[316]= Gdata[6];

LocalWord[317]= Gdata[7];

LocalWord[318]= Gdata[8];

LocalWord[319]= Gdata[9];

LocalWord[320]= Gdata[10];

if(Gdata[1] == 0x10) //应该是功能码,这里是写命令返回的数据(猜测)

{

if(LocalBit[0] == 0x00) //指示灯位关

{

LocalWord[0] = 0x00;

LocalWord[7] = 0x02; //代表启动或停止,02停止,01启动

} //因为02就是0000 0010,最后一位为0

else //01最后一位为1

{

LocalWord[0] = 0x00;

LocalWord[7] = 0x01; //显示模块1

}

if((LocalWord[2]==0x01)&&(Gdata[3] == 0x01)) //启动设备如果选择启动,即LW2位,且接收到的数据是相同的

{

LocalWord[0] = 0x00;

LocalWord[7] = 0x01; //启动

LocalWord[350]=0x00; //

LocalWord[89] = 0x00; //LW89是记录页面中的状态

LocalWord[40051] = 1; //初始化定义中为0

if(Gdata[0]==0x01) //机号是1,才会保存记录

{

save_one_log(); //保存到记录中

}

}

else if((LocalWord[2]==0x02)&&(Gdata[3] == 0x02)) //停止设备

{

LocalWord[0] = 0x00;

LocalWord[7] = 0x02; //停止

LocalWord[350]=0x00;

LocalWord[89] = 0x01;

LocalWord[40051] = 0;

if(Gdata[0]==0x01)

{

save_one_log();

}

}

else if((LocalWord[2]==0x03)&&(Gdata[3] == 0x03)) //设置参数,空操作是什么意思?

{

}

else if((LocalWord[2]==0x11)&&(Gdata[3] == 0x04)) //清除错误

{

}

}

else if(Gdata[1] == 0x03) //这里应该是读命令返回的数据

{

if(LocalBit[0] == 0x00) //LB0是指示灯

{

LocalWord[0] = 0x00;

LocalWord[7] = 0x02; //停机

}

else if(LocalBit[0] == 0x01)

{

LocalWord[0] = 0x00;

LocalWord[7] = 0x01; //启动

}

if((LocalWord[2]==0x04)&&(Gdata[3] == 0x24)) //读电压电流 //LW2是调用宏命令用的吧(猜测),0x24才是接收到的位数,懂了

{

if(Gdata[22] == 0x01) //返回数据第22位是0x01,这里差不多知道啥意思了,频率

{

temp = Gdata[4]; //00 DC L1电压 (电网电压Ua)

LocalWord[90] = (temp<<8)|(Gdata[5]); //或运算

LocalWord[40003] = LocalWord[90];

LocalWord[40006] = LocalWord[90];

LocalWord[40009] = LocalWord[90];

temp = Gdata[6]; //00 DC L2电压 (电网电压Ub)

LocalWord[93] = (temp<<8)|(Gdata[7]); //或运算

LocalWord[40004] = LocalWord[93];

LocalWord[40007] = LocalWord[93];

LocalWord[40010] = LocalWord[93];

temp = Gdata[8]; //00 DC L3电压 (电网电压Uc)

LocalWord[96] = (temp<<8)|(Gdata[9]); //或运算

LocalWord[40005] = LocalWord[96];

LocalWord[40008] = LocalWord[96];

LocalWord[40011] = LocalWord[96];

temp = Gdata[22]; //频率 01 F4 (每次接收一个字节)

LocalWord[99] = (temp<<8)|(Gdata[23]); //通过左移得到高八位数据,异或之后得//到低8位数据,然后获得一个字

temp = Gdata[10]; //LOAD端 L1电流(00 64)(负载电流Ia)

LocalWord[91] = (temp<<8)|(Gdata[11]); //数值显示电流电压

LocalWord[40012] = LocalWord[91];

temp = Gdata[16]; //MAINS端 L1电流 (电网电流Ia)

LocalWord[92] = (temp<<8)|(Gdata[17]); //数值显示电流电压

LocalWord[40015] = LocalWord[92];

temp = Gdata[24]; //上电压(375)01 77

LocalWord[900] = (temp<<8)|(Gdata[25]);

temp = Gdata[12]; //LOAD端 L2电流(00 64)(负载电流Ib)

LocalWord[94] = (temp<<8)|(Gdata[13]);

LocalWord[40013] = LocalWord[94];

temp = Gdata[18]; //MAINS端 L2电流(电网电流Ib)

LocalWord[95] = (temp<<8)|(Gdata[19]);

LocalWord[40016] = LocalWord[95];

temp = Gdata[14]; //LOAD端 L3电流(00 64) (负载电流Ic)

LocalWord[97] = (temp<<8)|(Gdata[15]);

LocalWord[40014] = LocalWord[97];

temp = Gdata[20]; //MAINS端 L3电流 (电网电流Ic)

LocalWord[98] = (temp<<8)|(Gdata[21]);

LocalWord[40017] = LocalWord[98];

temp = Gdata[26]; //下电压(350)01 5E

LocalWord[901] = (temp<<8)|(Gdata[27]);

temp = Gdata[28]; //总电压(700)02 BC

LocalWord[902] = (temp<<8)|(Gdata[29]);

if((Gdata[0]>0) && (Gdata[0]<11))

{

i = Gdata[0];

temp = Gdata[30];

temp = (temp<<8)|(Gdata[31]); //本机输出A相 补偿电流

LocalWord[910+i] = temp;

temp = Gdata[32];

temp = (temp<<8)|(Gdata[33]); //本机输出B相 补偿电流

LocalWord[920+i] = temp;

temp = Gdata[34];

temp = (temp<<8)|(Gdata[35]); //本机输出C相 补偿电流

LocalWord[930+i] = temp;

}

temp0 = 0;

temp1 = 0;

temp2 = 0;

for(i = 0;i<LocalWord[53];i++)

{

temp0 = temp0 + LocalWord[911+i];

temp1 = temp1 + LocalWord[921+i];

temp2 = temp2 + LocalWord[931+i];

}

LocalWord[903] = temp0; //并行模块A相总补偿电流

LocalWord[40018] = LocalWord[903];

LocalWord[904] = temp1; //并行模块A相总补偿电流

LocalWord[40019] = LocalWord[904];

LocalWord[905] = temp2; //并行模块A相总补偿电流

LocalWord[40020] = LocalWord[905];

temp = Gdata[36]; //系统IGBT温度 00 1e (新加入)

LocalWord[906] = (temp<<8)|(Gdata[37]);

LocalWord[906] = LocalWord[906] ;

LocalWord[40100] = LocalWord[906];

temp = Gdata[38];

LocalWord[1909] = temp; //相序状态判断

temp = Gdata[40];

LocalWord[1910] = temp; //电压状态判断,缺相,欠压,过压

temp = Gdata[41];

LocalWord[1911] = temp; //继电器状态 0=继电器吸合 1=继电器切除

temp = Gdata[42];

LocalWord[1912] = temp; //故障驱动模块编号

temp = Gdata[39]; //DSP reg.err_l

LocalWord[1913] = temp ; //故障码

if (temp==16) //16 = 驱动故障

{

LocalWord[1700]=16;

/*

LocalWord[1800]=BCD2BIN(LocalWord[60005]);

LocalWord[1801]=BCD2BIN(LocalWord[60004]);

LocalWord[1802]=BCD2BIN(LocalWord[60003]);

LocalWord[1803]=BCD2BIN(LocalWord[60002]);

LocalWord[1804]=BCD2BIN(LocalWord[60001]);

LocalWord[1805]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==17) //17 = 驱动模组故障

{

LocalWord[1701]=17;

/*

LocalWord[1806]=BCD2BIN(LocalWord[60005]);

LocalWord[1807]=BCD2BIN(LocalWord[60004]);

LocalWord[1808]=BCD2BIN(LocalWord[60003]);

LocalWord[1809]=BCD2BIN(LocalWord[60002]);

LocalWord[1810]=BCD2BIN(LocalWord[60001]);

LocalWord[1811]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==4) //4 = 直流母线过压750 不停机

{

LocalWord[1702]=4;

/*

LocalWord[1812]=BCD2BIN(LocalWord[60005]);

LocalWord[1813]=BCD2BIN(LocalWord[60004]);

LocalWord[1814]=BCD2BIN(LocalWord[60003]);

LocalWord[1815]=BCD2BIN(LocalWord[60002]);

LocalWord[1816]=BCD2BIN(LocalWord[60001]);

LocalWord[1817]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==5) //5 = 直流母线过压偏差 停机

{

LocalWord[1702]=5;

/*

LocalWord[1812]=BCD2BIN(LocalWord[60005]);

LocalWord[1813]=BCD2BIN(LocalWord[60004]);

LocalWord[1814]=BCD2BIN(LocalWord[60003]);

LocalWord[1815]=BCD2BIN(LocalWord[60002]);

LocalWord[1816]=BCD2BIN(LocalWord[60001]);

LocalWord[1817]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==8) //8 = 补偿电流有效值大于160A 停机

{

LocalWord[1703]=8;

/*

LocalWord[1824]=BCD2BIN(LocalWord[60005]);

LocalWord[1825]=BCD2BIN(LocalWord[60004]);

LocalWord[1826]=BCD2BIN(LocalWord[60003]);

LocalWord[1827]=BCD2BIN(LocalWord[60002]);

LocalWord[1828]=BCD2BIN(LocalWord[60001]);

LocalWord[1829]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==32) //32 = 母线电压偏差超过50V 停机

{

LocalWord[1704]=32;

/*

LocalWord[1818]=BCD2BIN(LocalWord[60005]);

LocalWord[1819]=BCD2BIN(LocalWord[60004]);

LocalWord[1820]=BCD2BIN(LocalWord[60003]);

LocalWord[1821]=BCD2BIN(LocalWord[60002]);

LocalWord[1822]=BCD2BIN(LocalWord[60001]);

LocalWord[1823]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==128) //8 = 补偿电流瞬时值大于165A 停机

{

LocalWord[1705]=128;

/*

LocalWord[1830]=BCD2BIN(LocalWord[60005]);

LocalWord[1831]=BCD2BIN(LocalWord[60004]);

LocalWord[1832]=BCD2BIN(LocalWord[60003]);

LocalWord[1833]=BCD2BIN(LocalWord[60002]);

LocalWord[1834]=BCD2BIN(LocalWord[60001]);

LocalWord[1835]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==129) //8 = 补偿电流瞬时值大于210A 停机

{

LocalWord[1705]=129;

/*

LocalWord[1830]=BCD2BIN(LocalWord[60005]);

LocalWord[1831]=BCD2BIN(LocalWord[60004]);

LocalWord[1832]=BCD2BIN(LocalWord[60003]);

LocalWord[1833]=BCD2BIN(LocalWord[60002]);

LocalWord[1834]=BCD2BIN(LocalWord[60001]);

LocalWord[1835]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==2) //2 = IGBT 过温

{

LocalWord[1706]=2;

/*

LocalWord[1866]=BCD2BIN(LocalWord[60005]);

LocalWord[1867]=BCD2BIN(LocalWord[60004]);

LocalWord[1868]=BCD2BIN(LocalWord[60003]);

LocalWord[1869]=BCD2BIN(LocalWord[60002]);

LocalWord[1870]=BCD2BIN(LocalWord[60001]);

LocalWord[1871]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==65) //65 = 负序

{

LocalWord[1707]=65;

/*

LocalWord[1860]=BCD2BIN(LocalWord[60005]);

LocalWord[1861]=BCD2BIN(LocalWord[60004]);

LocalWord[1862]=BCD2BIN(LocalWord[60003]);

LocalWord[1863]=BCD2BIN(LocalWord[60002]);

LocalWord[1864]=BCD2BIN(LocalWord[60001]);

LocalWord[1865]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==66) //66 =相序未检出

{

LocalWord[1708]=66;

/*

LocalWord[1854]=BCD2BIN(LocalWord[60005]);

LocalWord[1855]=BCD2BIN(LocalWord[60004]);

LocalWord[1856]=BCD2BIN(LocalWord[60003]);

LocalWord[1857]=BCD2BIN(LocalWord[60002]);

LocalWord[1858]=BCD2BIN(LocalWord[60001]);

LocalWord[1859]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==96) //96 = 缺相

{

LocalWord[1709]=96;

/*

LocalWord[1836]=BCD2BIN(LocalWord[60005]);

LocalWord[1837]=BCD2BIN(LocalWord[60004]);

LocalWord[1838]=BCD2BIN(LocalWord[60003]);

LocalWord[1839]=BCD2BIN(LocalWord[60002]);

LocalWord[1840]=BCD2BIN(LocalWord[60001]);

LocalWord[1841]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==97) //96 = 欠压

{

LocalWord[1710]=97;

/*

LocalWord[1842]=BCD2BIN(LocalWord[60005]);

LocalWord[1843]=BCD2BIN(LocalWord[60004]);

LocalWord[1844]=BCD2BIN(LocalWord[60003]);

LocalWord[1845]=BCD2BIN(LocalWord[60002]);

LocalWord[1846]=BCD2BIN(LocalWord[60001]);

LocalWord[1847]=BCD2BIN(LocalWord[60000]);

*/

}

else if (temp==98) //98 = 过压

{

LocalWord[1711]=98;

/*

LocalWord[1848]=BCD2BIN(LocalWord[60005]);

LocalWord[1849]=BCD2BIN(LocalWord[60004]);

LocalWord[1850]=BCD2BIN(LocalWord[60003]);

LocalWord[1851]=BCD2BIN(LocalWord[60002]);

LocalWord[1852]=BCD2BIN(LocalWord[60001]);

LocalWord[1853]=BCD2BIN(LocalWord[60000]);

*/

}

else

{

;

}

}

}

else if((LocalWord[2]==0x05)&&(Gdata[3] == 0x1a)) //读POWER_LOAD负载侧

{

temp = Gdata[4]; //L1的P(A相有功)

LocalWord[110] = (temp<<8)|(Gdata[5]);

LocalWord[40021] = LocalWord[110];

temp = Gdata[6]; //L2的P(B相有功)

LocalWord[114] = (temp<<8)|(Gdata[7]);

LocalWord[40022] = LocalWord[114];

temp = Gdata[8]; //L3的P(C相有功)

LocalWord[118] = (temp<<8)|(Gdata[9]);

LocalWord[40023] = LocalWord[118];

temp = Gdata[10]; //L1的Q(A相无功)

LocalWord[111] = (temp<<8)|(Gdata[11]);

LocalWord[40027] = LocalWord[111];

temp = Gdata[12]; //L2的Q(B相无功)

LocalWord[115] = (temp<<8)|(Gdata[13]);

LocalWord[40028] = LocalWord[115];

temp = Gdata[14]; //L3的Q(C相无功)

LocalWord[119] = (temp<<8)|(Gdata[15]);

LocalWord[40029] = LocalWord[119];

temp = Gdata[16]; //L1的S(A相视在)

LocalWord[112] = (temp<<8)|(Gdata[17]);

LocalWord[40033] = LocalWord[112];

temp = Gdata[18]; //L2的S(B相视在)

LocalWord[116] = (temp<<8)|(Gdata[19]);

LocalWord[40034] = LocalWord[116];

temp = Gdata[20]; //L3的S(C相视在)

LocalWord[100] = (temp<<8)|(Gdata[21]);

LocalWord[40035] = LocalWord[100];

temp = Gdata[22]; //L1的PF(A相功因)

LocalWord[113] = (temp<<8)|(Gdata[23]);

if(LocalWord[113]>100) LocalWord[113] = 0;

LocalWord[40039] = LocalWord[113];

temp = Gdata[24]; //L2的PF(B相功因)

LocalWord[117] = (temp<<8)|(Gdata[25]);

if(LocalWord[117]>100) LocalWord[117] = 0;

LocalWord[40040] = LocalWord[117];

temp = Gdata[26]; //L3的PF(C相功因)

LocalWord[101] = (temp<<8)|(Gdata[27]);

if(LocalWord[101]>100) LocalWord[101] = 0;

LocalWord[40041] = LocalWord[101];

}

else if((LocalWord[2]==0x06)&&(Gdata[3] == 0x1a)) //读POWER_MAINS 电源侧

{

temp = Gdata[4]; //L1的P(A相有功)

LocalWord[120] = (temp<<8)|(Gdata[5]);

LocalWord[40024] = LocalWord[120];

temp = Gdata[6]; //L2的P(B相有功)

LocalWord[124] = (temp<<8)|(Gdata[7]);

LocalWord[40025] = LocalWord[124];

temp = Gdata[8]; //L3的P(C相有功)

LocalWord[128] = (temp<<8)|(Gdata[9]);

LocalWord[40026] = LocalWord[128];

temp = Gdata[10]; //L1的Q(A相无功)

LocalWord[121] = (temp<<8)|(Gdata[11]);

LocalWord[40030] = LocalWord[121];

temp = Gdata[12]; //L2的Q(B相无功)

LocalWord[125] = (temp<<8)|(Gdata[13]);

LocalWord[40031] = LocalWord[125];

temp = Gdata[14]; //L3的Q(C相无功)

LocalWord[129] = (temp<<8)|(Gdata[15]);

LocalWord[40032] = LocalWord[129];

temp = Gdata[16]; //L1的S(A相视在)

LocalWord[122] = (temp<<8)|(Gdata[17]);

LocalWord[40036] = LocalWord[122];

temp = Gdata[18]; //L2的S(B相视在)

LocalWord[126] = (temp<<8)|(Gdata[19]);

LocalWord[40037] = LocalWord[126];

temp = Gdata[20]; //L3的S(C相视在)

LocalWord[105] = (temp<<8)|(Gdata[21]);

LocalWord[40038] = LocalWord[105];

temp = Gdata[22]; //L1的PF(功率因数) 00 00 (A相)

LocalWord[123] = (temp<<8)|(Gdata[23]);

if(LocalWord[123]>100) LocalWord[123] = 0;

// if(LocalWord[1911]==0) LocalWord[123] = 95;

LocalWord[40042] = LocalWord[123];

temp = Gdata[24]; //L2的PF(功率因数) 00 00 (B相)

LocalWord[127] = (temp<<8)|(Gdata[25]);

if(LocalWord[127]>100) LocalWord[127] = 0;

// if(LocalWord[1911]==0) LocalWord[127] = 95;

LocalWord[40043] = LocalWord[127];

temp = Gdata[26]; //L3的PF(功率因数) 00 00 (C相)

LocalWord[106] = (temp<<8)|(Gdata[27]);

if(LocalWord[106]>100) LocalWord[106] = 0;

// if(LocalWord[1911]==0) LocalWord[106] = 95;

LocalWord[40044] = LocalWord[106];

}

else if((LocalWord[2]==0x07)&&(Gdata[3] == 0x34)) //读THD_LOAD_L1 (负载电流谐波含量1-50次 A相)

{

temp = Gdata[4]; //THD LOAD L1占比: 1次占100% 00 64

LocalWord[600] = (temp<<8)|(Gdata[5]);

temp = Gdata[6]; //3次占80% 00 50

LocalWord[601] = (temp<<8)|(Gdata[7]);

temp = Gdata[8]; //5次占75% 00 4b

LocalWord[602] = (temp<<8)|(Gdata[9]);

temp = Gdata[10]; //7次占70% 00 46

LocalWord[603] = (temp<<8)|(Gdata[11]);

temp = Gdata[12]; //9次占65% 00 41

LocalWord[604] = (temp<<8)|(Gdata[13]);

temp = Gdata[14]; //11次占60% 00 3c

LocalWord[605] = (temp<<8)|(Gdata[15]);

temp = Gdata[16]; //13次占55% 00 37

LocalWord[606] = (temp<<8)|(Gdata[17]);

temp = Gdata[18]; //15次占51% 00 33

LocalWord[607] = (temp<<8)|(Gdata[19]);

temp = Gdata[20]; //17次占46% 00 2e

LocalWord[608] = (temp<<8)|(Gdata[21]);

temp = Gdata[22]; //19次占42% 00 2a

LocalWord[609] = (temp<<8)|(Gdata[23]);

temp = Gdata[24]; //21次占38% 00 26

LocalWord[610] = (temp<<8)|(Gdata[25]);

temp = Gdata[26]; //23次占36% 00 24

LocalWord[611] = (temp<<8)|(Gdata[27]);

temp = Gdata[28]; //25次占32% 00 20

LocalWord[612] = (temp<<8)|(Gdata[29]);

temp = Gdata[30]; //27次占28% 00 1c

LocalWord[613] = (temp<<8)|(Gdata[31]);

temp = Gdata[32]; //29次占25% 00 19

LocalWord[614] = (temp<<8)|(Gdata[33]);

temp = Gdata[34]; //31次占22% 00 16

LocalWord[615] = (temp<<8)|(Gdata[35]);

temp = Gdata[36]; //33次占18% 00 12

LocalWord[616] = (temp<<8)|(Gdata[37]);

temp = Gdata[38]; //35次占15% 00 0f

LocalWord[617] = (temp<<8)|(Gdata[39]);

temp = Gdata[40]; //37次占13% 00 0d

LocalWord[618] = (temp<<8)|(Gdata[41]);

temp = Gdata[42]; //39次占12% 00 0c

LocalWord[619] = (temp<<8)|(Gdata[43]);

temp = Gdata[44]; //41次占8% 00 08

LocalWord[620] = (temp<<8)|(Gdata[45]);

temp = Gdata[46]; //43次占6% 00 06

LocalWord[621] = (temp<<8)|(Gdata[47]);

temp = Gdata[48]; //45次占3% 00 03

LocalWord[622] = (temp<<8)|(Gdata[49]);

temp = Gdata[50]; //47次占1% 00 01

LocalWord[623] = (temp<<8)|(Gdata[51]);

temp = Gdata[52]; //49次占1% 00 01

LocalWord[624] = (temp<<8)|(Gdata[53]);

}

else if((LocalWord[2]==0x08)&&(Gdata[3] == 0x34)) //读THD_LOAD_L2 (负载电流谐波含量1-50次 B相)

{

temp = Gdata[4]; //THD LOAD L1占比: 1次占100% 00 64

LocalWord[625] = (temp<<8)|(Gdata[5]);

temp = Gdata[6]; //3次占80% 00 50

LocalWord[626] = (temp<<8)|(Gdata[7]);

temp = Gdata[8]; //5次占75% 00 4b

LocalWord[627] = (temp<<8)|(Gdata[9]);

temp = Gdata[10]; //7次占70% 00 46

LocalWord[628] = (temp<<8)|(Gdata[11]);

temp = Gdata[12]; //9次占65% 00 41

LocalWord[629] = (temp<<8)|(Gdata[13]);

temp = Gdata[14]; //11次占60% 00 3c

LocalWord[630] = (temp<<8)|(Gdata[15]);

temp = Gdata[16]; //13次占55% 00 37

LocalWord[631] = (temp<<8)|(Gdata[17]);

temp = Gdata[18]; //15次占51% 00 33

LocalWord[632] = (temp<<8)|(Gdata[19]);

temp = Gdata[20]; //17次占46% 00 2e

LocalWord[633] = (temp<<8)|(Gdata[21]);

temp = Gdata[22]; //19次占42% 00 2a

LocalWord[634] = (temp<<8)|(Gdata[23]);

temp = Gdata[24]; //21次占38% 00 26

LocalWord[635] = (temp<<8)|(Gdata[25]);

temp = Gdata[26]; //23次占36% 00 24

LocalWord[636] = (temp<<8)|(Gdata[27]);

temp = Gdata[28]; //25次占32% 00 20

LocalWord[637] = (temp<<8)|(Gdata[29]);

temp = Gdata[30]; //27次占28% 00 1c

LocalWord[638] = (temp<<8)|(Gdata[31]);

temp = Gdata[32]; //29次占25% 00 19

LocalWord[639] = (temp<<8)|(Gdata[33]);

temp = Gdata[34]; //31次占22% 00 16

LocalWord[640] = (temp<<8)|(Gdata[35]);

temp = Gdata[36]; //33次占18% 00 12

LocalWord[641] = (temp<<8)|(Gdata[37]);

temp = Gdata[38]; //35次占15% 00 0f

LocalWord[642] = (temp<<8)|(Gdata[39]);

temp = Gdata[40]; //37次占13% 00 0d

LocalWord[643] = (temp<<8)|(Gdata[41]);

temp = Gdata[42]; //39次占12% 00 0c

LocalWord[644] = (temp<<8)|(Gdata[43]);

temp = Gdata[44]; //41次占8% 00 08

LocalWord[645] = (temp<<8)|(Gdata[45]);

temp = Gdata[46]; //43次占6% 00 06

LocalWord[646] = (temp<<8)|(Gdata[47]);

temp = Gdata[48]; //45次占3% 00 03

LocalWord[647] = (temp<<8)|(Gdata[49]);

temp = Gdata[50]; //47次占1% 00 01

LocalWord[648] = (temp<<8)|(Gdata[51]);

temp = Gdata[52]; //49次占1% 00 01

LocalWord[649] = (temp<<8)|(Gdata[53]);

}

else if((LocalWord[2]==0x09)&&(Gdata[3] == 0x34)) //读THD_LOAD_L3 (负载电流谐波1-50 C相)

{

temp = Gdata[4]; //THD LOAD L1占比: 1次占100% 00 64

LocalWord[650] = (temp<<8)|(Gdata[5]);

temp = Gdata[6]; //3次占80% 00 50

LocalWord[651] = (temp<<8)|(Gdata[7]);

temp = Gdata[8]; //5次占75% 00 4b

LocalWord[652] = (temp<<8)|(Gdata[9]);

temp = Gdata[10]; //7次占70% 00 46

LocalWord[653] = (temp<<8)|(Gdata[11]);

temp = Gdata[12]; //9次占65% 00 41

LocalWord[654] = (temp<<8)|(Gdata[13]);

temp = Gdata[14]; //11次占60% 00 3c

LocalWord[655] = (temp<<8)|(Gdata[15]);

temp = Gdata[16]; //13次占55% 00 37

LocalWord[656] = (temp<<8)|(Gdata[17]);

temp = Gdata[18]; //15次占51% 00 33

LocalWord[657] = (temp<<8)|(Gdata[19]);

temp = Gdata[20]; //17次占46% 00 2e

LocalWord[658] = (temp<<8)|(Gdata[21]);

temp = Gdata[22]; //19次占42% 00 2a

LocalWord[659] = (temp<<8)|(Gdata[23]);

temp = Gdata[24]; //21次占38% 00 26

LocalWord[660] = (temp<<8)|(Gdata[25]);

temp = Gdata[26]; //23次占36% 00 24

LocalWord[661] = (temp<<8)|(Gdata[27]);

temp = Gdata[28]; //25次占32% 00 20

LocalWord[662] = (temp<<8)|(Gdata[29]);

temp = Gdata[30]; //27次占28% 00 1c

LocalWord[663] = (temp<<8)|(Gdata[31]);

temp = Gdata[32]; //29次占25% 00 19

LocalWord[664] = (temp<<8)|(Gdata[33]);

temp = Gdata[34]; //31次占22% 00 16

LocalWord[665] = (temp<<8)|(Gdata[35]);

temp = Gdata[36]; //33次占18% 00 12

LocalWord[666] = (temp<<8)|(Gdata[37]);

temp = Gdata[38]; //35次占15% 00 0f

LocalWord[667] = (temp<<8)|(Gdata[39]);

temp = Gdata[40]; //37次占13% 00 0d

LocalWord[668] = (temp<<8)|(Gdata[41]);

temp = Gdata[42]; //39次占12% 00 0c

LocalWord[669] = (temp<<8)|(Gdata[43]);

temp = Gdata[44]; //41次占8% 00 08

LocalWord[670] = (temp<<8)|(Gdata[45]);

temp = Gdata[46]; //43次占6% 00 06

LocalWord[671] = (temp<<8)|(Gdata[47]);

temp = Gdata[48]; //45次占3% 00 03

LocalWord[672] = (temp<<8)|(Gdata[49]);

temp = Gdata[50]; //47次占1% 00 01

LocalWord[673] = (temp<<8)|(Gdata[51]);

temp = Gdata[52]; //49次占1% 00 01

LocalWord[674] = (temp<<8)|(Gdata[53]);

}

else if((LocalWord[2]==0x12)&&(Gdata[3] == 0x34)) //(主电源电流谐波含量1-50次 A相)

{

temp = Gdata[4]; //THD LOAD L1占比: 1次占100% 00 64//100; //不应该这么直接赋值

// LocalWord[140] = (temp<<8)|(Gdata[5]);

LocalWord[675] = (temp<<8)|(Gdata[5]);

//LocalWord[55000] = LocalWord[675];

//if(LocalWord[675]>100) LocalWord[675] = 0;

//LocalWord[40100] = LocalWord[675];

temp = Gdata[6]; //3次占80% 00 50

LocalWord[676] = (temp<<8)|(Gdata[7]);

//LocalWord[55001] = LocalWord[676];

//if(LocalWord[676]>100) LocalWord[676] = 0;

//LocalWord[40101] = LocalWord[676];

temp = Gdata[8]; //5次占75% 00 4b

LocalWord[677] = (temp<<8)|(Gdata[9]);

//LocalWord[55002] = LocalWord[677];

temp = Gdata[10]; //7次占70% 00 46

LocalWord[678] = (temp<<8)|(Gdata[11]);

temp = Gdata[12]; //9次占65% 00 41

LocalWord[679] = (temp<<8)|(Gdata[13]);

temp = Gdata[14]; //11次占60% 00 3c

LocalWord[680] = (temp<<8)|(Gdata[15]);

temp = Gdata[16]; //13次占55% 00 37

LocalWord[681] = (temp<<8)|(Gdata[17]);

temp = Gdata[18]; //15次占51% 00 33

LocalWord[682] = (temp<<8)|(Gdata[19]);

temp = Gdata[20]; //17次占46% 00 2e

LocalWord[683] = (temp<<8)|(Gdata[21]);

temp = Gdata[22]; //19次占42% 00 2a

LocalWord[684] = (temp<<8)|(Gdata[23]);

temp = Gdata[24]; //21次占38% 00 26

LocalWord[685] = (temp<<8)|(Gdata[25]);

temp = Gdata[26]; //23次占36% 00 24

LocalWord[686] = (temp<<8)|(Gdata[27]);

temp = Gdata[28]; //25次占32% 00 20

LocalWord[687] = (temp<<8)|(Gdata[29]);

temp = Gdata[30]; //27次占28% 00 1c

LocalWord[688] = (temp<<8)|(Gdata[31]);

temp = Gdata[32]; //29次占25% 00 19

LocalWord[689] = (temp<<8)|(Gdata[33]);

temp = Gdata[34]; //31次占22% 00 16

LocalWord[690] = (temp<<8)|(Gdata[35]);

temp = Gdata[36]; //33次占18% 00 12

LocalWord[691] = (temp<<8)|(Gdata[37]);

temp = Gdata[38]; //35次占15% 00 0f

LocalWord[692] = (temp<<8)|(Gdata[39]);

temp = Gdata[40]; //37次占13% 00 0d

LocalWord[693] = (temp<<8)|(Gdata[41]);

temp = Gdata[42]; //39次占12% 00 0c

LocalWord[694] = (temp<<8)|(Gdata[43]);

temp = Gdata[44]; //41次占8% 00 08

LocalWord[695] = (temp<<8)|(Gdata[45]);

temp = Gdata[46]; //43次占6% 00 06

LocalWord[696] = (temp<<8)|(Gdata[47]);

temp = Gdata[48]; //45次占3% 00 03

LocalWord[697] = (temp<<8)|(Gdata[49]);

temp = Gdata[50]; //47次占1% 00 01

LocalWord[698] = (temp<<8)|(Gdata[51]);

temp = Gdata[52]; //49次占1% 00 01

LocalWord[699] = (temp<<8)|(Gdata[53]);

temp = Gdata[54]; //错误码

LocalWord[2001] = (temp<<8)|(Gdata[55]);

//LocalWord[55000] = 0;

}

else if((LocalWord[2]==0x13)&&(Gdata[3] == 0x34)) //读THD_LOAD_L2(主电源电流谐波含量1-50次 B相)

{

temp = Gdata[4]; //THD LOAD L1占比: 1次占100% 00 64

// LocalWord[140] = (temp<<8)|(Gdata[5]);

LocalWord[700] = (temp<<8)|(Gdata[5]); //100;

// LocalWord[55001] = LocalWord[700];

temp = Gdata[6]; //3次占80% 00 50

LocalWord[701] = (temp<<8)|(Gdata[7]);

temp = Gdata[8]; //5次占75% 00 4b

LocalWord[702] = (temp<<8)|(Gdata[9]);

temp = Gdata[10]; //7次占70% 00 46

LocalWord[703] = (temp<<8)|(Gdata[11]);

temp = Gdata[12]; //9次占65% 00 41

LocalWord[704] = (temp<<8)|(Gdata[13]);

temp = Gdata[14]; //11次占60% 00 3c

LocalWord[705] = (temp<<8)|(Gdata[15]);

temp = Gdata[16]; //13次占55% 00 37

LocalWord[706] = (temp<<8)|(Gdata[17]);

temp = Gdata[18]; //15次占51% 00 33

LocalWord[707] = (temp<<8)|(Gdata[19]);

temp = Gdata[20]; //17次占46% 00 2e

LocalWord[708] = (temp<<8)|(Gdata[21]);

temp = Gdata[22]; //19次占42% 00 2a

LocalWord[709] = (temp<<8)|(Gdata[23]);

temp = Gdata[24]; //21次占38% 00 26

LocalWord[710] = (temp<<8)|(Gdata[25]);

temp = Gdata[26]; //23次占36% 00 24

LocalWord[711] = (temp<<8)|(Gdata[27]);

temp = Gdata[28]; //25次占32% 00 20

LocalWord[712] = (temp<<8)|(Gdata[29]);

temp = Gdata[30]; //27次占28% 00 1c

LocalWord[713] = (temp<<8)|(Gdata[31]);

temp = Gdata[32]; //29次占25% 00 19

LocalWord[714] = (temp<<8)|(Gdata[33]);

temp = Gdata[34]; //31次占22% 00 16

LocalWord[715] = (temp<<8)|(Gdata[35]);

temp = Gdata[36]; //33次占18% 00 12

LocalWord[716] = (temp<<8)|(Gdata[37]);

temp = Gdata[38]; //35次占15% 00 0f

LocalWord[717] = (temp<<8)|(Gdata[39]);

temp = Gdata[40]; //37次占13% 00 0d

LocalWord[718] = (temp<<8)|(Gdata[41]);

temp = Gdata[42]; //39次占12% 00 0c

LocalWord[719] = (temp<<8)|(Gdata[43]);

temp = Gdata[44]; //41次占8% 00 08

LocalWord[720] = (temp<<8)|(Gdata[45]);

temp = Gdata[46]; //43次占6% 00 06

LocalWord[721] = (temp<<8)|(Gdata[47]);

temp = Gdata[48]; //45次占3% 00 03

LocalWord[722] = (temp<<8)|(Gdata[49]);

temp = Gdata[50]; //47次占1% 00 01

LocalWord[723] = (temp<<8)|(Gdata[51]);

temp = Gdata[52]; //49次占1% 00 01

LocalWord[724] = (temp<<8)|(Gdata[53]);

//LocalWord[55001] = 0;

}

else if((LocalWord[2]==0x14)&&(Gdata[3] == 0x34)) //读THD_LOAD_L3 (主电源电流谐波1-50 C相)

{

temp = Gdata[4]; //THD LOAD L1占比: 1次占100% 00 64

//LocalWord[140] = (temp<<8)|(Gdata[5]);

LocalWord[725] = (temp<<8)|(Gdata[5]); //100;

//LocalWord[55002] = LocalWord[725];

temp = Gdata[6]; //3次占80% 00 50

LocalWord[726] = (temp<<8)|(Gdata[7]);

temp = Gdata[8]; //5次占75% 00 4b

LocalWord[727] = (temp<<8)|(Gdata[9]);

temp = Gdata[10]; //7次占70% 00 46

LocalWord[728] = (temp<<8)|(Gdata[11]);

temp = Gdata[12]; //9次占65% 00 41

LocalWord[729] = (temp<<8)|(Gdata[13]);

temp = Gdata[14]; //11次占60% 00 3c

LocalWord[730] = (temp<<8)|(Gdata[15]);

temp = Gdata[16]; //13次占55% 00 37

LocalWord[731] = (temp<<8)|(Gdata[17]);

temp = Gdata[18]; //15次占51% 00 33

LocalWord[732] = (temp<<8)|(Gdata[19]);

temp = Gdata[20]; //17次占46% 00 2e

LocalWord[733] = (temp<<8)|(Gdata[21]);

temp = Gdata[22]; //19次占42% 00 2a

LocalWord[734] = (temp<<8)|(Gdata[23]);

temp = Gdata[24]; //21次占38% 00 26

LocalWord[735] = (temp<<8)|(Gdata[25]);

temp = Gdata[26]; //23次占36% 00 24

LocalWord[736] = (temp<<8)|(Gdata[27]);

temp = Gdata[28]; //25次占32% 00 20

LocalWord[737] = (temp<<8)|(Gdata[29]);

temp = Gdata[30]; //27次占28% 00 1c

LocalWord[738] = (temp<<8)|(Gdata[31]);

temp = Gdata[32]; //29次占25% 00 19

LocalWord[739] = (temp<<8)|(Gdata[33]);

temp = Gdata[34]; //31次占22% 00 16

LocalWord[740] = (temp<<8)|(Gdata[35]);

temp = Gdata[36]; //33次占18% 00 12

LocalWord[741] = (temp<<8)|(Gdata[37]);

temp = Gdata[38]; //35次占15% 00 0f

LocalWord[742] = (temp<<8)|(Gdata[39]);

temp = Gdata[40]; //37次占13% 00 0d

LocalWord[743] = (temp<<8)|(Gdata[41]);

temp = Gdata[42]; //39次占12% 00 0c

LocalWord[744] = (temp<<8)|(Gdata[43]);

temp = Gdata[44]; //41次占8% 00 08

LocalWord[745] = (temp<<8)|(Gdata[45]);

temp = Gdata[46]; //43次占6% 00 06

LocalWord[746] = (temp<<8)|(Gdata[47]);

temp = Gdata[48]; //45次占3% 00 03

LocalWord[747] = (temp<<8)|(Gdata[49]);

temp = Gdata[50]; //47次占1% 00 01

LocalWord[748] = (temp<<8)|(Gdata[51]);

temp = Gdata[52]; //49次占1% 00 01

LocalWord[749] = (temp<<8)|(Gdata[53]);

}

else if((LocalWord[2]==0x0d)&&(Gdata[3] == 0x14)) //读THD_TOTAL (电网THDu和负载,电网THDi)

{

temp = Gdata[4]; //L1 LOAD,00 01 THDi

LocalWord[200] = (temp<<8)|(Gdata[5]);

if(LocalWord[200]>1000) LocalWord[200] = 1000 ;

LocalWord[40045] = LocalWord[200];

temp = Gdata[6]; //L2 LOAD,00 02 THDi

LocalWord[202] = (temp<<8)|(Gdata[7]);

if(LocalWord[202]>1000) LocalWord[202] = 1000 ;

LocalWord[40046] = LocalWord[202];

temp = Gdata[8]; //L3 LOAD,00 03 THDi

LocalWord[204] = (temp<<8)|(Gdata[9]);

if(LocalWord[204]>1000) LocalWord[204] = 1000 ;

LocalWord[40047] = LocalWord[204];

temp = Gdata[10]; //L1 MAINS,00 04 THDi

LocalWord[201] = (temp<<8)|(Gdata[11]);

if(LocalWord[201]>1000) LocalWord[201] = 1000 ;

LocalWord[40048] = LocalWord[201];

temp = Gdata[12]; //L2 MAINS,00 05 THDi

LocalWord[203] = (temp<<8)|(Gdata[13]);

if(LocalWord[203]>1000) LocalWord[203] = 1000 ;

LocalWord[40049] = LocalWord[203];

temp = Gdata[14]; //L3 MAINS 00 06 THDi

LocalWord[205] = (temp<<8)|(Gdata[15]);

if(LocalWord[205]>1000) LocalWord[205] = 1000 ;

LocalWord[40050] = LocalWord[205];

/*

temp = Gdata[16]; //L1 THDu MAINS,00 07 //新设置地址,可能会产生错误

LocalWord[208] = (temp<<8)|(Gdata[17]);

if(LocalWord[208]>1000) LocalWord[208] = 1000 ;

LocalWord[40068] = LocalWord[208];

temp = Gdata[18]; //L2 THDu MAINS,00 08

LocalWord[209] = (temp<<8)|(Gdata[19]);

if(LocalWord[209]>1000) LocalWord[209] = 1000 ;

LocalWord[40069] = LocalWord[209];

temp = Gdata[20]; //L3 THDu MAINS 00 09

LocalWord[210] = (temp<<8)|(Gdata[21]);

if(LocalWord[210]>1000) LocalWord[210] = 1000 ;

LocalWord[40070] = LocalWord[210];

*/

}

else if((LocalWord[2]==0x0e)&&(Gdata[3] == 0x2a)) //读设备参数,为什么接收到的第 三位是0e,应该是10

{ //猜想:这里读数据是因为刚开机的时候,读到的下位机状态,上传,然后等到稳定之后可以重新设置

LocalBit[1] = GETBIT(Gdata[6],0); //接触器状态

LocalBit[37] = GETBIT(Gdata[5],7); //C相互感器反接

LocalBit[36] = GETBIT(Gdata[5],6); //B相互感器反接

LocalBit[35] = GETBIT(Gdata[5],5); //A相互感器反接

LocalBit[34] = GETBIT(Gdata[5],4); //互感器位于源侧

LocalBit[30] = GETBIT(Gdata[5],3); //谐波过滤(功能选项)

LocalBit[31] = GETBIT(Gdata[5],2); //相位平衡

LocalBit[32] = GETBIT(Gdata[5],1); //无功补偿

LocalBit[33] = GETBIT(Gdata[5],0); //功能优先顺序

LocalBit[40] = GETBIT(Gdata[7],0); //3次 00 选择性滤波 3次

LocalBit[41] = GETBIT(Gdata[7],1); //5

LocalBit[42] = GETBIT(Gdata[7],2); //7

LocalBit[43] = GETBIT(Gdata[7],3); //9

LocalBit[44] = GETBIT(Gdata[7],4); //11

LocalBit[45] = GETBIT(Gdata[7],5); //13

LocalBit[46] = GETBIT(Gdata[7],6); //15

LocalBit[47] = GETBIT(Gdata[7],7); //17

LocalBit[48] = GETBIT(Gdata[8],0); //19次 取指定位的值,值为0或1。

LocalBit[49] = GETBIT(Gdata[8],1); //21

LocalBit[10] = GETBIT(Gdata[8],2); //23

LocalBit[11] = GETBIT(Gdata[8],4); //25

LocalBit[56] = GETBIT(Gdata[8],5); //27

LocalBit[57] = GETBIT(Gdata[8],6); //29

LocalBit[58] = GETBIT(Gdata[8],7); //31

LocalBit[59] = GETBIT(Gdata[8],8); //33

LocalBit[60] = GETBIT(Gdata[9],0); //35

LocalBit[61] = GETBIT(Gdata[9],1); //37

LocalBit[62] = GETBIT(Gdata[9],2); //39

LocalBit[63] = GETBIT(Gdata[9],3); //41

LocalBit[64] = GETBIT(Gdata[9],4); //43

LocalBit[65] = GETBIT(Gdata[9],5); //45

LocalBit[66] = GETBIT(Gdata[9],6); //47

LocalBit[67] = GETBIT(Gdata[9],7); //49

LocalBit[68] = GETBIT(Gdata[10],0); //2次

LocalBit[69] = GETBIT(Gdata[10],1); //4

LocalBit[70] = GETBIT(Gdata[10],2); //6

LocalBit[71] = GETBIT(Gdata[10],3); //8

LocalBit[72] = GETBIT(Gdata[10],4); //10

LocalBit[73] = GETBIT(Gdata[10],5); //12

LocalBit[74] = GETBIT(Gdata[10],6); //14

LocalBit[75] = GETBIT(Gdata[10],7); //16

LocalBit[76] = GETBIT(Gdata[11],0); //18

LocalBit[77] = GETBIT(Gdata[11],1); //20

LocalBit[78] = GETBIT(Gdata[11],2); //22

LocalBit[79] = GETBIT(Gdata[11],3); //24

LocalBit[80] = GETBIT(Gdata[11],4); //26

LocalBit[81] = GETBIT(Gdata[11],5); //28

LocalBit[82] = GETBIT(Gdata[11],6); //30

LocalBit[83] = GETBIT(Gdata[11],7); //32

LocalBit[84] = GETBIT(Gdata[12],0); //34

LocalBit[85] = GETBIT(Gdata[12],1); //36

LocalBit[86] = GETBIT(Gdata[12],2); //38

LocalBit[87] = GETBIT(Gdata[12],3); //40

LocalBit[88] = GETBIT(Gdata[12],4); //42

LocalBit[89] = GETBIT(Gdata[12],5); //44

LocalBit[90] = GETBIT(Gdata[12],6); //46

LocalBit[91] = GETBIT(Gdata[12],7); //48

LocalBit[92] = GETBIT(Gdata[13],0); //50

temp = Gdata[14]; //互感器变比(100/5)

LocalWord[50] = (temp<<8)|(Gdata[15]);

//temp = Gdata[15]; //最小电流(10A),为什么不读最大电流

//LocalWord[51] = (temp<<8)|(Gdata[16]);

//LocalWord[52] = Gdata[18]; //控制算法

LocalWord[53] = Gdata[16]; //并行模块

temp = Gdata[16]; //直流母线电压750V

LocalWord[55] = (temp<<8)|(Gdata[17]);

temp = Gdata[18]; //最大电流

LocalWord[58] = (temp<<8)|(Gdata[19]);

temp = Gdata[20]; //电压过压点

LocalWord[59] = (temp<<8)|(Gdata[21]);

temp = Gdata[22]; //电压欠压点

LocalWord[60] = (temp<<8)|(Gdata[23]);

temp = Gdata[24]; //电压过频点

LocalWord[61] = (temp<<8)|(Gdata[25]);

temp = Gdata[26]; //电压欠频点

LocalWord[62] = (temp<<8)|(Gdata[27]);

temp = Gdata[28]; //无功幅值(更改为运行模式 0=补偿,1=自主发波,2=调试模式)

LocalWord[500] = (temp<<8)|(Gdata[29]);

temp = Gdata[30]; //3次幅值(更改为驱动模块故障上传)

LocalWord[501] = (temp<<8)|(Gdata[31]);

temp = Gdata[32]; //5次幅值

LocalWord[502] = (temp<<8)|(Gdata[33]);

temp = Gdata[34]; //无功相位(更改为A相互感器方向)

LocalWord[503] = (temp<<8)|(Gdata[35]);

temp = Gdata[36]; //3次相位(更改为A相互感器方向)

LocalWord[504] = (temp<<8)|(Gdata[37]);

temp = Gdata[38]; //5次相位(更改为A相互感器方向)

LocalWord[505] = (temp<<8)|(Gdata[39]);

}

else if((LocalWord[2]==0x0f)&&(Gdata[3] == 0x02)) //读设备状态

{

crc = CRC(Gdata,6);

if((Gdata[6] == (char)crc)&&(Gdata[7] == (char)(crc>>8)))

{

if(Gdata[5] != 0) //第五位表示状态

{

LocalWord[40051] = 2;

}

flag_data_right = 0;

if(Gdata[0] == 1)

{

if(Gdata[5] == LocalWord[351])

{

flag_data_right = 1;

}

else

{

LocalWord[351] = Gdata[5];

}

}

else if(Gdata[0] == 2)

{

if(Gdata[5] == LocalWord[352])

{

flag_data_right = 1;

}

else

{

LocalWord[352] = Gdata[5];

}

}

else if(Gdata[0] == 3)

{

if(Gdata[5] == LocalWord[353])

{

flag_data_right = 1;

}

else

{

LocalWord[353] = Gdata[5];

}

}

else if(Gdata[0] == 4)

{

if(Gdata[5] == LocalWord[354])

{

flag_data_right = 1;

}

else

{

LocalWord[354] = Gdata[5];

}

}

else if(Gdata[0] == 5)

{

if(Gdata[5] == LocalWord[355])

{

flag_data_right = 1;

}

else

{

LocalWord[355] = Gdata[5];

}

}

else if(Gdata[0] == 6)

{

if(Gdata[5] == LocalWord[356])

{

flag_data_right = 1;

}

else

{

LocalWord[356] = Gdata[5];

}

}

else if(Gdata[0] == 7)

{

if(Gdata[5] == LocalWord[357])

{

flag_data_right = 1;

}

else

{

LocalWord[357] = Gdata[5];

}

}

else if(Gdata[0] == 8)

{

if(Gdata[5] == LocalWord[358])

{

flag_data_right = 1;

}

else

{

LocalWord[358] = Gdata[5];

}

}

else if(Gdata[0] == 9) //添加了第九台机

{

if(Gdata[5] == LocalWord[359])

{

flag_data_right = 1;

}

else

{

LocalWord[359] = Gdata[5];

}

}

else if(Gdata[0] == 10)

{

if(Gdata[5] == LocalWord[360])

{

flag_data_right = 1;

}

else

{

LocalWord[360] = Gdata[5];

}

}

if(flag_data_right == 1)

{

if(GETBIT(Gdata[5],0) == 1) //接触器故障

{

if(Gdata[0]>0 && Gdata[0]<11)

{

LocalWord[0] = Gdata[0];

LocalWord[7] = 0x05;

}

}

else if(GETBIT(Gdata[5],1) == 1) //IGBT过温保护

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

LocalWord[0] = Gdata[0];

LocalWord[7] = 0x06;

}

}

else if(GETBIT(Gdata[5],2) == 1) //直流母线过压

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

LocalWord[0] = Gdata[0];

LocalWord[7] = 0x07;

}

}

else if(GETBIT(Gdata[5],3) == 1) //本机输出过流

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

LocalWord[0] = Gdata[0];

LocalWord[7] = 0x08;

}

}

else if(GETBIT(Gdata[5],4) == 1) //驱动保护

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

LocalWord[0] = Gdata[0];

LocalWord[7] = 0x09;

}

}

else if(GETBIT(Gdata[5],5) == 1) //直流母线不平衡

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

LocalWord[0] = Gdata[0];

LocalWord[7] = 0x0a;

}

}

if(Gdata[5] != LocalWord[350])

{

if(Gdata[5] != 0)

LocalWord[350] = Gdata[5];

if(GETBIT(Gdata[5],0) == 1)

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

// LocalWord[0] = 0x05 + (Gdata[0] - 1) * 0x05 ;

LocalWord[89] = 0x02 + (Gdata[0] - 0) * 0x08 ;

save_one_log();

}

}

else if(GETBIT(Gdata[5],1) == 1)

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

// LocalWord[0] = 0x06 + (Gdata[0] - 1) * 0x05 ;

LocalWord[89] = 0x03 + (Gdata[0] - 0) * 0x08 ;

save_one_log();

}

}

else if(GETBIT(Gdata[5],2) == 1)

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

// LocalWord[0] = 0x07 + (Gdata[0] - 1) * 0x05 ;

LocalWord[89] = 0x04 + (Gdata[0] - 0) * 0x08 ;

save_one_log();

}

}

else if(GETBIT(Gdata[5],3) == 1)

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

// LocalWord[0] = 0x08 + (Gdata[0] - 1) * 0x05 ;

LocalWord[89] = 0x05 + (Gdata[0] - 0) * 0x08 ;

save_one_log();

}

}

else if(GETBIT(Gdata[5],4) == 1)

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

// LocalWord[0] = 0x09 + (Gdata[0] - 1) * 0x05 ;

LocalWord[89] = 0x06 + (Gdata[0] - 0) * 0x08 ;

save_one_log();

}

}

else if(GETBIT(Gdata[5],5) == 1)

{

if((Gdata[0]>0) && (Gdata[0]<11))

{

// LocalWord[0] = 0x0a + (Gdata[0] - 1) * 0x05 ;

LocalWord[89] = 0x07 + (Gdata[0] - 0) * 0x08 ;

save_one_log();

}

}

}

}

}

}

}

LocalWord[3]= 0;

LocalWord[23]=0x10; // read_AF_status_deal提到 空操作

}

else

{

LocalWord[5] = bufferlen;

}

}

}

阅读全文 | 回复(0) | 引用通告 | 编辑 | By: 皮皮爸爸
  • 标签:电能质量 
  • 发表评论:

      大名:
      密码: (游客无须输入密码)
      主页:
      标题:
      80
    Powered by Oblog.