<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕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
        主站蜘蛛池模板: 国产视频 视频一区二区| 国产破外女出血视频| 亚洲电影天堂在线国语对白| 国产成人欧美日本在线观看| 欧美成年性h版影视中文字幕| 国产精品+日韩精品+在线播放| 中文一区二区视频| 国产精品亚洲mnbav网站| 国产剧情福利AV一区二区| 撕开奶罩揉吮奶头视频| 国产理论片在线观看| 69天堂人成无码免费视频| 久久久一本精品99久久精品36| 国产精品久久久久久影视| 日韩欧美视频第一区在线观看| 亚洲女同精品一区二区久久 | 忘忧草在线社区www中国中文 | 欧美伦费免费全部午夜最新| 色婷婷婷丁香亚洲综合| 视频女同久久久一区二区三区| 国产午夜精品福利91| 漂亮的小少妇诱惑内射系列| 中文字幕在线视频免费| 国产成人禁片在线观看| 日韩人妻无码一区二区三区| 伊人成色综合人夜夜久久| 亚洲天堂精品一区二区| 日本一区二区三区免费播放视频站| 诱人的老师hd中文字幕| 精品无码国产污污污免费| 高清视频一区二区三区| 亚洲综合一区二区三区视频| 日本免费一区二区三区日本| 久热这里只有精品12| 亚洲人成人无码网WWW电影首页 | 日韩人妻少妇一区二区三区| 国模小黎自慰337p人体| 性夜夜春夜夜爽夜夜免费视频| 一级成人欧美一区在线观看| 人人妻人人澡人人爽曰本| 国产一区二区不卡91|