Ê×Ò³ ÐÂÎÅ ¹¤¿ØËÑ ÂÛ̳ ³§ÉÌÂÛ̳ ²úÆ· ·½°¸ ³§ÉÌ È˲ŠÎÄÕª ÏÂÔØ Õ¹ÀÀ
Öлª¹¤¿ØÍøÊ×Ò³
  P L C | ±äƵÆ÷Óë´«¶¯ | ´«¸ÐÆ÷ | ÏÖ³¡¼ì²âÒDZí | ¹¤¿ØÈí¼þ | ÈË»ú½çÃæ | Ô˶¯¿ØÖÆ
  D C S | ¹¤ÒµÒÔÌ«Íø | ÏÖ³¡×ÜÏß | ÏÔʾµ÷½ÚÒDZí | Êý¾Ý²É¼¯ | Êý´«²â¿Ø | ¹¤Òµ°²È«
  µç Ô´ | ǶÈëʽϵͳ | PC based | »ú¹ñÏäÌå¿ÇÌå | µÍѹµçÆ÷ | »úÆ÷ÊÓ¾õ
ÈýÁâFXϵÁÐPLC±à³Ì¿ÚͨÐÅÔ´´úÂë
Öлª¹¤¿ØÍø
Êղر¾ÎÄ     ²é¿´ÊÕ²Ø
fx_comm.h </P><P> #define DELAY_TIMES 30000L<BR> #define TRUE 1<BR> #define FALSE 0<BR> #define TRUE 1<BR> #define FALSE 0<BR> #define FORCE_ON 0x37<BR> #define FORCE_OFF 0x38<BR> void init_plc(void);<BR> int check_plc(void);<BR> int _read_data_register(unsigned int uAddress,unsigned int number);<BR> int _read_mdata_register(unsigned int uAddress,unsigned int number);<BR> int _write_data_register(unsigned int uAddress,unsigned int number);<BR> int _force_m_contact(unsigned int uAddress,unsigned char ucOn_off);<BR> int read_data_register(unsigned int uAddress,unsigned int number);<BR> int read_mdata_register(unsigned int uAddress,unsigned int number);<BR> int write_data_register(unsigned int uAddress,unsigned int number);<BR> int force_m_contact(unsigned int uAddress,unsigned char ucOn_off);<BR> int _read_m_register(unsigned int uAddress,unsigned int number);<BR> int read_m_register(unsigned int uAddress,unsigned int number);<BR> int TESTING=0;<BR> unsigned int uRead_value[25];<BR> unsigned int uWrite_value[25];<BR> unsigned int COMM_PORT=1;<BR> unsigned int STATS_PORT=0x2fd;<BR> unsigned int DATA_PORT=0x2f8;</P><P> <BR> void init_plc(void)<BR> { _AX=0xfa;<BR> ¡¡¡¡¡¡_DX=COMM_PORT;<BR> ¡¡¡¡¡¡geninterrupt(0x14);<BR> ¡¡¡¡¡¡while((inportb(STATS_PORT)&1)!=0) inportb(DATA_PORT);<BR> ¡¡<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> int check_plc(void)<BR> { long lTmp;<BR> ¡¡¡¡¡¡if(TESTING==1)return TRUE;<BR> ¡¡¡¡¡¡init_plc();<BR> ¡¡¡¡¡¡for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡{ if((inportb(STATS_PORT)&0x20)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡outportb(DATA_PORT,5);<BR> ¡¡¡¡¡¡disable();<BR> ¡¡¡¡¡¡for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡{¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if((lTmp=inportb(DATA_PORT))==6)<BR> ¡¡¡¡¡¡{ ¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(TRUE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡{ ¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> </P><P> <BR> int read_data_register(unsigned int uAddress,unsigned int number)<BR> {¡¡¡¡¡¡int i;<BR> ¡¡¡¡¡¡for(i=0;i<3;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(_read_data_register(uAddress,number)==TRUE)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return TRUE;<BR> ¡¡¡¡¡¡return FALSE;<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> int _read_data_register(unsigned int uAddress,unsigned int number)<BR> { unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};<BR> ¡¡¡¡¡¡unsigned char uReceive[104];<BR> ¡¡¡¡¡¡unsigned int uTmp;<BR> ¡¡¡¡¡¡unsigned int uSum;<BR> ¡¡¡¡¡¡unsigned int num;<BR> ¡¡¡¡¡¡long lTmp;<BR> ¡¡¡¡¡¡int i,j;<BR> ¡¡¡¡¡¡if(TESTING==1)<BR> ¡¡¡¡¡¡{ for(i=0;i<number;i++)uRead_value[i]=0;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return TRUE;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡init_plc();<BR> ¡¡¡¡¡¡num=number*2;<BR> ¡¡¡¡¡¡if((num/16)>=10)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[6]=(unsigned char)(num/16+0x41-10);<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[6]=(unsigned char)(num/16+0x30);<BR> ¡¡¡¡¡¡if((num%16)>=10)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[7]=(unsigned char)((num%16)+0x41-10);<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[7]=(unsigned char)((num%16)+0x30);<BR> ¡¡¡¡¡¡uAddress=uAddress*2+0x1000;<BR> ¡¡¡¡¡¡uTmp=uAddress & 0x000f;<BR> ¡¡¡¡¡¡uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>4) & 0x000f;<BR> ¡¡¡¡¡¡uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>8) & 0x000f;<BR> ¡¡¡¡¡¡uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>12)&0x000f;<BR> ¡¡¡¡¡¡uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uSum=0;<BR> ¡¡¡¡¡¡for(i=1;i<9;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSum=uSum+(unsigned char)uSend[i];<BR> ¡¡¡¡¡¡uTmp=uSum&0x000f;<BR> ¡¡¡¡¡¡uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uSum>>4)&0x000f;<BR> ¡¡¡¡¡¡uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);</P><P> ¡¡¡¡¡¡for(i=0;i<11;i++)<BR> ¡¡¡¡¡¡{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ if((inportb(STATS_PORT)&0x20)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡outportb(DATA_PORT,uSend[i]);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡disable();<BR> ¡¡<BR> ¡¡¡¡¡¡for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡uReceive[0]=inportb(DATA_PORT);<BR> ¡¡¡¡¡¡if(uReceive[0]!=2)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡for(i=1;i<number*4+4;i++)<BR> ¡¡¡¡¡¡{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uReceive[i]=inportb(DATA_PORT);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡uSum=0;<BR> ¡¡¡¡¡¡for(i=1;i<number*4+2;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSum=uSum+(unsigned int)uReceive[i];<BR> ¡¡¡¡¡¡uTmp=uSum&0xf;<BR> ¡¡¡¡¡¡uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡<BR> ¡¡¡¡¡¡if((unsigned char)uTmp!=uReceive[number*4+3]) return(FALSE);<BR> ¡¡¡¡¡¡uTmp=(uSum>>4)&0xf;<BR> ¡¡¡¡¡¡uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡<BR> ¡¡¡¡¡¡if((unsigned char)uTmp!=uReceive[number*4+2]) return(FALSE);<BR> ¡¡¡¡¡¡for(j=0;j<number;j++)<BR> ¡¡¡¡¡¡{¡¡¡¡¡¡for(i=j*4+1;i<j*4+5;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡return TRUE;<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> </P><P> int read_mdata_register(unsigned int uAddress,unsigned int number)<BR> {¡¡¡¡¡¡int i;<BR> ¡¡¡¡¡¡for(i=0;i<3;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(_read_mdata_register(uAddress,number)==TRUE)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return TRUE;<BR> ¡¡¡¡¡¡return FALSE;<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> int _read_mdata_register(unsigned int uAddress,unsigned int number)<BR> { unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};<BR> ¡¡¡¡¡¡unsigned char uReceive[104];<BR> ¡¡¡¡¡¡unsigned int uTmp;<BR> ¡¡¡¡¡¡unsigned int uSum;<BR> ¡¡¡¡¡¡unsigned int num;<BR> ¡¡¡¡¡¡long lTmp;<BR> ¡¡¡¡¡¡int i,j;<BR> ¡¡¡¡¡¡if(TESTING==1)<BR> ¡¡¡¡¡¡{ for(i=0;i<number;i++)uRead_value[i]=0;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return TRUE;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡init_plc();<BR> ¡¡¡¡¡¡num=number*2;<BR> ¡¡¡¡¡¡if((num/16)>=10)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[6]=(unsigned char)(num/16+0x41-10);<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[6]=(unsigned char)(num/16+0x30);<BR> ¡¡¡¡¡¡if((num%16)>=10)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[7]=(unsigned char)((num%16)+0x41-10);<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[7]=(unsigned char)((num%16)+0x30);<BR> ¡¡¡¡¡¡/*uAddress=uAddress*2+0x1000;*/<BR> ¡¡¡¡¡¡uTmp=uAddress & 0x000f;<BR> ¡¡¡¡¡¡uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>4) & 0x000f;<BR> ¡¡¡¡¡¡uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>8) & 0x000f;<BR> ¡¡¡¡¡¡uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>12)&0x000f;<BR> ¡¡¡¡¡¡uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uSum=0;<BR> ¡¡¡¡¡¡for(i=1;i<9;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSum=uSum+(unsigned char)uSend[i];<BR> ¡¡¡¡¡¡uTmp=uSum&0x000f;<BR> ¡¡¡¡¡¡uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uSum>>4)&0x000f;<BR> ¡¡¡¡¡¡uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡for(i=0;i<11;i++)<BR> ¡¡¡¡¡¡{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ if((inportb(STATS_PORT)&0x20)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡outportb(DATA_PORT,uSend[i]);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡disable();<BR> ¡¡<BR> ¡¡¡¡¡¡for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡uReceive[0]=inportb(DATA_PORT);<BR> ¡¡¡¡¡¡if(uReceive[0]!=2)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡for(i=1;i<number*4+4;i++)<BR> ¡¡¡¡¡¡{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uReceive[i]=inportb(DATA_PORT);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡uSum=0;<BR> ¡¡¡¡¡¡for(i=1;i<number*4+2;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSum=uSum+(unsigned int)uReceive[i];<BR> ¡¡¡¡¡¡uTmp=uSum&0xf;<BR> ¡¡¡¡¡¡uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡<BR> ¡¡¡¡¡¡if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);<BR> ¡¡¡¡¡¡uTmp=(uSum>>4)&0xf;<BR> ¡¡¡¡¡¡uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡<BR> ¡¡¡¡¡¡if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);<BR> ¡¡¡¡¡¡for(j=0;j<number;j++)<BR> ¡¡¡¡¡¡{¡¡¡¡¡¡for(i=j*4+1;i<j*4+5;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡return TRUE;<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> </P><P> int write_data_register(unsigned int uAddress,unsigned int number)<BR> {¡¡¡¡¡¡int i;<BR> ¡¡¡¡¡¡for(i=0;i<3;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(_write_data_register(uAddress,number)==TRUE)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return TRUE;<BR> ¡¡¡¡¡¡return FALSE;<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> int _write_data_register(unsigned int uAddress,unsigned int number)<BR> { unsigned char uSend[111];<BR> ¡¡¡¡¡¡unsigned int uTmp,uSum,num;<BR> ¡¡¡¡¡¡long lTmp;<BR> ¡¡¡¡¡¡int i;<BR> ¡¡¡¡¡¡if(TESTING==1)return TRUE;<BR> ¡¡<BR> ¡¡¡¡¡¡init_plc();<BR> ¡¡¡¡¡¡uSend[0]=2;<BR> ¡¡¡¡¡¡uSend[1]=0x31;<BR> ¡¡¡¡¡¡uSend[number*4+8]=3;<BR> ¡¡¡¡¡¡num=(number*2)/16;<BR> ¡¡¡¡¡¡if(num>=10)uSend[6]=num+0x41-10;<BR> ¡¡¡¡¡¡else¡¡¡¡¡¡ uSend[6]=num+0x30;<BR> ¡¡¡¡¡¡num=(number*2)%16;<BR> ¡¡¡¡¡¡if(num>=10)uSend[7]=num+0x41-10;<BR> ¡¡¡¡¡¡else uSend[7]=num+0x30;<BR> ¡¡¡¡¡¡uAddress=0x1000+2*uAddress;<BR> ¡¡¡¡¡¡uTmp=uAddress&0x000f;<BR> ¡¡¡¡¡¡uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>4)&0x000f;<BR> ¡¡¡¡¡¡uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>8)&0x000f;<BR> ¡¡¡¡¡¡uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>12)&0x000f;<BR> ¡¡¡¡¡¡uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡for(i=0;i<number;i++)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uTmp=uWrite_value[i]&0x000f;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[i*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uTmp=(uWrite_value[i]>>4)&0x000f;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[i*4+8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uTmp=(uWrite_value[i]>>8)&0x000f;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[i*4+11]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uTmp=(uWrite_value[i]>>12)&0x000f;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[i*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡uSum=0;<BR> ¡¡¡¡¡¡for(i=1;i<9+number*4;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSum+=uSend[i];<BR> ¡¡¡¡¡¡uTmp=uSum&0x000f;<BR> ¡¡¡¡¡¡uSend[number*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uSum>>4)&0x000f;<BR> ¡¡¡¡¡¡uSend[number*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡for(i=0;i<11+number*4;i++)<BR> ¡¡¡¡¡¡{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ if((inportb(STATS_PORT)&0x20)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡/*enable();*/<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡outportb(DATA_PORT,uSend[i]);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡disable();<BR> ¡¡¡¡¡¡for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡ enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(inportb(DATA_PORT)!=6)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(TRUE);<BR> ¡¡¡¡¡¡}<BR> }</P><P> </P><P> <BR> int force_m_contact(unsigned uAddress,unsigned char ucOn_off)<BR> {¡¡¡¡¡¡int i;<BR> ¡¡¡¡¡¡for(i=0;i<3;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(_force_m_contact(uAddress,ucOn_off)==TRUE)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return TRUE;<BR> ¡¡¡¡¡¡return FALSE;<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> int _force_m_contact(unsigned uAddress,unsigned char ucOn_off)<BR> { unsigned uSend[]={2,0x37,0x30,0x30,0x30,0x30,3,0x30,0x30};<BR> ¡¡¡¡¡¡unsigned uTmp,uSum,i;<BR> ¡¡¡¡¡¡long lTmp;<BR> ¡¡¡¡¡¡if(TESTING==1)return TRUE;<BR> ¡¡¡¡¡¡init_plc();<BR> ¡¡¡¡¡¡uAddress=uAddress+0x800;<BR> ¡¡¡¡¡¡uSend[1]=ucOn_off;<BR> ¡¡¡¡¡¡uTmp=uAddress&0x000f;<BR> ¡¡¡¡¡¡uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>4)&0x000f;<BR> ¡¡¡¡¡¡uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>8)&0x000f;<BR> ¡¡¡¡¡¡uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>12)&0x000f;<BR> ¡¡¡¡¡¡uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uSum=0;<BR> ¡¡¡¡¡¡for(i=1;i<7;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSum+=uSend[i];<BR> ¡¡¡¡¡¡uTmp=uSum&0x000f;<BR> ¡¡¡¡¡¡uSend[8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uSum>>4)&0x000f;<BR> ¡¡¡¡¡¡uSend[7]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡for(i=0;i<9;i++)<BR> ¡¡¡¡¡¡{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ if((inportb(STATS_PORT)&0x20)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ <BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡outportb(DATA_PORT,uSend[i]);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡disable();<BR> ¡¡¡¡¡¡for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡{ <BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(inportb(DATA_PORT)!=6)<BR> ¡¡¡¡¡¡{ <BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡{ enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(TRUE);<BR> ¡¡¡¡¡¡}<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> </P><P> int read_m_register(unsigned int uAddress,unsigned int number)<BR> {¡¡¡¡¡¡int i;<BR> ¡¡¡¡¡¡for(i=0;i<3;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(_read_m_register(uAddress,number)==TRUE)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return TRUE;<BR> ¡¡¡¡¡¡return FALSE;<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> int _read_m_register(unsigned int uAddress,unsigned int number)<BR> { unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};<BR> ¡¡¡¡¡¡unsigned char uReceive[54];<BR> ¡¡¡¡¡¡unsigned int uTmp;<BR> ¡¡¡¡¡¡unsigned int uSum;<BR> ¡¡¡¡¡¡unsigned int num;<BR> ¡¡¡¡¡¡long lTmp;<BR> ¡¡¡¡¡¡int i,j;<BR> ¡¡¡¡¡¡if(TESTING==1)<BR> ¡¡¡¡¡¡{ for(i=0;i<number;i++)uRead_value[i]=0;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return TRUE;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡init_plc();<BR> ¡¡¡¡¡¡num=number;<BR> ¡¡¡¡¡¡if((num/16)>=10)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[6]=(unsigned char)(num/16+0x41-10);<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[6]=(unsigned char)(num/16+0x30);<BR> ¡¡¡¡¡¡if((num%16)>=10)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[7]=(unsigned char)((num%16)+0x41-10);<BR> ¡¡¡¡¡¡else<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSend[7]=(unsigned char)((num%16)+0x30);<BR> ¡¡¡¡¡¡uAddress=uAddress/8+0x100;<BR> ¡¡¡¡¡¡uTmp=uAddress & 0x000f;<BR> ¡¡¡¡¡¡uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>4) & 0x000f;<BR> ¡¡¡¡¡¡uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>8) & 0x000f;<BR> ¡¡¡¡¡¡uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uAddress>>12)&0x000f;<BR> ¡¡¡¡¡¡uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uSum=0;<BR> ¡¡¡¡¡¡for(i=1;i<9;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSum=uSum+(unsigned char)uSend[i];<BR> ¡¡¡¡¡¡uTmp=uSum&0x000f;<BR> ¡¡¡¡¡¡uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡¡¡¡¡uTmp=(uSum>>4)&0x000f;<BR> ¡¡¡¡¡¡uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);</P><P> ¡¡¡¡¡¡for(i=0;i<11;i++)<BR> ¡¡¡¡¡¡{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ if((inportb(STATS_PORT)&0x20)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡/*enable();*/<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡outportb(DATA_PORT,uSend[i]);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡disable();<BR> ¡¡<BR> ¡¡<BR> ¡¡¡¡¡¡for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡uReceive[0]=inportb(DATA_PORT);<BR> ¡¡¡¡¡¡if(uReceive[0]!=2)<BR> ¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡for(i=1;i<number*2+4;i++)<BR> ¡¡¡¡¡¡{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{ if((inportb(STATS_PORT)&1)!=0)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡break;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡if(lTmp>=DELAY_TIMES)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡{<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return(FALSE);<BR> ¡¡¡¡¡¡¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uReceive[i]=inportb(DATA_PORT);<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡enable();<BR> ¡¡¡¡¡¡uSum=0;<BR> ¡¡¡¡¡¡for(i=1;i<number*2+2;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uSum=uSum+(unsigned int)uReceive[i];<BR> ¡¡¡¡¡¡uTmp=uSum&0xf;<BR> ¡¡¡¡¡¡uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡<BR> ¡¡¡¡¡¡if((unsigned char)uTmp!=uReceive[number*2+3]) return(FALSE);<BR> ¡¡¡¡¡¡uTmp=(uSum>>4)&0xf;<BR> ¡¡¡¡¡¡uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);<BR> ¡¡<BR> ¡¡¡¡¡¡if((unsigned char)uTmp!=uReceive[number*2+2]) return(FALSE);<BR> ¡¡¡¡¡¡for(j=0;j<number;j++)<BR> ¡¡¡¡¡¡{¡¡¡¡¡¡for(i=j*2+1;i<j*2+3;i++)<BR> ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;<BR> ¡¡¡¡¡¡¡¡¡¡¡¡uRead_value[j]=((uReceive[j*2+1])<<4)+uReceive[j*2+2];<BR> ¡¡¡¡¡¡}<BR> ¡¡¡¡¡¡return TRUE;<BR> }<BR> //·µ»Ø¶¥²¿ </P><P> <BR> £¨±¾Õ¾ÏÂÔØÇøÓÐÔ´´úÂëÏÂÔØ¡££©
 

