#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; } } } |