超碰在线91,国产第1页,国产精品99,最近中文字幕av

<video id="z2k50"><ins id="z2k50"></ins></video><small id="z2k50"><pre id="z2k50"><samp id="z2k50"></samp></pre></small>

    1. <video id="z2k50"><ins id="z2k50"></ins></video>

        三菱PLC編程口通信C語言源代碼

        發(fā)布時間:2024-06-09
        fxnew.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;
        }
        上一個:脈沖電磁閥的安裝與需注意的事項
        下一個:11系統(tǒng)怎么分盤,裝系統(tǒng)時如何分區(qū)

        攪拌站水泥倉放料蝴蝶閥特點(diǎn)和主要參數(shù)
        機(jī)械硬盤改裝成移動硬盤讀不出來,電腦硬盤改裝為移動硬盤
        原子熒光光度計使用步驟
        防爆電子秤在嚴(yán)寒季節(jié)如何“防凍死”?
        絲錐的設(shè)計與制造
        WRE-220熱電偶出現(xiàn)漏電的方式預(yù)防
        機(jī)器人用電磁制動器哪里有賣的
        汕頭市*金平分局與海康威視簽約成立“聯(lián)合創(chuàng)新實驗室”
        香蕉病蟲害綜合防治策略
        頻譜分析儀使用之前要注意什么?