📄 device_driver(c_language).txt
字号:
#include "d:\emc\ctools.h"
void SetCom(void);
void storedata(void);
void mywrite(unsigned int Port,unsigned int value);
unsigned int myread(unsigned int Port);
void signal(unsigned character,unsigned error);
unsigned char songbuffer[19],recevbuffer[30];
int kkk=0;
int lljnum=1;
int statusread=0;
int commandstatus=0;
/*************************************************************************
****************** 自来水公司RTU程序 主 任 务
读入两个流量计的数据,存入40200为首寄存器 *******************
*************************************************************************/
void main(void)
{
int i,number; /*number为尝试发送次数*/
int history_status;
SetCom();number=0;history_status=0;
install_handler(com1,signal);
/*****************清接收区******************************************/
for(i=0;i<31;i++)
{
recevbuffer[i]='\0';
}
while(TRUE)
{
interval(6,10);
settimer(6,20);
while(timer(6)>0){release_processor();}
lljnum=1;
/*****************清接收区******************************************/
for(i=0;i<30;i++)
{
recevbuffer[i]='\0';
}
/*****************清接收区******************************************/
release_processor();;
while(lljnum<7)
{switch(lljnum)
{ /******************************流量计1瞬时流量***********************/
case 1:
songbuffer[0]='{';songbuffer[1]='0';songbuffer[2]='1';songbuffer[3]=0x3A;
songbuffer[4]='U';songbuffer[5]='P';songbuffer[6]='0';songbuffer[7]='0';
songbuffer[8]='0';songbuffer[9]='1';songbuffer[10]='\r';songbuffer[11]='\n';
release_processor();;
if(commandstatus==0)
{
interval(15,10); /*超时*/
settimer(15,4);
fputc('\n',com1);
fputs(songbuffer,com1);
commandstatus=1;
}
release_processor();;
while(timer(15)>0){release_processor();}
if(timer(15)==0)
{ number++;commandstatus=0;
}
if((number>0)&&(commandstatus==0))
{ lljnum=2;number=0;
}
release_processor();;
release_processor();;
/******************** 存储到40200起始30字节内 **********************/
if (statusread==1)
{
if((recevbuffer[10]>45)&&(recevbuffer[11]>45)&&(recevbuffer[12]>45)
&&(recevbuffer[13]>45)&&(recevbuffer[14]>45)&&(recevbuffer[15]>45)
&&(recevbuffer[16]>45)&&(recevbuffer[10]<58)&&(recevbuffer[11]<58)
&&(recevbuffer[12]<58)&&(recevbuffer[13]<58)&&(recevbuffer[14]<58)
&&(recevbuffer[15]<58)&&(recevbuffer[16]<58))
{
for(i=0;i<30;i++)
{
mywrite(40200+i,recevbuffer[i]);
}
}
statusread=0;lljnum=2;commandstatus=0;
/*fputs(recevbuffer,com1); 发送到com1*/
}
release_processor();;
kkk=0;
/*****************清接收区******************************************/
for(i=0;i<30;i++)
{
recevbuffer[i]='\0';
}
/*****************清接收区******************************************/
break;
/*****************流量计1累计流量******************************************/
case 2 :
songbuffer[0]='{';songbuffer[1]='0';songbuffer[2]='1';songbuffer[3]=0x3A;
songbuffer[4]='U';songbuffer[5]='P';songbuffer[6]='0';songbuffer[7]='0';
songbuffer[8]='0';songbuffer[9]='2';songbuffer[10]='\r';songbuffer[11]='\n';
if(commandstatus==0)
{
interval(15,10); /*超时*/
settimer(15,4);
release_processor();;
fputs(songbuffer,com1);
commandstatus=1;
}
while(timer(15)>0){release_processor();}
if(timer(15)==0)
{ number++;commandstatus=0;
}
if((number>0)&&(commandstatus==0))
{ lljnum=3;number=0;
}
release_processor();;
release_processor();;
/******************* * 存储到40230起始30字节内 **********************/
if (statusread==1)
{
if((recevbuffer[13]>47)&&(recevbuffer[14]>47)&&(recevbuffer[15]>47)
&&(recevbuffer[16]>47)&&(recevbuffer[17]>47)&&(recevbuffer[18]>47)
&&(recevbuffer[19]>47)
&&(recevbuffer[13]<58)&&(recevbuffer[14]<58)
&&(recevbuffer[15]<58)&&(recevbuffer[16]<58)&&(recevbuffer[17]<58)
&&(recevbuffer[18]<58)&&(recevbuffer[19]<58))
{
for(i=0;i<30;i++)
{
mywrite(40230+i,recevbuffer[i]);
}
}
statusread=0;lljnum=3;commandstatus=0;
/*fputs(recevbuffer,com1); 发送到com1*/
}
release_processor();;
kkk=0;
/*****************清接收区******************************************/
for(i=0;i<30;i++)
{
recevbuffer[i]='\0';
}
release_processor();;
/*****************清接收区******************************************/
break;
/*****************流量计2瞬时流量******************************************/
case 3 :
songbuffer[0]='{';songbuffer[1]='0';songbuffer[2]='2';songbuffer[3]=0x3A;
songbuffer[4]='U';songbuffer[5]='P';songbuffer[6]='0';songbuffer[7]='0';
songbuffer[8]='0';songbuffer[9]='1';songbuffer[10]='\r';songbuffer[11]='\n';
if(commandstatus==0)
{
interval(15,10); /*超时*/
settimer(15,4);
fputs(songbuffer,com1);
commandstatus=1;
}
release_processor();;
while(timer(15)>0){release_processor();}
if(timer(15)==0)
{ number++;commandstatus=0;
}
if((number>0)&&(commandstatus==0))
{ lljnum=4;number=0;
}
release_processor();;
/******************* * 存储到40260起始30字节内 **********************/
if (statusread==1)
{
if((recevbuffer[10]>47)&&(recevbuffer[11]>47)&&(recevbuffer[12]>47)
&&(recevbuffer[13]>47)&&(recevbuffer[14]>47)&&(recevbuffer[15]>47)
&&(recevbuffer[16]>47)&&(recevbuffer[10]<58)&&(recevbuffer[11]<58)
&&(recevbuffer[12]<58)&&(recevbuffer[13]<58)&&(recevbuffer[14]<58)
&&(recevbuffer[15]<58)&&(recevbuffer[16]<58))
{
for(i=0;i<30;i++)
{
mywrite(40260+i,recevbuffer[i]);
}
}
statusread=0;lljnum=4;commandstatus=0;
/*fputs(recevbuffer,com1); 发送到com1*/
}
release_processor();;
kkk=0;
/*****************清接收区******************************************/
for(i=0;i<30;i++)
{
recevbuffer[i]='\0';
}
/*****************清接收区******************************************/
break;
/*****************流量计2累计流量******************************************/
case 4 :
songbuffer[0]='{';songbuffer[1]='0';songbuffer[2]='2';songbuffer[3]=0x3A;
songbuffer[4]='U';songbuffer[5]='P';songbuffer[6]='0';songbuffer[7]='0';
songbuffer[8]='0';songbuffer[9]='2';songbuffer[10]='\r';songbuffer[11]='\n';
if(commandstatus==0)
{
interval(15,10); /*超时*/
settimer(15,4);
fputs(songbuffer,com1);
commandstatus=1;
}
release_processor();;
while(timer(15)>0){release_processor();}
if(timer(15)==0)
{ number++;commandstatus=0;
}
if((number>0)&&(commandstatus==0))
{ lljnum=5;number=0;
}
release_processor();;
release_processor();;
/******************* * 存储到40290起始30字节内 **********************/
if (statusread==1)
{
if((recevbuffer[10]>47)&&(recevbuffer[11]>47)&&(recevbuffer[12]>47)
&&(recevbuffer[13]>47)&&(recevbuffer[14]>47)&&(recevbuffer[15]>47)
&&(recevbuffer[16]>47)&&(recevbuffer[10]<58)&&(recevbuffer[11]<58)
&&(recevbuffer[12]<58)&&(recevbuffer[13]<58)&&(recevbuffer[14]<58)
&&(recevbuffer[15]<58)&&(recevbuffer[16]<58))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -