📄 subfun.cpp
字号:
{
if(i>4) // 是否在大于4位是出现FE
{
printf("%s","003\n");
Errflag=2;
}
}//end if(c!=0xFE)
break;
}
case 2:
{
if(i==7)
{
if(c==0x68) // 如果C=68第二步完成
{
i=0; // 在第一个数据中
flagchar=3; // 转到第三步
}
else
{
printf("%s","004\n"); //如果不是68错误
Errflag=2;
}
}
else
{
AddrBuff[i-1]=c; //如果I小于7取出字符并且放在地址中
}
break;
}//IF(I=7)
case 3:
{
if(i==1)
{
CtrlCode=c; // 控制码
if(CtrlCode!=0x84 && CtrlCode!=0xC4) Errflag=2;
}
if(i==2)
{
DataLeng=c;
flagchar=4; //转到第4步 case4
i=0;
}
break;
}
case 4:
{
if(DataLeng==0)
{
i=0;
flagchar=5;
}
else
{
printf("%s","005\n"); //如果数据长度不为0
Errflag=2;
}
break;
}
case 5:
{
/* if(i==1 && RCS!=c)
{
printf("%d",RCS);
Errflag=3;
}
if(i==2)
{
if(c==0x16)
{
printf("%s" ,"Success\n");
flagchar=6;
}
else
{
printf("%s","005\n");
Errflag=2;
}
}*/
/* int z;
char *Str1;
address[0]=0;
for (z=0;z<12;z++)
{
Byte2Hex(AddrBuff[z],Str1);
strcat(address,Str1);
}
flagchar=6;
break;
}
}//end switch
}
*/
delete SendStream; //延时发送
delete []TStr1;
// delete []AddrBuff;
SetCommMode(workmode, commport, baudrate); /* 设置工作模式 通讯口 波特率resume comm setting */
DisableRx();
// return Errflag;
}
//**************************************
int LwriteData2(char *Addr) //读数据DataName读到的数据名称 Getval读到的据内容 Addr读到的数据地址
{
unsigned char workmode,commport; //定义工作模试 通讯口
unsigned int baudrate; //定义波特率
if (!ComPlsInstalled()) //测试通讯内核是否安装
{
clrscr();
printf("Complus must be installed first!!! \n"); //首先必须安置通讯
getch ();
return(1);
}
GetCommMode(&workmode, &commport, &baudrate);
SetCommMode(_AUX_MODE+_mod_8D1P+_par_EVEN , 0, 1200);
CStream * SendStream; //字符流发送
SendStream=new CStream;
int i;
char * TStr1=new char [50]; //发送后读取的数据
TStr1[0]=0;
for(i=0;i<=3;i++) SendStream->Add(0xFE); // 发送四个FE
SendStream->Add(0x68);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x68);
SendStream->Add(0x04);
SendStream->Add(0x0b);
SendStream->Add(0x12+0x33);
SendStream->Add(0xE1+0x33);
Addr+=16;
int ii;
ii=16;
while(ii>=0)
{
strncat(TStr1,Addr,2); //将字符串2个地址加到TStr1中
SendStream->Add((unsigned char)Str2Hex(TStr1)+0x33);
Addr-=2;
ii=ii-2;
}
SendStream->Addcs(); //存放数据地址
SendStream->Add(0x16);
//------------------------------------------------------------------------
char *Str;
unsigned char * Buff;
Buff=(unsigned char *)SendStream->Memory();
int size=SendStream->Size();
for(i=0;i<size;i++)
{
PutAuxByte(Buff[i]);
// printf("%d\n",Buff[i]);
// getch();
}
clrscr();
EnableRx(0);
delete SendStream; //延时发送
delete []TStr1;
//delete []AddrBuff;
SetCommMode(workmode, commport, baudrate); /* 设置工作模式 通讯口 波特率resume comm setting */
DisableRx();
// return Errflag;
}
//**************************************
int LwriteData3(char *Addr) //读数据DataName读到的数据名称 Getval读到的据内容 Addr读到的数据地址
{
unsigned char workmode,commport; //定义工作模试 通讯口
unsigned int baudrate; //定义波特率
if (!ComPlsInstalled()) //测试通讯内核是否安装
{
clrscr();
printf("Complus must be installed first!!! \n"); //首先必须安置通讯
getch ();
return(1);
}
GetCommMode(&workmode, &commport, &baudrate);
SetCommMode(_AUX_MODE+_mod_8D1P+_par_EVEN , 0, 1200);
CStream * SendStream; //字符流发送
SendStream=new CStream;
int i;
char * TStr1=new char [50]; //发送后读取的数据
TStr1[0]=0;
for(i=0;i<=3;i++) SendStream->Add(0xFE); // 发送四个FE
SendStream->Add(0x68);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x68);
SendStream->Add(0x04);
SendStream->Add(0x0b);
SendStream->Add(0x13+0x33);
SendStream->Add(0xE1+0x33);
Addr+=16;
int ii;
ii=16;
while(ii>=0)
{
strncat(TStr1,Addr,2); //将字符串2个地址加到TStr1中
SendStream->Add((unsigned char)Str2Hex(TStr1)+0x33);
Addr-=2;
ii=ii-2;
}
SendStream->Addcs(); //存放数据地址
SendStream->Add(0x16);
//------------------------------------------------------------------------
char *Str;
unsigned char * Buff;
Buff=(unsigned char *)SendStream->Memory();
int size=SendStream->Size();
for(i=0;i<size;i++)
{
PutAuxByte(Buff[i]);
// printf("%d\n",Buff[i]);
// getch();
}
clrscr();
EnableRx(0);
delete SendStream; //延时发送
delete []TStr1;
//delete []AddrBuff;
SetCommMode(workmode, commport, baudrate); /* 设置工作模式 通讯口 波特率resume comm setting */
DisableRx();
// return Errflag;
}
//*********************************
int LwriteData4(char *Addr) //读数据DataName读到的数据名称 Getval读到的据内容 Addr读到的数据地址
{
unsigned char workmode,commport; //定义工作模试 通讯口
unsigned int baudrate; //定义波特率
if (!ComPlsInstalled()) //测试通讯内核是否安装
{
clrscr();
printf("Complus must be installed first!!! \n"); //首先必须安置通讯
getch ();
return(1);
}
GetCommMode(&workmode, &commport, &baudrate);
SetCommMode(_AUX_MODE+_mod_8D1P+_par_EVEN , 0, 1200);
CStream * SendStream; //字符流发送
SendStream=new CStream;
int i;
char * TStr1=new char [50]; //发送后读取的数据
TStr1[0]=0;
for(i=0;i<=3;i++) SendStream->Add(0xFE); // 发送四个FE
SendStream->Add(0x68);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x99);
SendStream->Add(0x68);
SendStream->Add(0x04);
SendStream->Add(0x0b);
SendStream->Add(0x14+0x33);
SendStream->Add(0xE1+0x33);
Addr+=16;
int ii;
ii=16;
while(ii>=0)
{
strncat(TStr1,Addr,2); //将字符串2个地址加到TStr1中
SendStream->Add((unsigned char)Str2Hex(TStr1)+0x33);
Addr-=2;
ii=ii-2;
}
SendStream->Addcs(); //存放数据地址
SendStream->Add(0x16);
//------------------------------------------------------------------------
char *Str;
unsigned char * Buff;
Buff=(unsigned char *)SendStream->Memory();
int size=SendStream->Size();
for(i=0;i<size;i++)
{
PutAuxByte(Buff[i]);
// printf("%d\n",Buff[i]);
// getch();
}
clrscr();
EnableRx(0);
/****************************************************************/
/* unsigned char c; //义返回字符
unsigned char flagchar; // 设步
unsigned char Errflag=0; // 将错误标记付0
unsigned char *AddrBuff=new unsigned char[5]; // 定义地址缓冲区
unsigned char CtrlCode; // 控制码
unsigned char DataLeng; // 数据长度
unsigned char *DataBuff; // 数据缓冲区
unsigned char RCS;
unsigned char CS; // 校验码
unsigned char DebugChar;
flagchar=1;
DataLeng=0; //初始化数据长度为0
clrscr();
i=0;
RCS=0x68;
while(Errflag==0 && flagchar!=6) //分步判断字符是否正确,并且存在缓冲区中
{
if(ReceiveChar(c,50)==0) //如果接到了数据(在1秒钟之内)
{
Errflag=1;
break;
}else
{ //接收数据从1开始
if(flagchar>1 && flagchar<5)
{
asm mov AL,RCS
asm add AL,c
asm mov RCS,AL // 先取解校验码
}
i++;
} // 第一步握手协OXFE
switch(flagchar)
{
case 1:
{
if(c!=0xFE)
{
if(c==0x68)
{
if(i==1)
{
printf("%s","001 Error\n"); //错误显示001
RCS=0x68;
Errflag=2; //2表示数据错
}
else
{
// 第一步完成 转到第二步
i=0;
flagchar=2;
}
}
else // 如果取的数不为68则为第二步错误
{
i=0;
printf("%s","002\n"); // 第二步错
Errflag=2; // 数据校验错
}//end if(c==0x68)
}
else
{
if(i>4) // 是否在大于4位是出现FE
{
printf("%s","003\n");
Errflag=2;
}
}//end if(c!=0xFE)
break;
}
case 2:
{
if(i==7)
{
if(c==0x68) // 如果C=68第二步完成
{
i=0; // 在第一个数据中
flagchar=3; // 转到第三步
}
else
{
printf("%s","004\n"); //如果不是68错误
Errflag=2;
}
}
else
{
AddrBuff[i-1]=c; //如果I小于7取出字符并且放在地址中
}
break;
}//IF(I=7)
case 3:
{
if(i==1)
{
CtrlCode=c; // 控制码
if(CtrlCode!=0x84 && CtrlCode!=0xC4) Errflag=2;
}
if(i==2)
{
DataLeng=c;
flagchar=4; //转到第4步 case4
i=0;
}
break;
}
case 4:
{
if(DataLeng==0)
{
i=0;
flagchar=5;
}
else
{
printf("%s","005\n"); //如果数据长度不为0
Errflag=2;
}
break;
}
case 5:
{
/* if(i==1 && RCS!=c)
{
printf("%d",RCS);
Errflag=3;
}
if(i==2)
{
if(c==0x16)
{
printf("%s" ,"Success\n");
flagchar=6;
}
else
{
printf("%s","005\n");
Errflag=2;
}
}*/
/* int z;
char *Str1;
address[0]=0;
for (z=0;z<12;z++)
{
Byte2Hex(AddrBuff[z],Str1);
strcat(address,Str1);
}
flagchar=6;
break;
}
}//end switch
}
*/
delete SendStream; //延时发送
delete []TStr1;
//delete []AddrBuff;
SetCommMode(workmode, commport, baudrate); /* 设置工作模式 通讯口 波特率resume comm setting */
DisableRx();
// return Errflag;
}
//*********************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -