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

📄 101.cpp

📁 一个完整的RTU程序源码,用DOS平台,支持16串口,在天津港用的很多,8个规约103,modbus,cdt,1801,u4f
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	 }
	else if(course!=20)
	 send_no_data(acd);
     break;
     case 9:
	if(ycg>=1)
	 {
	   putheado(248);
	   if(course!=20)pdo(0x80|acd,0);
	   else pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(21,1);
	   pdo(120|0x80,1);
	   pdo(course,1);//some time it is 29
	   pdo(dlmyadd,1);//address
	   pdo(01,1);
	   pdo(07,1);
	   for(i=0;i<120;i++)
	   {
	     temp1=yc_info.yc_value[i]&0xfff;
	     if(temp1&0x0800)
	     {
	       temp1=0x0fff-temp1;
	       temp1=~temp1;
	       temp1+=1;
	     }
	     pdo(temp1&0xff,1);
	     pdo(temp1>>8,1);
	   }//for(i=0;i<120;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }//if(ycg>=1)
	else if(modc>0)
	 {
	   putheado(2*modc+8);
	   if(course!=20)pdo(0x80|acd,0);
	   else	pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(21,1);
	   pdo(modc|0x80,1);
	   pdo(course,1);//29
	   pdo(dlmyadd,1);//address
	   pdo(01,1);
	   pdo(07,1);
	   for(i=0;i<modc;i++)
	   {
	     temp1=yc_info.yc_value[i]&0xfff;
	     if(temp1&0x0800)
	     {
	       temp1=0x0fff-temp1;
	       temp1=~temp1;
	       temp1+=1;
	     }
	     pdo(temp1&0xff,1);
	     pdo(temp1>>8,1);
	    }//for(i=0;i<modxf;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }
       else  if(course!=20)
	send_no_data(acd);
     break;
     case 10:
	if(ycg>=2)
	 {
	   putheado(248);
	   if(course!=20)pdo(0x80|acd,0);
	   else	pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(21,1);
	   pdo(120|0x80,1);
	   pdo(course,1);
	   pdo(dlmyadd,1);//address
	   pdo(120+01,1);
	   pdo(0+07,1);
	   for(i=120;i<240;i++)
	    {
	      temp1=yc_info.yc_value[i]&0xfff;
	      if(temp1&0x0800)
	      {
		temp1=0x0fff-temp1;
		temp1=~temp1;
		temp1+=1;
	      }
	      pdo(temp1&0xff,1);
	      pdo(temp1>>8,1);
	    }//for(i=240;i<480;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }//if(ycg>=1)
	else if((ycg==1)&&(modc>0))
	 {
	   putheado(2*modc+8);
	   if(course!=20)pdo(0x80|acd,0);
	   else	pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(21,1);
	   pdo(modc|0x80,1);
	   pdo(course,1);
	   pdo(dlmyadd,1);//address
	   pdo(120+01,1);
	   pdo(0+07,1);
	   for(i=120;i<120+modc;i++)
	    {
	      temp1=yc_info.yc_value[i]&0xfff;
	      if(temp1&0x0800)
	      {
		temp1=0x0fff-temp1;
		temp1=~temp1;
		temp1+=1;
	      }
	      pdo(temp1&0xff,1);
	      pdo(temp1>>8,1);
	    }//for(i=0;i<modxf;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }
       else if(course!=20)
	send_no_data(acd);
     break;
     case 11:
	if(ycg>=3)
	 {
	   putheado(248);
	   if(course!=20)pdo(0x80|acd,0);
	   else	pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(21,1);
	   pdo(120|0x80,1);
	   pdo(course,1);//30?
	   pdo(dlmyadd,1);//address
	   pdo(240+01,1);
	   pdo(0+07,1);
	   for(i=240;i<360;i++)
	    {
	      temp1=yc_info.yc_value[i]&0xfff;
	      if(temp1&0x0800)
	      {
		temp1=0x0fff-temp1;
		temp1=~temp1;
		temp1+=1;
	      }
	      pdo(temp1&0xff,1);
	      pdo(temp1>>8,1);
	    }//for(i=240;i<480;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }//if(ycg>=1)
	else if((ycg==2)&&(modc>0))//ycg==2
	 {
	   putheado(2*modc+8);
	   if(course!=20)pdo(0x80|acd,0);
	   else	pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(21,1);
	   pdo(modc|0x80,1);
	   pdo(course,1);
	   pdo(dlmyadd,1);//address
	   pdo(240+01,1);
	   pdo(0+07,1);
	   for(i=240;i<240+modc;i++)
	    {
	      temp1=yc_info.yc_value[i]&0xfff;
	      if(temp1&0x0800)
	      {
		temp1=0x0fff-temp1;
		temp1=~temp1;
		temp1+=1;
	      }
	      pdo(temp1&0xff,1);
	      pdo(temp1>>8,1);
	    }//for(i=0;i<modxf;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }
       else if(course!=20)
	send_no_data(acd);
     break;
     case 12:
	if((ycg==3)&&(modc>0))
	 {
	   putheado(modc*2+8);
	   if(course!=20)pdo(0x80|acd,0);
	   else	pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(21,1);
	   pdo(modc|0x80,1);
	   pdo(course,1);
	   pdo(dlmyadd,1);//address
	   pdo(0x68+01,1);//0x168=360
	   pdo(1+07,1);
	   for(i=360;i<360+modc;i++)
	    {
	       temp1=yc_info.yc_value[i]&0xfff;
	       if(temp1&0x0800)
	       {
		 temp1=0x0fff-temp1;
		 temp1=~temp1;
		 temp1+=1;
	       }
	       pdo(temp1&0xff,1);
	       pdo(temp1>>8,1);
	    }//for(i=0;i<modxf;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }
       else if(course!=20)
	send_no_data(acd);
     break;
     case 13:
       if(datasource.dmuyt_yc==1)
	 {
	   putheado(10);
	   if(course!=20)pdo(0x80|acd,0);
	   else	pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(5,1);
	   pdo(1,1);
	   pdo(course,1);
	   pdo(dlmyadd,1);//address
	   pdo(0,1);//0x168=360
	   pdo(0,1);
	   pdo((peekb(hardwareset[0].address,0x300)&0xff),1);
	   pdo(0,1);
	   pdo(sum,2);
	   pdo(0x16,2);
	 }
       else if(datasource.dmuyt_yc==2)
	 {
	   putheado(12);
	   if(course!=20)pdo(0x80|acd,0);
	   else	pdo(0x80,0);
	   pdo(dlmyadd,1);//address
	   pdo(5,1);
	   pdo(2,1);
	   pdo(course,1);
	   pdo(dlmyadd,1);//address
	   pdo(0,1);//0x168=360
	   pdo(0,1);
	   pdo((peekb(hardwareset[0].address,0x300)&0xff),1);
	   pdo(0,1);
	   pdo((peekb(hardwareset[0].address,0x302)&0xff),1);
	   pdo(0,1);
	   pdo(sum,2);
	   pdo(0x16,2);
	 }
       else send_no_data(acd);
     break;
     case 14:
	     if(course!=20)
	send_no_data(acd);
     break;
     case 15:
	     if(course!=20)
	send_no_data(acd);
     break;
     case 16:
	     if(course!=20)
	send_no_data(acd);
     break;
     default:
	send_no_data(acd);
     break;
   }
}
void C101::putheado(unsigned int len)
{
  save_start=oque.start;
  save_count=(len&0xff+6);
  pdo(0x68,2);
  pdo(len&0xff,2);
  pdo(len&0xff,2);
  pdo(0x68,2);
}

void C101::res_time()
{
 time_t t;
 struct tm *gmt, *area;
 unsigned int temp;
// putenv(tzstr);
 tzset();
 t = time(NULL);
 gmt = gmtime(&t);
 set_timesyn();

 putheado(15);
 pdo(0x80,0);
 pdo(dlmyadd,1);//address
 pdo(103,1);//biaozhi
 pdo(1,1);//num
 pdo(7,1);
 pdo(dlmyadd,1);
 pdo(0,1);//addl
 pdo(0,1);//add h
   temp=(*gmt).tm_sec;		temp*=1000;
   temp+=500;///add for delay;
 pdo(temp&0xff,1);		temp>>=8;
 pdo(temp&0xff,1);	       //misecond.
 pdo((*gmt).tm_min,1);       //min
 pdo((*gmt).tm_hour,1);
   temp=(*gmt).tm_wday+1;	temp<<=5;
   temp+=(*gmt).tm_mday;
 pdo(temp&0xff,1);
 pdo((*gmt).tm_mon+1,1);
 pdo((*gmt).tm_year-100,1);
 pdo(sum,2);
 pdo(0x16,2);
}//void::

void C101::putdi(unsigned int data)
{
  ique.buf[ique.next++]=data&0xff;
  if(ique.next>=ique.size)
    ique.next=0;
  ique.count++;
  if(ique.count>ique.size)
  {
    ique.count=ique.size;
    ique.start++;
    if(ique.start>=ique.size)
      ique.start=0;
  }//if(ique.count>ique.size)
}//void

unsigned int C101::qmod(unsigned int par1,unsigned int par2)
{
 if(par1>=par2)return(par1-(par1/par2)*par2);
 else return(par1);
}//unsigned int

void C101::re_send()
{
 oque.count=save_count;
 oque.start=save_start;
}//unsigned int

void C101::res_ym(unsigned int grp)
{
  int ymg,modm,i;
  unsigned int temp;
  unsigned long test;
  ymg=datasource.total_ym/32;
  modm=datasource.total_ym-ymg*32;
  if(soe_ctl[nportno].count!=0)
    acd=0x20;
  else
    acd=0;
  switch(grp)
  {
     case 1:
	if(ymg>=1)
	 {
	   putheado(230);
	   pdo(0x80|acd,0);
	   pdo(dlmyadd,1);//address
	   pdo(15,1);
	   pdo(32,1);
	   pdo(38,1);
	   pdo(dlmyadd,1);//address
	   for(i=0;i<32;i++)
	    {
	     temp=i+0xc01;
	     pdo(temp&0xff,1);
	     pdo(temp>>8,1);
	     test=ym_info.ym_value[i];
	     pdo(test&0xff,1);
	     pdo((test>>8)&0xff,1);
	     pdo((test>>16)&0xff,1);
	     pdo((test>>24),1);
	     pdo(0,1);
	    }//for(i=0;i<240;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }//if(yxg>=1)
	else if(modm>0)
	 {
	   putheado(modm+6);
	   pdo(0x80|acd,0);
	   pdo(dlmyadd,1);//address
	   pdo(15,1);
	   pdo(modm,1);
	   pdo(38,1);
	   pdo(dlmyadd,1);//address
	   for(i=0;i<modm;i++)
	    {
	     temp=i+0xc01;
	     pdo(temp&0xff,1);
	     pdo(temp>>8,1);
	     test=ym_info.ym_value[i];
	     pdo(test&0xff,1);
	     pdo((test>>8)&0xff,1);
	     pdo((test>>16)&0xff,1);
	     pdo((test>>24),1);
	     pdo(0,1);
	    }//for(i=0;i<modxf;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }
	 else send_no_data(acd);
     break;
     case 2:
	if(ymg>=2)
	 {
	   putheado(230);
	   pdo(0x80|acd,0);
	   pdo(dlmyadd,1);//address
	   pdo(15,1);
	   pdo(32,1);
	   pdo(39,1);
	   pdo(dlmyadd,1);//address
	   for(i=32;i<64;i++)
	    {
	     temp=i+0xc01;
	     pdo(temp&0xff,1);
	     pdo(temp>>8,1);
	     test=ym_info.ym_value[i];
	     pdo(test&0xff,1);
	     pdo((test>>8)&0xff,1);
	     pdo((test>>16)&0xff,1);
	     pdo((test>>24),1);
	     pdo(0,1);
	    }//for(i=0;i<240;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }//if(yxg>=1)
	else if((ymg==1)&&(modm>0))
	 {
	   putheado(modm+6);
	   pdo(0x80|acd,0);
	   pdo(dlmyadd,1);//address
	   pdo(15,1);
	   pdo(modm,1);
	   pdo(39,1);
	   pdo(dlmyadd,1);//address
	   for(i=32;i<32+modm;i++)
	    {
	     temp=i+0xc01;
	     pdo(temp&0xff,1);
	     pdo(temp>>8,1);
	     test=ym_info.ym_value[i];
	     pdo(test&0xff,1);
	     pdo((test>>8)&0xff,1);
	     pdo((test>>16)&0xff,1);
	     pdo((test>>24),1);
	     pdo(0,1);
	    }//for(i=0;i<modxf;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }
       else send_no_data(acd);
     break;
     case 3:
	if(ymg>=3)
	 {
	   putheado(230);
	   pdo(0x80|acd,0);
	   pdo(dlmyadd,1);//address
	   pdo(15,1);
	   pdo(32,1);
	   pdo(40,1);
	   pdo(dlmyadd,1);//address
	   for(i=64;i<96;i++)
	    {
	     temp=i+0xc01;
	     pdo(temp&0xff,1);
	     pdo(temp>>8,1);
	     test=ym_info.ym_value[i];
	     pdo(test&0xff,1);
	     pdo((test>>8)&0xff,1);
	     pdo((test>>16)&0xff,1);
	     pdo((test>>24),1);
	     pdo(0,1);
	    }//for(i=0;i<240;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }//if(yxg>=1)
	else if((ymg==2)&&(modm>0))
	 {
	   putheado(modm+6);
	   pdo(0x80|acd,0);
	   pdo(dlmyadd,1);//address
	   pdo(15,1);
	   pdo(modm,1);
	   pdo(40,1);
	   pdo(dlmyadd,1);//address
	   for(i=64;i<64+modm;i++)
	    {
	     temp=i+0xc01;
	     pdo(temp&0xff,1);
	     pdo(temp>>8,1);
	     test=ym_info.ym_value[i];
	     pdo(test&0xff,1);
	     pdo((test>>8)&0xff,1);
	     pdo((test>>16)&0xff,1);
	     pdo((test>>24),1);
	     pdo(0,1);
	    }//for(i=0;i<modxf;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }
	 else send_no_data(acd);
     break;
     case 4:
	if(ymg==4)
	 {
	   putheado(230);
	   pdo(0x80|acd,0);
	   pdo(dlmyadd,1);//address
	   pdo(15,1);
	   pdo(32,1);
	   pdo(41,1);
	   pdo(dlmyadd,1);//address
	   for(i=96;i<128;i++)
	    {
	     temp=i+0xc01;
	     pdo(temp&0xff,1);
	     pdo(temp>>8,1);
	     test=ym_info.ym_value[i];
	     pdo(test&0xff,1);
	     pdo((test>>8)&0xff,1);
	     pdo((test>>16)&0xff,1);
	     pdo((test>>24),1);
	     pdo(0,1);
	    }//for(i=0;i<240;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }//if(yxg>=1)
	else if((ymg==3)&&(modm>0))
	 {
	   putheado(modm+6);
	   pdo(0x80|acd,0);
	   pdo(dlmyadd,1);//address
	   pdo(15,1);
	   pdo(modm,1);
	   pdo(41,1);
	   pdo(dlmyadd,1);//address
	   for(i=96;i<96+modm;i++)
	    {
	     temp=i+0xc01;
	     pdo(temp&0xff,1);
	     pdo(temp>>8,1);
	     test=ym_info.ym_value[i];
	     pdo(test&0xff,1);
	     pdo((test>>8)&0xff,1);
	     pdo((test>>16)&0xff,1);
	     pdo((test>>24),1);
	     pdo(0,1);
	    }//for(i=0;i<modxf;i++)
	     pdo(sum,2);
	     pdo(0x16,2);
	 }
	else send_no_data(acd);
     break;
     default:
	send_no_data(acd);
     break;
   }//switch
}//unsigned int

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -