1 å¼è¨
éçå¾®çµåææ¯å计ç®æºææ¯çè¿æ¥,å¯ç¼ç¨æ§å¶å¨ä»¥å
¶å¯é æ§é«ãæå¹²æ°å¼ºãå¼åå¨æçï¼å·²ç»æ为ä¸ç§è¾ä¸ºæ®åçãéåºå¤ç§åºç¨ç¯å¢çå·¥ä¸æ§å¶å¨ãç°å·²ä»æåçç®å顺åºæ§å¶ãé»è¾æ§å¶åå±å°å¯è¿è¡æ¨¡æéæ§å¶ãä½ç½®æ§å¶ï¼ç¹å«æ¯PLCä¸PLCãPLCä¸è®¡ç®æºéä¿¡åè½çå®ç°ï¼å¯ç»æå¤çº§æ§å¶ç³»ç»ï¼å½¢æå·¥åèªå¨åç½ç»ãPLCå¯ä»¥å¤ç§æ¹å¼å¦ç´æ¥éç¨ç°æçç»æçæ§è½¯ä»¶ä¸ä¸ä½çæ§æºéä¿¡ï¼ä½é对å°è§æ¨¡çæ§å¶ç³»ç»ï¼æ¾å°ä¸ç§é«æ§ä»·æ¯çéä¿¡æ¹æ³ï¼å
·æ积æçå®é
æä¹ãæ¬æå°±æ¯è®¨è®ºå¦ä½å©ç¨Modbuséä¿¡åè®®æ¥å®ç°æ½èå¾·çµå¨å
¬å¸çNanoPLCä¸ä¸ä½çæ§PCæºçéä¿¡ã2 硬件æè¿°å串å£è®¾ç½®
2.1 æ¥å£çµè·¯è®¾è®¡
PLCä¸PCé´å®ç°éä¿¡ï¼å¯ä½¿äºè
äºè¡¥åè½ä¸çä¸è¶³ï¼PLCç¨äºæ§å¶æ¹é¢æ¢æ¹ä¾¿åå¯é ï¼èPCæºå¨å¾å½¢æ¾ç¤ºãæ°æ®å¤çãæå°æ¥è¡¨ä»¥åä¸ææ¾ç¤ºçæ¹é¢æå¾å¼ºçåè½ãå æ¤ï¼åPLCå¶é å家纷纷å¼åäºéç¨äºæ¬å
¬å¸çåç§åå·PLCæºéä¿¡çæ¥å£æ¨¡åï¼ä¸åçéä¿¡æ¹å¼ï¼æçä¸åçææ¬ä»·æ ¼åä¸åçéç¨èå´ãNanoPLCçCPUåå
æ¬èº«å¸¦æ1个RS-485æ©å±å£,å¯ä¸é
å¤ä¸ç¨é讯模åï¼èéè¿æ¤æ¥å£ä¸ä¸ä½æºè¿è¡ä¸²è¡éä¿¡ãå¨æ¤ä»ç»ä¸ç§éè¿PLCçRS485æ©å±å£ä¸PCæºçRS-232串è¡å£è¿è¡éä¿¡çæ¹æ³ã
ç±äºNanoPLCçæ©å±å£éç¨RS-485æ åï¼RS485æ¯RS422çååãRS422为å
¨åå·¥ï¼å¯åæ¶åéä¸æ¥æ¶;RS485å为ååå·¥ï¼å¨æä¸æ¶å»ï¼1个åéå¦1个æ¥æ¶ãRS485æ¯ä¸ç§å¤åéå¨ççµè·¯æ åï¼å
许å导线ä¸1个åéå¨é©±å¨32个è´è½½è®¾å¤,è´è½½è®¾å¤å¯ä»¥æ¯è¢«å¨åéå¨ãæ¥æ¶å¨ææ¶åå¨ãè计ç®æºç串è¡å£éç¨RS-232æ åãå æ¤ï¼ä½ä¸ºå®ç°PLCä¸è®¡ç®æºéä¿¡çæ¥å£çµè·¯ï¼å¿
é¡»å°RS-485æ å转æ¢æRS-232æ åãæ们å©ç¨SC-485转æ¢å¨å®ç°RS485ä¸RS232ä¹é´ç转æ¢ã转æ¢çµè·¯å¦å¾1æ示ãå¾1 RS485ä¸RS232转æ¢çµè·¯å¾2.2 PLC串è¡å£è®¾ç½®
æ½èå¾·çNanoPLC对éä¿¡åæ°ç设置éè¿è®¾ç½®æ©å±å£æ¥å®ç°ï¼ç³»ç»éç¨PC æºä½ä¸ºModbuséä¿¡ç½ç»ä¸»ç«ï¼NanoPLCä½ä¸ºä»ç«ãéä¿¡æ ¼å¼è®¾ç½®å¦ä¸:æ³¢ç¹ç4800bpsï¼å¾2 PLC串è¡å£è®¾ç½®8ä½æ°æ®ä½ï¼1ä½åæ¢ä½ï¼æ å¥å¶æ ¡éªãå¦å¾2æ示ã
2.3 PCæºç串å£åå§å
å¨å¾®æºæ°æ®éä¿¡ä¸,ç»å¸¸ä½¿ç¨å¤§è§æ¨¡éæ串è¡æ¥å£çµè·¯è¯ç,å®ä»¬çç§ç±»ååå·å¾å¤,å¦UARTãUSRTãUSARTçãè½å®æå¼æ¥éä¿¡ç硬件çµè·¯ç§°ä¸ºUARTãä½ä¸ºå¯ç¼ç¨çå¼æ¥ä¸²è¡éä¿¡è¯çUARTï¼åºæ ¹æ®åè®®çè¦æ±å¯¹å
¶åå§åãå¯ç¼ç¨ä¸²è¡å¼æ¥éä¿¡æ§å¶å¨8250æ¯IBM PC串è¡éä¿¡æ§å¶å¨I/Oæ¥å£çµè·¯çæ ¸å¿ï¼éè¿å¯¹8250çç¼ç¨ï¼å¯ä»¥æ§å¶ä¸²è¡æ°æ®ä¼ éæ ¼å¼åé度ãPCæºæ2个串è¡éä¿¡æ¥å£COM1åCOM2ãè¥éCOM1ï¼å8250åå¯åå¨å°å为3F8H~3FEH;éCOM2ï¼å8250åå¯åå¨å°å为2F8H~2FEHãè¿éä»ç»ç¨Tubro Cç´æ¥å¯¹PCæºä¸çUART 8250ä¸åå¯åå¨è¿è¡åå§åãæ¬ä¾éç¨COM2å£,åå§åå¦ä¸:
outportb(0x2fb,0x80); /*btp=4800*/
outportb(0x2f8,0x18);
outportb(0x2f9,0x0);
outportb(0x2fb,0x1b); /*initialize (8ã1ãn)*/
outportb(0x2f9,0x0);
outportb(0x2fc,0x3);3 软件æè¿°
3.1ç³»ç»éä¿¡åè®®
NanoPLCéç¨Modbuséä¿¡åè®®ãä»»ä½æ ¹æ®æ¤éä¿¡åè®®è¿è¡éä¿¡ç主ãä»æºä¹é´è¿è¡æ°æ®ä¿¡æ¯äº¤æ¢æ¶ï¼ä¿¡æ¯æ ¼å¼é½å¿
é¡»éµå®éä¿¡åè®®æè§å®çæ ¼å¼ãModbusçæ°æ®äº¤æ¢æ¨¡å¼æ2ç§ï¼1ç§ä¸ºASCIIç¼ç å¶ï¼1ç§ä¸ºRTUç¼ç å¶ãæ¬ä¾éç¨RTUç ä¼ è¾æ¨¡å¼ï¼å®å
æ¬ä¸äºç¹æ®æ å¿ç ãPLCç«å·ãå¼å«ååæ ¡éªç çï¼å
¶æ°æ®å¸§æ ¼å¼å¦é表ã(1) 帧å¼å§:æ°æ®å¸§ä»¥è³å°3.5个å符é´éæ¶é´(T1-T2-T3-T4)æ å¿å¼å§åç»æãæ´ä¸ªä¿¡æ¯å¸§å¿
须以è¿ç»çä¿¡å·è¿è¡ä¼ è¾ï¼ä»èä¿è¯CRCçæ ¡éªæ£ç¡®ã
(2) ä»ç«å°å:1个åèãåä»ç«è¯å«ç ï¼ç«å·åå¼èå´01H-F7Hï¼å
±æ247ç§ä¸åç«ãä½Nanoç³»åPLCé讯ç½ç»æå¤å
许32个ä»ç«ã
(3) åè½å·:1个åèã表示主ç«å¯¹ä»ç«çåç§æä½å·¥ä½ï¼ä¸»æºååè½å·ç»ä»æºï¼å¦æä»æºååºæ£å¸¸ï¼ååéç¸åçåè½ç ;å¦æé误åçï¼åå°ååè½ç 符å·ä½ç½®â1âååéï¼å¹¶å°é误代ç åå
¥æ°æ®åºåéãååè½å·å
·ä½åè½å¦ä¸:
01æ02:读n个å
é¨ä½%Mi
03æ04:读n个å
é¨å%Mwi
05:å1个å
é¨ä½%Mi
06:å1个å
é¨å%Mwi
15:ån个å
é¨ä½% Mi
16:ån个å
é¨å%Mwi
(4) æ°æ®åº:æ°æ®åºç±ä¸ä¸²2ä½16è¿å¶æ°æ®ç»æï¼ä»00-FFHãå¦æéä¿¡æ£ç¡®ï¼æ°æ®åºåæ¾PLCååºä¸ä½æºçä¿¡æ¯;å¦åéæ°æ®æ误ï¼åè¿åå¼å¸¸ä»£ç ã
NanoPLCå¤çç2ç§å¼å¸¸ä»£ç :
*01:åè½æªç¥(PLCä¸æ¯æç请æ±)
å¦åé: 01H 16H 00H 00H FFH 00H 09H F9H
è¿å: 01H 96H 01H 8EH 60H
*03:æ ææ°æ®(ä½æåçæ°æ®é误ï¼å¦åä½æ¶æ°æ®æ¢é16#FF00ï¼åé16#0000)
å¦åé:01H 05H 00H 00H 03H 06H 4DH 38H
è¿å:01H 85H 03H 02H 91H
(5) æ ¡éªç :2个åèãéç¨CRC循ç¯åä½ç ãå®çåºæ¬åçæ¯å°ä¸æ®µä¿¡æ¯çæä¸ä¸ªå¾é¿çäºè¿å¶æ°ï¼ç¶åç¨ä¸ä¸ªç¹å®çæ°(å¦11021H)å»é¤å®ï¼æåå°ä½æ°ä½ä¸ºæ ¡éªç éå¨ä¿¡æ¯ä»£ç ä¹åä¸èµ·ä¼ é(æåå¨)ï¼å¨è¿è¡æ¥æ¶(æ读åº)æ¶è¿è¡åæ ·çå¤çï¼å¦æå·®éå°±å¯åç°ãéç¹å«æ³¨æçæ¯ï¼å¦æåéä¿¡æ¯ä¸çCRCæ ¡éªç 计ç®é误ï¼åéä¿¡ä¸è½æåã3 æéä¿¡åè®®ç¼ç¨
æ ¹æ®Modbuséä¿¡åè®®ï¼ä¸»ãä»æºä¹é´çéä¿¡è¿ç¨åºä¸º:å
ç±PCæº(主ç«)æåè®®æ ¼å¼ååºå½ä»¤å¸§ï¼PLC(ä»ç«)ç¨ååºå¸§åºçï¼PCæºæ¥æ¶ååºå¸§å¹¶å¯¹å
¶å
容ä½åºå¤æãå¤çã
3.1 å½ä»¤å¸§çå½¢æ
(1) 读PLC1个å
é¨ä½(以ï¼
M7ï¼ä¸ºä¾)3.2 éä¿¡è¿ç¨
éç¨Tubro Cç¼å主æºä¸PLCçéä¿¡ç¨åºãé¦å
å¿
须对COM2å£è¿è¡åå§åï¼åé¢å·²ç»è¿°åãPCæºéè¿ä¸²è¡æ¥å£ä¸PLCè¿è¡éä¿¡æ¶ï¼é¦å
ç±PCæºååºå½ä»¤å¸§ç»PLC(åéè¿ç¨)ï¼ç¶åPLCå°ç«å³ä½åºååºï¼PCæºåæ¶æ¥æ¶ååºå¸§(æ¥æ¶è¿ç¨)ï¼ææçéä¿¡åç±PCæºæ¥å¯å¨åæ¥æ¶ï¼PLCæ¹æ éç¼å¶éä¿¡ç¨åºãæ以å¨PCæºçéä¿¡åºç¨ç¨åºä¸ï¼å¨éè¦ä¸PLC交æ¢æ°æ®æ¶ï¼å
è°ç¨åéå½ä»¤å¸§åç¨åºï¼éåè°ç¨æ¥æ¶ååºå¸§åç¨åºï¼å¹¶å¯¹ååºå¸§è¿è¡å¤çãå°8250åå¯åå¨åå§ååï¼å°±å¯ä»¥éè¿è¯»å并å¤æç¶æå¯åå¨(2FDH)ä¸çD5ä½(åéä¿æå¯åå¨ç©º)æ¯å¦ä¸º1ï¼æ¥å³å®æ¯å¦å°è¦åéçæ°æ®åå
¥åéä¿æå¯åå¨(2F8H)ï¼åéæ°æ®çåç¨åºæµç¨å¾å¦å¾3æ示ï¼ä¸ºäºé¿å
PCæºåºç°æ»å¾ªç¯ï¼å¨è¿å
¥å¾ªç¯ä¹åï¼å
读åä¸ä¸ªæ¶é´T1ï¼è¿å
¥å¾ªç¯åï¼æ¯å¾ªç¯ä¸æ¬¡è¯»ä¸æ¬¡å½æ¶çæ¶é´T2ï¼å¹¶å¤ææ¤T2ä¸T1两æ¶é´çå·®ï¼å¦è¶
è¿2sï¼åä¸å读åç¶æï¼èæ¾ç¤ºè¶
æ¶åºé并éåºãå¨æ¥æ¶æ°æ®åç¨åºä¸ï¼éè¿è¯»å并å¤æç¶æå¯åå¨(2FDH)ä¸çD0ä½(æ¥æ¶æ°æ®å°±ç»ª)æ¯å¦ä¸º1ï¼æ¥å³å®æ¯å¦ä»æ¥æ¶æ°æ®å¯åå¨(2F8H)读åä¸å¸§æ¥æ¶çæ°æ®ãåæ ·ï¼ä¸ºäºé¿å
åºç°æ»å¾ªç¯ï¼è®¾ç½®äºè¶
æ¶åºéå¤çï¼æ¥æ¶æ°æ®åç¨åºçæµç¨å¾å¦å¾4æ示ãå¾3 åéæ°æ®åç¨åºçæµç¨å¾ å¾4 æ¥æ¶æ°æ®åç¨åºçæµç¨å¾PCæºåé1帧æ°æ®çCè¯è¨åç¨åº(åå½æ°)å¦ä¸:
unsigned char fasong(char data )
{
T1=time(NULL);
While(1)
{T2=time(NULL);<br> if(difftime(T2-T1)>=2.00)<br> {<br> printf("over time in fasong( ) ");<br> exit(0);<br> }
st=inportb(0x2fd);
if((st&0x20)!=0)
{
outportb(0x2f8,data);
break;
}
else continue;
}
}
PCæºæ¥æ¶1帧æ°æ®Cè¯è¨åç¨åº(åå½æ°)å¦ä¸:
unsigned char jieshou(char data )
{
T1=time(NULL);
While(1)
{T2=time(NULL);<br> if(difftime(T2-T1)>=2.00)<br> {<br> printf("over time in jieshou( ) ");<br> exit(0);<br> }
st=inportb(0x2fd);
if((st&0x01)!=0)
{
head=inportb(0x2f8);
break;
}
}
return(head);
} 4 ç»æè¯
ç¨ä»¥ä¸æ¹æ³è®¾è®¡çé信软件å¨ç°åºæ§å¶ç³»ç»å·²ç»å¾å°äºå¯é è¿è¡ï¼æ¾ç¤ºåºè¾å¥½çå®ç¨æ§ã
温馨提示:答案为网友推荐,仅供参考