📄 485.c
字号:
memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
sbuf[4] = 0x00;
sbuf[8] = cot;
sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
sbuf[sbuf[1] + 5] = 0x16;
wLen = sbuf[1] + 6;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
break;
case 0x06://软压板
sfc_no = ginh;
sfc_state = rbuf[20] - 1;
if (DEV_Check_SFC(dev_id,sfc_no,sfc_state) == 1)
{
cot = 44;
}
else
{
cot = 41;
}
wLen = rbuf[1];
sbuf[0] = 0x68;
sbuf[1] = (BYTE)wLen;
sbuf[2] = (BYTE)wLen;
sbuf[3] = 0x68;
i= 4;
memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
sbuf[4] = 0x00;
sbuf[8] = cot;
sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
sbuf[sbuf[1] + 5] = 0x16;
wLen = sbuf[1] + 6;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
break;
case 0x03://遥控,3——遥跳,4——遥合
ctrl_no = ginh;
if(DEV_Check_Control(dev_id, ctrl_no) ==1)
{
cot = 44;
}
else
{
cot = 41;
}
wLen = rbuf[1];
sbuf[0] = 0x68;
sbuf[1] = (BYTE)wLen;
sbuf[2] = (BYTE)wLen;
sbuf[3] = 0x68;
i= 4;
memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
sbuf[4] = 0x00;
sbuf[8] = cot;
sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
sbuf[sbuf[1] + 5] = 0x16;
wLen = sbuf[1] + 6;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
break;
}
break;
case 250://带执行的写条目
switch(ginl)
{
case 4://定值
tiaomu = ginh;
b_set_no = DEV_Get_Zone(dev_id, &set_no);
b_get_set = DEV_Get_Setting(dev_id,set_no,&wsetbuf);
if( b_set_no == 1 && b_get_set == 1)
{
pt = &rbuf[17];
gdd = *pt++;
pt++;//数据宽度
pt++;//数目及后续状态
for(i = 0;i < ngd;i ++)
{
switch(gdd)//gdd 通用分类数据描述:3——无符号整数,7——短实数
{
case 3:
wsetbuf.set_val[tiaomu - 1].type = SET_T_UINT;
wsetbuf.set_val[tiaomu - 1].un_val.u_val = MAKEWORD(*pt,*(pt + 1));
pt += 3;
tiaomu = *pt;
pt += 2;
gdd = *pt++;
pt ++;
break;
case 6:
case 7:
wsetbuf.set_val[tiaomu - 1].type = SET_T_FLOAT;
gen_scan_float(pt, &wsetbuf.set_val[tiaomu - 1].un_val.f_val);
pt += 5;
tiaomu = *pt;
pt += 2;
gdd = *pt++;
pt ++;
break;
}
}
if(DEV_Set_Setting(dev_id,set_no,&wsetbuf) == 1)
{
cot = 40;
}
else
{
cot = 41;
}
}
else
{
cot = 41;
}
wLen = rbuf[1];
sbuf[0] = 0x68;
sbuf[1] = (BYTE)wLen;
sbuf[2] = (BYTE)wLen;
sbuf[3] = 0x68;
i= 4;
memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
sbuf[4] = 0x00;
sbuf[8] = cot;
sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
sbuf[sbuf[1] + 5] = 0x16;
wLen = sbuf[1] + 6;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
case 0x05:
set_no = rbuf[20];
b_set_no = DEV_Set_Zone(dev_id ,set_no);
if (b_set_no == 1)
{
cot = 40;
}
else
{
cot = 41;
}
wLen = rbuf[1];
sbuf[0] = 0x68;
sbuf[1] = (BYTE)wLen;
sbuf[2] = (BYTE)wLen;
sbuf[3] = 0x68;
i= 4;
memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
sbuf[4] = 0x00;
sbuf[8] = cot;
sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
sbuf[sbuf[1] + 5] = 0x16;
wLen = sbuf[1] + 6;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
break;
case 0x06://软压板
sfc_no = ginh;
sfc_state = rbuf[20] - 1;
if(DEV_Set_SFC(dev_id,sfc_no,sfc_state) == 1)
{
cot = 40;
}
else
{
cot = 41;
}
wLen = rbuf[1];
sbuf[0] = 0x68;
sbuf[1] = (BYTE)wLen;
sbuf[2] = (BYTE)wLen;
sbuf[3] = 0x68;
i= 4;
memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
sbuf[4] = 0x00;
sbuf[8] = cot;
sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
sbuf[sbuf[1] + 5] = 0x16;
wLen = sbuf[1] + 6;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
break;
case 0x03://遥控
ctrl_no = ginh;
if(DEV_Remote_Control(dev_id, ctrl_no) == 1)
{
cot = 40;
}
else
{
cot = 41;
}
wLen = rbuf[1];
sbuf[0] = 0x68;
sbuf[1] = (BYTE)wLen;
sbuf[2] = (BYTE)wLen;
sbuf[3] = 0x68;
i= 4;
memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
sbuf[4] = 0x00;
sbuf[8] = cot;
sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
sbuf[sbuf[1] + 5] = 0x16;
wLen = sbuf[1] + 6;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
break;
}
break;
}
}
void ReSet(const BYTE *rbuf,BYTE byDevAddr,BYTE uart_port)
{
DEV_Check_Control(7, 7);
DEV_Remote_Control(7, 7);
DEV_Check_Control(7, 8);
DEV_Remote_Control(7, 8);
DEV_Check_Control(12, 7);
DEV_Remote_Control(12, 7);
DEV_Check_Control(12, 8);
DEV_Remote_Control(12, 8);
/* //复归保护信号inf = 19 , cot = 20
BYTE cot;
BYTE inf;
BYTE i;
WORD Dev_Num;
WORD dev_id;
Dev_Num = Get_Device_Number();
byDevAddr = rbuf[5];
cot = rbuf[8];
inf = rbuf[11];
if(cot == 20 && inf == 19)
{
if(byDevAddr == 0xff)
{
for(i = 1;i <= Dev_Num;i ++)
{
DEV_Reset_Signal(i);
}
return;
}
dev_id = Addr_to_ID(byDevAddr);
DEV_Reset_Signal(dev_id);
}*/
}
void Lan_edit21(const BYTE* rbuf,BYTE byDevAddr,BYTE uart_port)
{
BYTE inf;
BYTE ginl;
BYTE ginh;
BYTE ngd;
BYTE kod;
WORD wLen;
WORD dev_id;
T_SET *p_set;
WORD set_no;
inf = rbuf[11];//信息序号
ngd = rbuf[13];
ginl = rbuf[14];//组号
ginh = rbuf[15];//条目号
kod = rbuf[16];//类型描述
switch(inf)
{
case 241://读一个组的全部条目的值和属性
switch(kod)
{
case 1://实际值
switch(ginl)
{
case 4://定值
p_set = &rsetbuf;
dev_id =Addr_to_ID(byDevAddr);
DEV_Get_Zone(dev_id, &set_no);
if(DEV_Get_Setting(dev_id,set_no,p_set) == 1)
{
dzflg = 0x33;
dznumber = 0;
sbuf[0] = 0x10;
sbuf[1] = 0x20;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
NU_Sleep(20);
UART_Write(uart_port,sbuf,wLen);
return;
}
else
{
dzflg = 0x00;
sbuf[0] = 0x10;
sbuf[1] = 0x09;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
case 1://遥测
dev_id = Addr_to_ID(byDevAddr);
if(INF_Get_Measure(dev_id, &measure) == 1)
{
measureflg = 0x33;
sbuf[0] = 0x10;
sbuf[1] = 0x20;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
else
{
measureflg = 0x00;
sbuf[0] = 0x10;
sbuf[1] = 0x09;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
case 0x06://软压板信息
dev_id = Addr_to_ID(byDevAddr);
if(INF_Get_SFC(dev_id,&sfc) == 1)
{
sfcflg = 0x33;
sbuf[0] = 0x10;
sbuf[1] = 0x20;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
else
{
sfcflg = 0x00;
sbuf[0] = 0x10;
sbuf[1] = 0x09;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
case 0x07://遥信量信息
dev_id = Addr_to_ID(byDevAddr);
if(INF_Get_Di(dev_id,&di) == 1)
{
diflg = 0x33;
sbuf[0] = 0x10;
sbuf[1] = 0x20;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
else
{
diflg = 0x00;
sbuf[0] = 0x10;
sbuf[1] = 0x09;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
}
break;
case 10://描述表
switch(ginl)
{
case 1://遥测组
dev_id = Addr_to_ID(byDevAddr);
if(DEV_Get_List(dev_id, LIST_T_ANALOG, &list) == 1)
{
listflg = 0x33;
list_num = 0;
sbuf[0] = 0x10;
sbuf[1] = 0x20;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
else
{
listflg = 0x00;
sbuf[0] = 0x10;
sbuf[1] = 0x09;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
case 4://定值组
dev_id = Addr_to_ID(byDevAddr);
if(DEV_Get_List(dev_id, LIST_T_SET, &list) == 1)
{
listflg = 0x33;
sbuf[0] = 0x10;
sbuf[1] = 0x20;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
else
{
listflg = 0x00;
sbuf[0] = 0x10;
sbuf[1] = 0x09;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
case 6://软压板
dev_id = Addr_to_ID(byDevAddr);
if(DEV_Get_List(dev_id, LIST_T_SFC, &list) == 1)
{
listflg = 0x33;
sbuf[0] = 0x10;
sbuf[1] = 0x20;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
else
{
listflg = 0x00;
sbuf[0] = 0x10;
sbuf[1] = 0x09;
sbuf[2] = byDevAddr;
sbuf[3] = Makecrc(&sbuf[1],2);
sbuf[4] = 0x16;
wLen = 5;
tot_leng = wLen;
UART_Write(uart_port,sbuf,wLen);
return;
}
}
break;
}
}
}
/////////////////////////////////////
BYTE Makecrc(BYTE *str,WORD nSize)
{
WORD i;
BYTE J;
J=0;
for(i=0;i < nSize;i++)
{
J+=str[i];
}
return J;
}
WORD check_packet(const BYTE *p_data, WORD data_len)
{
if(p_data[0] == 0x10)
{
if(data_len == 5 && p_data[4] == 0x16)
{
return UART_PKT_FIN;
}
return UART_PKT_CON;
}
if(p_data[0] == 0x68)
{
if(data_len == p_data[1] + 6)
{
return UART_PKT_FIN;
}
return UART_PKT_CON;
}
return UART_PKT_ERR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -