<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
        主站蜘蛛池模板: ā片在线观看免费观看| 亚洲欧美成人久久综合中文网| 欧美区一区二区三区| 欧美色丁香| 最好好看的中文字幕| 内射老阿姨1区2区3区4区| 亚洲精品国产三级在线观看| 亚洲欧美日产综合在线网| 无码人妻丝袜在线视频| 国产一区二区爽爽爽视频| 亚洲av无码乱码国产麻豆穿越| 国产农村激情免费专区| 久久精品人人做人人爽97| 亚洲色成人一区二区三区| 亚洲免费自拍偷拍视频| 国产伦久视频免费观看视频| 精品亚洲一区二区三区四区| 亚洲欧美丝袜精品久久| 国产一级精品在线免费看| 国产色无码专区在线观看| 国产福利姬喷水福利在线观看| 免费的特黄特色大片| 精品无码视频在线观看| 人妻av中文字幕无码专区 | 天天躁夜夜躁狠狠综合| 尤物yw193无码点击进入| 国产明星精品无码AV换脸| 一区二区三区成人| 纯肉高h啪动漫| 精品人妻av综合一区二区| 国产精品成人aaaaa网站| 欧美黑人巨大xxxxx| 亚洲aⅴ男人的天堂在线观看| 国产999精品2卡3卡4卡| 欧美国产日韩久久mv| 无码人妻一区二区三区av| 麻豆一区二区三区香蕉视频| 精品亚洲欧美中文字幕在线看| 东京热人妻丝袜无码AV一二三区观| 欧美人与动牲交a免费| 国产精品久久蜜臀av|