<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
        主站蜘蛛池模板: 国产麻豆精品久久一二三| 精品国产一区二区三区性色| 少妇熟女久久综合网色欲| 亚洲小说乱欧美另类| 欧美经典人人爽人人爽人人片| 91系列在线观看| 国产又粗又猛又黄又爽无遮挡| 北岛玲中文字幕人妻系列| 色噜噜在线视频免费观看| 欧美一级黄色影院| 99精品福利视频| 少妇被粗大的猛烈进出动视频| 一本色道久久88综合日韩精品| 亚洲色无码中文字幕手机在线| 国产精品线在线精品| 日韩中文字幕人妻精品| 18av千部影片| 成人字幕网视频在线观看| 中年国产丰满熟女乱子正在播放| 中文字幕午夜福利片午夜福利片97 | 国产成人AV大片大片在线播放 | 国产精品亚洲av三区色| 水蜜桃精品综合视频在线| 国产区精品福利在线观看精品| 国产一区精品综亚洲av| 欧美福利在线| аⅴ天堂中文在线网| 在线a亚洲老鸭窝天堂| 中文字幕日韩视频欧美一区| 中文字幕日韩精品国产| 亚洲国产另类久久久精品小说| 亚洲第一无码专区天堂| 女同性恋一区二区三区视频| 国产福利酱国产一区二区 | 精品国产午夜福利理论片| 国产高清国产精品国产专区| 国产成人综合久久精品下载| 国产精品福利尤物youwu| 性欧美暴力猛交69hd| 国产一区二区三区自拍视频| 伊人久久大香线蕉综合5g|