×´¡¡Ì¬£º ÀëÏß

¹«Ë¾¼ò½é
²úƷĿ¼

¹«Ë¾Ãû³Æ£º Öлª¹¤¿ØÍø
Áª ϵ ÈË£º ¿Í·þÖÐÐÄ
µç¡¡¡¡»°£º 0755-26546361
´«¡¡¡¡Õ棺 0755-26585268
µØ¡¡¡¡Ö·£º ÉîÛÚÊÐÄÏÉ½Çø´´ÒµÂ·ÏÖ´ú³Ç»ªÍ¥1¶°6A
ÓÊ¡¡¡¡±à£º 518054
Ö÷¡¡¡¡Ò³£º
 
¸Ã³§ÉÌÏà¹Ø¼¼ÊõÎÄÕª:
ÖÇÄÜÒÇÆ÷ÒDZíµÄ·¢Õ¹ÌصãÓëǰ¾°·ÖÎö
µç¶¯»úÐÔÄÜÐéÄâÒÇÆ÷²âÊÔϵͳÉè¼ÆÓëʵÏÖ
ÊÓÆµ¼à¿Ø»¤º½¸ßÌú°²È«ÔËÓª
»ùÓÚPLC£¬´¥ÃþÆÁ¼°±äƵÆ÷¶Ô´µÄ¤»úµÄ¸ÄÔì
ÓÀºêPLCÓ¦ÓÃÓÚ×ÔÖúͼÊé½è»¹ÖÕ¶Ë»ú
»ùÓÚÓÀºêPLCµÄGSMͨѶԭÀí¼°ÆäÓ¦ÓÃ
¸ÄÉÆÆû³µÉú̬ѧ¡¢°²È«ÐÔºÍÊæÊÊÐÔ£¬ËÄ´ó²âÊÔ·ÖÎöÊǹؼü
¸ÄÉÆÆû³µÉú̬ѧ¡¢°²È«ÐÔºÍÊæÊÊÐÔ£¬ËÄ´ó²âÊÔ·ÖÎöÊǹؼü
Êý¿Ø¼¼ÊõµÄ·¢Õ¹Ç÷ÊÆ¼°²úÒµ»¯
Êý¿Ø¼¼Êõ·¢Õ¹Õ½ÂÔÓ뷢չ;¾¶µÄ˼¿¼
ÓÃEnergid µÄÈí¼þ½øÐлúÆ÷È˵ÄץȡºÍ²Ù×÷
ÈçºÎ½èÖúRFID¼¼ÊõÉý¼¶ÆóÒµÐÅÏ¢¹ÜÀíˮƽ
¸ü¶àÎÄÕª...
Á¢¼´·¢ËÍѯÎÊÐÅÏ¢ÔÚÏßÁªÏµ¸Ã¼¼ÊõÎÄÕª³§ÉÌ£º
Óû§Ãû: ÃÜÂë: Ãâ·Ñ×¢²áΪÖлª¹¤¿ØÍø»áÔ±
ÇëÁôÏÂÄúµÄÓÐЧÁªÏµ·½Ê½£¬ÒÔ·½±ãÎÒÃǼ°Ê±ÓëÄúÁªÂç

¹ØÓÚÎÒÃÇ | ÁªÏµÎÒÃÇ | ¹ã¸æ·þÎñ | ±¾Õ¾¶¯Ì¬ | ÓÑÇéÁ´½Ó | ·¨ÂÉÉùÃ÷ | ²»Á¼ÐÅÏ¢¾Ù±¨
¹¤¿ØÍø¿Í·þÈÈÏߣº0755-86369299
°æÈ¨ËùÓÐ Öлª¹¤¿ØÍø Copyright©2022 Gkong.com, All Rights Reserved