⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subfun.cpp

📁 Borland c++编写
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			{
			  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 + -