<nobr id="zkazv"></nobr>

      午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
      三菱FX系列PLC編程口通信源代碼

      感謝網(wǎng)友visualboy提供資料。 Sinan整理
      為便于網(wǎng)上瀏覽,以下文檔增加了全角字符,>>此處下載源文件fx_comm.h,可直接用于編譯

      fx_comm.h

      #define DELAY_TIMES 30000L
      #define TRUE 1
      #define FALSE 0
      #define TRUE 1
      #define FALSE 0
      #define FORCE_ON 0x37
      #define FORCE_OFF 0x38
      void init_plc(void);
      int check_plc(void);
      int _read_data_register(unsigned int uAddress,unsigned int number);
      int _read_mdata_register(unsigned int uAddress,unsigned int number);
      int _write_data_register(unsigned int uAddress,unsigned int number);
      int _force_m_contact(unsigned int uAddress,unsigned char ucOn_off);
      int read_data_register(unsigned int uAddress,unsigned int number);
      int read_mdata_register(unsigned int uAddress,unsigned int number);
      int write_data_register(unsigned int uAddress,unsigned int number);
      int force_m_contact(unsigned int uAddress,unsigned char ucOn_off);
      int _read_m_register(unsigned int uAddress,unsigned int number);
      int read_m_register(unsigned int uAddress,unsigned int number);
      int TESTING=0;
      unsigned int uRead_value[25];
      unsigned int uWrite_value[25];
      unsigned int COMM_PORT=1;
      unsigned int STATS_PORT=0x2fd;
      unsigned int DATA_PORT=0x2f8;


      void init_plc(void)
      { _AX=0xfa;
         _DX=COMM_PORT;
         geninterrupt(0x14);
         while((inportb(STATS_PORT)&1)!=0) inportb(DATA_PORT);
       
      }
      //返回頂部


      int check_plc(void)
      { long lTmp;
         if(TESTING==1)return TRUE;
         init_plc();
         for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
         { if((inportb(STATS_PORT)&0x20)!=0)
               break;
         }
         if(lTmp>=DELAY_TIMES)
            return(FALSE);
         outportb(DATA_PORT,5);
         disable();
         for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
         { if((inportb(STATS_PORT)&1)!=0)
               break;
         }
         if(lTmp>=DELAY_TIMES)
         {   enable();
            return(FALSE);
         }
         if((lTmp=inportb(DATA_PORT))==6)
         {    enable();
            return(TRUE);
         }
         else
         {    enable();
            return(FALSE);
         }
      }
      //返回頂部


      int read_data_register(unsigned int uAddress,unsigned int number)
      {   int i;
         for(i=0;i<3;i++)
            if(_read_data_register(uAddress,number)==TRUE)
               return TRUE;
         return FALSE;
      }
      //返回頂部


      int _read_data_register(unsigned int uAddress,unsigned int number)
      { unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
         unsigned char uReceive[104];
         unsigned int uTmp;
         unsigned int uSum;
         unsigned int num;
         long lTmp;
         int i,j;
         if(TESTING==1)
         { for(i=0;i<number;i++)uRead_value[i]=0;
            return TRUE;
         }
         init_plc();
         num=number*2;
         if((num/16)>=10)
            uSend[6]=(unsigned char)(num/16+0x41-10);
         else
            uSend[6]=(unsigned char)(num/16+0x30);
         if((num%16)>=10)
            uSend[7]=(unsigned char)((num%16)+0x41-10);
         else
            uSend[7]=(unsigned char)((num%16)+0x30);
         uAddress=uAddress*2+0x1000;
         uTmp=uAddress & 0x000f;
         uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>4) & 0x000f;
         uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>8) & 0x000f;
         uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>12)&0x000f;
         uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uSum=0;
         for(i=1;i<9;i++)
            uSum=uSum+(unsigned char)uSend[i];
         uTmp=uSum&0x000f;
         uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uSum>>4)&0x000f;
         uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

         for(i=0;i<11;i++)
         { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
            { if((inportb(STATS_PORT)&0x20)!=0)
                  break;
            }
            if(lTmp>=DELAY_TIMES)
            {
               
               return(FALSE);
            }
            outportb(DATA_PORT,uSend[i]);
         }
         disable();
       
         for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
         { if((inportb(STATS_PORT)&1)!=0)
               break;
         }
         if(lTmp>=DELAY_TIMES)
         {
            enable();
            return(FALSE);
         }
         uReceive[0]=inportb(DATA_PORT);
         if(uReceive[0]!=2)
         {
            enable();
            return(FALSE);
         }
         for(i=1;i<number*4+4;i++)
         { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
            { if((inportb(STATS_PORT)&1)!=0)
                  break;
            }
            if(lTmp>=DELAY_TIMES)
            {
               enable();
               return(FALSE);
            }
            uReceive[i]=inportb(DATA_PORT);
         }
         enable();
         uSum=0;
         for(i=1;i<number*4+2;i++)
            uSum=uSum+(unsigned int)uReceive[i];
         uTmp=uSum&0xf;
         uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
       
         if((unsigned char)uTmp!=uReceive[number*4+3]) return(FALSE);
         uTmp=(uSum>>4)&0xf;
         uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
       
         if((unsigned char)uTmp!=uReceive[number*4+2]) return(FALSE);
         for(j=0;j<number;j++)
         {   for(i=j*4+1;i<j*4+5;i++)
               uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
            uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];
         }
         return TRUE;
      }
      //返回頂部

       

      int read_mdata_register(unsigned int uAddress,unsigned int number)
      {   int i;
         for(i=0;i<3;i++)
            if(_read_mdata_register(uAddress,number)==TRUE)
               return TRUE;
         return FALSE;
      }
      //返回頂部


      int _read_mdata_register(unsigned int uAddress,unsigned int number)
      { unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
         unsigned char uReceive[104];
         unsigned int uTmp;
         unsigned int uSum;
         unsigned int num;
         long lTmp;
         int i,j;
         if(TESTING==1)
         { for(i=0;i<number;i++)uRead_value[i]=0;
            return TRUE;
         }
         init_plc();
         num=number*2;
         if((num/16)>=10)
            uSend[6]=(unsigned char)(num/16+0x41-10);
         else
            uSend[6]=(unsigned char)(num/16+0x30);
         if((num%16)>=10)
            uSend[7]=(unsigned char)((num%16)+0x41-10);
         else
            uSend[7]=(unsigned char)((num%16)+0x30);
         /*uAddress=uAddress*2+0x1000;*/
         uTmp=uAddress & 0x000f;
         uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>4) & 0x000f;
         uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>8) & 0x000f;
         uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>12)&0x000f;
         uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uSum=0;
         for(i=1;i<9;i++)
            uSum=uSum+(unsigned char)uSend[i];
         uTmp=uSum&0x000f;
         uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uSum>>4)&0x000f;
         uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         for(i=0;i<11;i++)
         { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
            { if((inportb(STATS_PORT)&0x20)!=0)
                  break;
            }
            if(lTmp>=DELAY_TIMES)
            {
               
               return(FALSE);
            }
            outportb(DATA_PORT,uSend[i]);
         }
         disable();
       
         for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
         { if((inportb(STATS_PORT)&1)!=0)
               break;
         }
         if(lTmp>=DELAY_TIMES)
         {
            enable();
            return(FALSE);
         }
         uReceive[0]=inportb(DATA_PORT);
         if(uReceive[0]!=2)
         {
            enable();
            return(FALSE);
         }
         for(i=1;i<number*4+4;i++)
         { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
            { if((inportb(STATS_PORT)&1)!=0)
                  break;
            }
            if(lTmp>=DELAY_TIMES)
            {
               enable();
               return(FALSE);
            }
            uReceive[i]=inportb(DATA_PORT);
         }
         enable();
         uSum=0;
         for(i=1;i<number*4+2;i++)
            uSum=uSum+(unsigned int)uReceive[i];
         uTmp=uSum&0xf;
         uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
       
         if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);
         uTmp=(uSum>>4)&0xf;
         uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
       
         if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);
         for(j=0;j<number;j++)
         {   for(i=j*4+1;i<j*4+5;i++)
               uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
            uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];
         }
         return TRUE;
      }
      //返回頂部

       

      int write_data_register(unsigned int uAddress,unsigned int number)
      {   int i;
         for(i=0;i<3;i++)
            if(_write_data_register(uAddress,number)==TRUE)
               return TRUE;
         return FALSE;
      }
      //返回頂部


      int _write_data_register(unsigned int uAddress,unsigned int number)
      { unsigned char uSend[111];
         unsigned int uTmp,uSum,num;
         long lTmp;
         int i;
         if(TESTING==1)return TRUE;
       
         init_plc();
         uSend[0]=2;
         uSend[1]=0x31;
         uSend[number*4+8]=3;
         num=(number*2)/16;
         if(num>=10)uSend[6]=num+0x41-10;
         else    uSend[6]=num+0x30;
         num=(number*2)%16;
         if(num>=10)uSend[7]=num+0x41-10;
         else uSend[7]=num+0x30;
         uAddress=0x1000+2*uAddress;
         uTmp=uAddress&0x000f;
         uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>4)&0x000f;
         uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>8)&0x000f;
         uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>12)&0x000f;
         uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         for(i=0;i<number;i++)
         {
            uTmp=uWrite_value[i]&0x000f;
            uSend[i*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
            uTmp=(uWrite_value[i]>>4)&0x000f;
            uSend[i*4+8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
            uTmp=(uWrite_value[i]>>8)&0x000f;
            uSend[i*4+11]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
            uTmp=(uWrite_value[i]>>12)&0x000f;
            uSend[i*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         }
         uSum=0;
         for(i=1;i<9+number*4;i++)
            uSum+=uSend[i];
         uTmp=uSum&0x000f;
         uSend[number*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uSum>>4)&0x000f;
         uSend[number*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         for(i=0;i<11+number*4;i++)
         { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
            { if((inportb(STATS_PORT)&0x20)!=0)
                  break;
            }
            if(lTmp>=DELAY_TIMES)
            {
               /*enable();*/
               return(FALSE);
            }
            outportb(DATA_PORT,uSend[i]);
         }
         disable();
         for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
         { if((inportb(STATS_PORT)&1)!=0)
               break;
         }
         if(lTmp>=DELAY_TIMES)
         {
             enable();
            return(FALSE);
         }
         if(inportb(DATA_PORT)!=6)
         {
            enable();
            return(FALSE);
         }
         else
         {
            enable();
            return(TRUE);
         }
      }

       


      int force_m_contact(unsigned uAddress,unsigned char ucOn_off)
      {   int i;
         for(i=0;i<3;i++)
            if(_force_m_contact(uAddress,ucOn_off)==TRUE)
               return TRUE;
         return FALSE;
      }
      //返回頂部

      int _force_m_contact(unsigned uAddress,unsigned char ucOn_off)
      { unsigned uSend[]={2,0x37,0x30,0x30,0x30,0x30,3,0x30,0x30};
         unsigned uTmp,uSum,i;
         long lTmp;
         if(TESTING==1)return TRUE;
         init_plc();
         uAddress=uAddress+0x800;
         uSend[1]=ucOn_off;
         uTmp=uAddress&0x000f;
         uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>4)&0x000f;
         uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>8)&0x000f;
         uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>12)&0x000f;
         uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uSum=0;
         for(i=1;i<7;i++)
            uSum+=uSend[i];
         uTmp=uSum&0x000f;
         uSend[8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uSum>>4)&0x000f;
         uSend[7]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         for(i=0;i<9;i++)
         { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
            { if((inportb(STATS_PORT)&0x20)!=0)
                  break;
            }
            if(lTmp>=DELAY_TIMES)
            {
               enable();
               return(FALSE);
            }
            outportb(DATA_PORT,uSend[i]);
         }
         disable();
         for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
         { if((inportb(STATS_PORT)&1)!=0)
               break;
         }
         if(lTmp>=DELAY_TIMES)
         {
            enable();
            return(FALSE);
         }
         if(inportb(DATA_PORT)!=6)
         {
            enable();
            return(FALSE);
         }
         else
         { enable();
            return(TRUE);
         }
      }
      //返回頂部

       

      int read_m_register(unsigned int uAddress,unsigned int number)
      {   int i;
         for(i=0;i<3;i++)
            if(_read_m_register(uAddress,number)==TRUE)
               return TRUE;
         return FALSE;
      }
      //返回頂部

      int _read_m_register(unsigned int uAddress,unsigned int number)
      { unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
         unsigned char uReceive[54];
         unsigned int uTmp;
         unsigned int uSum;
         unsigned int num;
         long lTmp;
         int i,j;
         if(TESTING==1)
         { for(i=0;i<number;i++)uRead_value[i]=0;
            return TRUE;
         }
         init_plc();
         num=number;
         if((num/16)>=10)
            uSend[6]=(unsigned char)(num/16+0x41-10);
         else
            uSend[6]=(unsigned char)(num/16+0x30);
         if((num%16)>=10)
            uSend[7]=(unsigned char)((num%16)+0x41-10);
         else
            uSend[7]=(unsigned char)((num%16)+0x30);
         uAddress=uAddress/8+0x100;
         uTmp=uAddress & 0x000f;
         uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>4) & 0x000f;
         uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>8) & 0x000f;
         uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uAddress>>12)&0x000f;
         uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uSum=0;
         for(i=1;i<9;i++)
            uSum=uSum+(unsigned char)uSend[i];
         uTmp=uSum&0x000f;
         uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
         uTmp=(uSum>>4)&0x000f;
         uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

         for(i=0;i<11;i++)
         { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
            { if((inportb(STATS_PORT)&0x20)!=0)
                  break;
            }
            if(lTmp>=DELAY_TIMES)
            {
               /*enable();*/
               return(FALSE);
            }
            outportb(DATA_PORT,uSend[i]);
         }
         disable();
       
       
         for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
         { if((inportb(STATS_PORT)&1)!=0)
               break;
         }
         if(lTmp>=DELAY_TIMES)
         {
            enable();
            return(FALSE);
         }
         uReceive[0]=inportb(DATA_PORT);
         if(uReceive[0]!=2)
         {
            enable();
            return(FALSE);
         }
         for(i=1;i<number*2+4;i++)
         { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
            { if((inportb(STATS_PORT)&1)!=0)
                  break;
            }
            if(lTmp>=DELAY_TIMES)
            {
               enable();
               return(FALSE);
            }
            uReceive[i]=inportb(DATA_PORT);
         }
         enable();
         uSum=0;
         for(i=1;i<number*2+2;i++)
            uSum=uSum+(unsigned int)uReceive[i];
         uTmp=uSum&0xf;
         uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
       
         if((unsigned char)uTmp!=uReceive[number*2+3]) return(FALSE);
         uTmp=(uSum>>4)&0xf;
         uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
       
         if((unsigned char)uTmp!=uReceive[number*2+2]) return(FALSE);
         for(j=0;j<number;j++)
         {   for(i=j*2+1;i<j*2+3;i++)
               uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
            uRead_value[j]=((uReceive[j*2+1])<<4)+uReceive[j*2+2];
         }
         return TRUE;
      }
      //返回頂部

       

       




      請(qǐng)尊重站長(zhǎng)的勞動(dòng),轉(zhuǎn)載時(shí)請(qǐng)附上Sinan的郵箱或主頁(yè)鏈接
      sinan@sina.com  http://www.kblhh.cn
      主站蜘蛛池模板: 中文有无人妻VS无码人妻激烈| 做暖暖视频在线看片免费| 国产亚洲精品久久77777| 亚洲成年轻人电影网站WWW| 日韩av片无码一区二区不卡| 亚洲精品入口一区二区乱| 日本成熟少妇喷浆视频| 色偷偷www.8888在线观看| 亚洲国产精品热久久一区| 亚洲熟妇色xxxxx亚洲| 国产精品福利中文字幕| 黑人精品一区二区三区不| 国产精品污双胞胎在线观看| 少妇人妻偷人免费观看| 日韩一区二区三区亚洲一| 国产亚洲精品久久综合阿香| 国产午夜成人无码免费看| 亚洲精品在线二区三区| 一个色综合亚洲热色综合| 久久99久国产麻精品66| 久久人人爽人人爽人人av| 亚洲国产精品综合色在线| 综合在线 亚洲 成人 欧美 | 午夜精品福利一区二区三| 亚洲码与欧洲码区别入口| 久久高潮少妇视频免费| 国产午夜影视大全免费观看| 北岛玲亚洲一区二区三区| 搡老妇女老熟女一区二区| 欧美日本激情| 动漫av网站免费观看| 国产精品国产精品一区精品 | 偷窥国产亚洲免费视频| 亚洲夂夂婷婷色拍ww47| 亚洲中文字幕有综合久久| 国产乱码精品一区二区三| 一本无码在线观看| 欧美高清狂热视频60一70| 国产精品成人午夜久久| 日韩女同一区二区三区久久| 国模少妇无码一区二区三区|