📄 ip.c
字号:
{
}
void _commanddisplay(U8 *buf,U16 len )
{
}
void main()
{
//系统初始化
_sysinit();
_initvar();
_initcom();
_setcomport(INFRARED);
_setscreenmode(CHINESEMODE);
_setdispcolor(NORMALCOLOR);
_setkeymode(2);
_keybeep(1);// 关闭按键声音
/*****初始化地址全局变量******/
A10=0;//行政区划码
A11=0;
A2[0]=0;
A2[1]=0;
A3=0x00;//主站地址和组地址标志
A[0]=A10;
A[1]=A11;
A[2]=A2[0];
A[3]=A2[1];
A[4]=A3;
//显示首页
_cls();
_PutString(3, 5, "负控管理");
_PutString(5, 4, "版本:V1.01");
_PutString(1, 0, "泰安高通电子有限公司");
//按键进入菜单选项页
_bioskey(0); //等待按一个键
while(1)
{
//运行菜单程序,若按退出键则退出程序
if(!menu_tst())
break;
}
}
U8 menu_tst(void)
{
U8* Menu[] = { "1.主站IP及端口", "2.终端地址设置", "3.虚拟专用网设置",
"4.脉冲配置参数", "5.终端抄表间隔", "6.设测量点参数", "7.通讯方式", "关机"}; //菜单内容
S16 Choice;//菜单按键选择
_lcd_setcursor(0, 5, 5, 1);//关闭光标
//建立主菜单
while(1)
{
_cls();
_PutString(0, 0, " 负控设置 ");
Choice = PopUpMenu(0, 1, 16, 9, Menu, "12345678", 8, 8, 1, 0, 0, NULL, 0 );
m_menuid=Choice;
switch(Choice)
{
case 0 : return 0;
break;
case 1 : m_command();//主站IP及端口
break;
case 2 : m_command();//端口地址
break;
case 3 : m_command();//虚拟专用网设置
break;
case 4 : m_command();//终端脉冲配置参数
break;
case 5 : m_command();//抄表间隔
break;
case 6 : m_command();//测量表基本参数
break;
case 7: m_commuicate();//通讯方式
break;
case 8: m_close();//关机
break;
default:
return 0;
}
}
}
void m_ipdisplay(void)
{
_cls();
_lcd_setcursor(4, 5, 5, 1);//打开光标
/*
str[0][0]='6';
str[0][1]='7';
str[0][2]='8';
str[0][3]='9';
*/
_PutString(0, 0, "主IP:\n");//第0行
_PutString(0, 6,str[0]);//主IP内容
_PutString(1, 3, "端口:\n");//第1行
_PutString(1, 8,str[1]);//第1行
_PutString(2, 0, "副IP:\n");//第2行
_PutString(3, 3, "端口:\n");//第3行
_PutString(4, 0, "网关:\n");//第4行
_PutString(5, 3, "端口:\n");//第5行
_PutString(6, 0, "代理:\n");//第6行
_PutString(7, 3, "端口:\n");//第7行
_PutString(8, 0, "APN :\n");//第8行
_PutString(8,6,str[8]);//主IP内容
_gotoxy(5,0);//光标指向第1行输入
}
U8 m_ip(void)
{
U8 lincnt;
lincnt=8;
//_initvar();
m_ipdisplay();
string_key(lincnt);
_initvar();
return 0;
}
void m_adddisplay(void)
{
_cls();
_lcd_setcursor(4, 5, 5, 1);//打开光标
_PutString(0, 0, "终端地址 :\n");//第2行
_PutString(0, 10, Add[0]);//第2行
_PutString(1, 0, "区划码A10:\n");//第3行
_PutString(1, 10, Add[1]);//第3行
_PutString(2, 0, "区划码A11:\n");//第4行
_PutString(2, 10, Add[2]);
_gotoxy(10,0);//光标指向第0行输入
}
U8 m_add(void)
{
U8 lincnt;
lincnt=2;
_initvar();
m_adddisplay();
if(!string_key(lincnt))
{
_initvar();
}
return 0;
}
void m_commuicatedisplay(void)
{
U8* Menu[] = {"电缆 RS-232", "红外通讯口", "电缆 RS-485"}; //菜单内容
S16 Choice;
while(1)
{
_cls();
_PutString(1, 4, "选择通讯方式\n");
_draw_border(3,3,16,9);
_lcd_setcursor(0, 5, 5, 1);//关闭光标
Choice = PopUpMenu(4,4,16,9, Menu, "123", 3, 3, m_commuicatemenuid, 0, 0, NULL, 0 );
switch(Choice)
{
case 0 : return ;
break;
case 1 :
{
_setcomport(PORT);//电缆RS-232
m_commuicatemenuid=1;
}
break;
case 2 :
{
_setcomport(INFRARED);//红外通讯口
m_commuicatemenuid=2;
}
break;
case 3 : m_commuicatemenuid=3;
//电缆RS-485
break;
default:
return ;
}
}
}
U8 m_commuicate(void)
{
// _initvar();
m_commuicatedisplay();
return 0;
}
void m_xunidisplay(void)
{
_cls();
_lcd_setcursor(4, 5, 5, 1);//打开光标
_PutString(0, 0, "用户名:\n");//第2行
_PutString(1, 0, "密 码:\n");//第3行
_gotoxy(7,0);//光标指向第0行输入
}
U8 m_xuni()//虚拟专用网设置
{
U8 lincnt;
lincnt=1;
_initvar();
m_xunidisplay();
if(!string_key(lincnt))
{
_initvar();
}
return 0;
}
void m_maichongdisplay(void)
{
_cls();
_lcd_setcursor(4, 5, 5, 1);//打开光标
_PutString(0, 0, " 端口号:\n");//第2行
_PutString(1, 0, " 测量点:\n");//第3行
_PutString(2, 0, "脉冲属性:\n");//第2行
_PutString(3, 0, "电表常数:\n");//第3行
_gotoxy(9,0);//光标指向第0行输入
}
U8 m_maichong()//终端脉冲配置参数
{
U8 lincnt;
lincnt=3;
_initvar();
m_maichongdisplay();
if(!string_key(lincnt))
{
_initvar();
}
return 0;
}
void m_chaobiaodisplay()
{
_cls();
_lcd_setcursor(4, 5, 5, 1);//打开光标
_PutString(0, 0, "抄表间隔时间:\n");//第2行
_gotoxy(13,0);//光标指向第0行输入
}
U8 m_chaobiao()//抄表间隔
{
U8 lincnt;
lincnt=0;
_initvar();
m_chaobiaodisplay();
if(!string_key(lincnt))
{
_initvar();
}
return 0;
}
void m_canshudisplay()
{
_cls();
_lcd_setcursor(4, 5, 5, 1);//打开光标
_PutString(0, 0, " 测量点号:\n");
_PutString(1, 0, "电压互感器倍率:\n");
_PutString(2, 0, "电流互感器倍率:\n");
_PutString(3, 0, " 额定电压:\n");
_PutString(4, 0, " 最大电流:\n");
_PutString(5, 0, " 接线方式:\n");
_gotoxy(15,0);//光标指向第0行输入
}
U8 m_canshu()//测量点基本参数
{
U8 lincnt;
lincnt=5;
_initvar();
m_canshudisplay();
if(!string_key(lincnt))
{
_initvar();
}
return 0;
}
U8 m_close()//关机
{
_powerdown(0);
return 0;
}
U8 m_command(void)
{
U8* Menu[] = {"修改参数", "招 测", "返 回"}; //菜单内容
S16 Choice;
while(1)
{
_cls();
_PutString(1, 4, "选择操作类型\n");
_draw_border(4,3,15,9);
_lcd_setcursor(0, 5, 5, 1);//关闭光标
Choice = PopUpMenu(6,4,16,9, Menu, "123", 3, 3, 1, 0, 0, NULL, 0 );
m_submenuid=Choice;
switch(Choice)
{
case 0 : return 0;
break;
case 1 : m_set();//修改参数
break;
case 2 : m_call();//招测
break;
case 3 :
{
m_return();//返回
return 0;
}
default:
return 0;
}
}
}
void m_call(void)
{
lenth[0]=0x31;
lenth[1]=0x00;
AFN=0x0a;
C=0x4b;
SEQ=0x60;
if(m_menuid==1)//IP和APN
{
m_callip();
}
if(m_menuid==2)//终端地址
{
m_add();
}
if(m_menuid==3)//虚拟专用网
{
m_callxuni();
}
if(m_menuid==4)//终端脉冲
{
m_callmaichong();
}
if(m_menuid==5)//抄表间隔
{
m_callchaobiao();
}
if(m_menuid==6)//测量表基本参数
{
m_callcanshu();
}
receive_data();
}
void m_callip()
{
U16 datacnt,auxcnt;//Data的数组长度
datacnt=4;
auxcnt=0;
Data[0]=0x00;//p0
Data[1]=0x00;
Data[2]=0x04;//DT1
Data[3]=0x00;//DT2
_senddata(lenth,AFN,C,SEQ,Data,datacnt,NULL,auxcnt);
}
void m_callxuni()
{
U16 datacnt,auxcnt;//Data的数组长度
datacnt=4;
auxcnt=0;
Data[0]=0x00;//p0
Data[1]=0x00;
Data[2]=0x80;//DT1
Data[3]=0x01;//DT2
_senddata(lenth,AFN,C,SEQ,Data,datacnt,NULL,auxcnt);
}
void m_callmaichong()
{
U16 datacnt,auxcnt;//Data的数组长度
datacnt=4;
auxcnt=0;
Data[0]=0x00;//p0
Data[1]=0x00;
Data[2]=0x04;//DT1
Data[3]=0x01;//DT2
_senddata(lenth,AFN,C,SEQ,Data,datacnt,NULL,auxcnt);
}
void m_callchaobiao()
{
U16 datacnt,auxcnt;//Data的数组长度
datacnt=4;
auxcnt=0;
Data[0]=0x00;//p0
Data[1]=0x00;
Data[2]=0x80;//DT1
Data[3]=0x02;//DT2
_senddata(lenth,AFN,C,SEQ,Data,datacnt,NULL,auxcnt);
}
void m_callcanshu()
{
U16 datacnt,auxcnt;//Data的数组长度
datacnt=4;
auxcnt=0;
}
void receive_data(void)
{
U8 i=30;
U16 ll;
// _save_video(2,2,19,6,1,buf,1); /* 保存屏幕区域 */
// _draw_border(2,2,19,6); /* 画矩型框 */
_cls();
while(i>0)//在这段时间内不断检查是否收到数据
{
ll=_convertdata(100,10);//连续两个字符的最多等待时间为50ms
if(ll==0)
{
_cls();
if(m_submenuid==2)
{
_PutString(4,3,"接收成功!\n");//第0行
_PutString(5,3,"按任意键查看数据!\n");//第0行
_bioskey(0);
if(m_menuid==1)
{
m_ip();
}
}
else if(m_submenuid==1)
{
_PutString(4,3,"接收成功!\n");//第0行
_PutString(5,3,"按任意键返回!\n");//第0行
_bioskey(0);
}
break;
}
else
{
if(i==30)
{
m_setip();
_PutString(2,3,"发送数据.....1\n");// 显示提示文字
_PutString(3,3,"接收数据.....1\n");// 显示提示文字
}
if(i==20)
{
_gotoxy(17,3);
_putch(DEL);
_putch(50);
_gotoxy(17,2);
_putch(DEL);
_putch(50);
m_setip();
}
if(i==10)
{
_gotoxy(17,3);
_putch(DEL);
_putch(51);
_gotoxy(17,2);
_putch(DEL);
_putch(51);
m_setip();
}
if(i==1)
{
_PutString(4,3,"接收超时....\n");//第0行
_PutString(5,3,"按任意键返回!\n");//第0行
_bioskey(0);
break;
}
}
i--;
}
// _restore_video(buf); /* 恢复屏幕区域 */
}
void m_set(void)
{
if(m_menuid==1)
{
m_ip();
}
if(m_menuid==2)
{
m_add();
}
_initvar();
}
void m_return(void)
{
_initvar();
}
void m_setip(void)
{
U8 centralip[10];//主IP
U16 portt=0;
U8 port[2];
U8 apn[16];
U8 m=0;
U8 ad[6];
U8 i;
lenth[0]=0xd9;
lenth[1]=0x00;
AFN=0x04;
C=0x4a;
SEQ=0x70;
for(i=0;i<10;i++)
{
centralip[i]=0;
}
for(i=0;i<16;i++)
{
apn[i]=0;
}
i=0;
while(i<linelen[0])
{
while((str[0][i]!=46)&&(i<linelen[0]))
{
centralip[m]=centralip[m]*10+str[0][i];
i++;
}
m++;
i++;
}
for(i=0;i<linelen[1];i++)
{
portt=portt*10+str[1][i];
}
i=0;
do
{
ad[i]=portt%16;
portt=portt/16;
i++;
}while (portt);
port[0]=ad[1];
port[0]=ad[0]+port[0]*16;
port[1]=ad[3];
port[1]=ad[2]+port[1]*16;
for(i=0;i<linelen[8];i++)
{
apn[i]=str[8][i];
}
Data[0]=0x00;//p0
Data[1]=0x00;
Data[2]=0x04; //DT1
Data[3]=0x00;
for(i=4;i<8;i++)
{
Data[i]=centralip[i-4];
}
Data[8]=port[0];
Data[9]=port[1];
for(i=10;i<14;i++)
{
Data[i]=centralip[i-10];
}
Data[14]=port[0];
Data[15]=port[1];
for(i=16;i<28;i++)
{
Data[i]=0x11;
}
for(i=0;i<linelen[8];i++)
{
Data[28+i]=apn[i];
}
for(i=linelen[8];i<18;i++)
{
Data[28+i]=0x00;
}
_senddata(lenth,AFN,C,SEQ,Data,46,NULL,0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -