時間:2018-02-02 10:24:47來æºï¼šç¶²çµ¡è½‰è¼‰
å››å多年來,PLCå·²æˆç‚ºå¯¦ç¾å·¥æ¥æŽ§åˆ¶çš„ä¸å …力é‡ã€‚å®ƒçš„åŠŸèƒ½ä¸æ–·å®Œå–„ï¼Œæ‡‰ç”¨é ˜åŸŸä¸æ–·æ“´å¤§ï¼Œå°äºŽå·¥æ¥æŽ§åˆ¶æŠ€è¡“的進æ¥èˆ‡ç¤¾æœƒç™¼å±•所發æ®çš„作用無å¯ä¼°é‡ã€‚PLC以它的高å¯é 性和易æ“ä½œæ€§ï¼Œä¸»å°Žäº†å·¥æŽ§è¡Œæ¥æ•¸å年。PLC雖然有著它固有的優勢,但é¢å°å®¢æˆ¶éœ€æ±‚çš„ä¸æ–·è®ŠåŒ–,PLCè¦æƒ³ç”Ÿå˜ï¼Œå°±å¿…é ˆçªç ´å‚³çµ±æ¨¡å¼ï¼Œç©æ¥µæ±‚æ–°æ±‚è®Šä»¥é©æ‡‰æ–°çš„å¸‚å ´ç™¼å±•ã€‚è€Œå…·æœ‰ä½Žæˆæœ¬å„ªå‹¢çš„嵌入å¼PLC,æ£å¥½èƒ½å¤ 滿足這一需求。所謂嵌入å¼PLC是指采用SoC嵌入å¼ç‰‡ä¸Šç³»çµ±èŠ¯ç‰‡å’ŒåµŒå…¥å¼å¯¦æ™‚æ“作系統實ç¾PLC功能,并能用IEC61131-3的標準編程語言編程的PLC.隨著高性能的ARM嵌入å¼å¾®è™•ç†å™¨çš„發展,ç†è€…è¨è¨ˆäº†æ–°ä¸€ä»£å¾®åž‹åµŒå…¥å¼PLC.本文介紹了嵌入å¼PLCçš„é«”ç³»çµæ§‹ï¼ŒåŒ…å«å…¶ç¡¬ä»¶è¨è¨ˆå’Œè»Ÿä»¶è¨è¨ˆæ–¹æ¡ˆã€‚
1嵌入å¼PLCçš„ç¡¬ä»¶çµæ§‹è¨è¨ˆ
1.1微控制器芯片的é¸å–
CPU是PLCçš„æ ¸å¿ƒï¼Œå®ƒèƒ½å¤ è˜åˆ¥ç”¨æˆ¶æŒ‰ç…§ç‰¹å®šçš„æ ¼å¼è¼¸å…¥çš„å„種指令,并按照指令的è¦å®šï¼Œæ ¹æ“šç•¶å‰çš„ç¾å ´I/O信號的狀態,發出相應的控制指令,完æˆé 定的控制任務。本è¨è¨ˆé¸ç”¨çš„æ˜¯Philipså…¬å¸ç”Ÿç”¢çš„LPC2294微控制器。LPC2294是一款基于32ä½ARM7TDMI-S,并支æŒå¯¦æ™‚仿真和跟蹤的CPU芯片,它帶有256kB嵌入的高速Flashå˜å„²å™¨ï¼Œ16kB片內SRAM.LPC2294采用144è…³å°è£ã€å…·æœ‰æ¥µä½Žçš„功耗以åŠå¤šé”112個通用I/Oå£ï¼Œ9å€‹é‚Šæ²¿æˆ–é›»å¹³è§¸ç™¼çš„å¤–éƒ¨ä¸æ–·å¼•腳,最大為60MHz的工作晶振,多個32ä½å®šæ™‚器,PWM單元,實時時é˜å’Œçœ‹é–€ç‹—ï¼Œè½‰æ›æ™‚間低至2.44μsçš„8通é“10ä½ADCã€4路高級CAN接å£ï¼Œå¦å¤–具有2è·¯UART(16C550),高速I2C(400kbit/s)åŠ2è·¯SPI總線。LPC2294è±å¯Œçš„硬件資æºå’Œå®Œå–„的功能使這款微控制器特別é©ç”¨äºŽæ±½è»Šã€å·¥æ¥æŽ§åˆ¶æ‡‰ç”¨ä»¥åŠé†«ç™‚系統和容錯ç¶è·ç¸½ç·šç‰å ´åˆã€‚
1.2ç¡¬ä»¶ç³»çµ±çš„æ•´é«”çµæ§‹
本系統以ARM芯片LPC2294為CPU,è¨è¨ˆç‚º14è·¯PNP型輸入ã€10路繼電器輸出的基本模å¼ã€‚ç¡¬ä»¶ç¸½é«”çµæ§‹åŒ…括:
é›»æºåŠå¾©ä½æ¨¡å¡Šã€ARM微控制器ã€Flashå˜å„²å™¨æ“´å±•模塊ã€é–‹é—œé‡è¼¸å…¥è¼¸å‡ºæ¨¡å¡Šã€æ¨¡æ“¬é‡è¼¸å…¥è¼¸å‡ºæ¨¡å¡Šã€RS485接å£åŠCAN接å£é€šä¿¡æ¨¡å¡Šç‰ã€‚ç³»çµ±çš„çµæ§‹å¦‚圖1所示。
1.2.1é–‹é—œé‡è¼¸å…¥è¼¸å‡ºæŽ¥å£é›»è·¯
圖2所示為一路開關é‡è¼¸å…¥åœ–。æ¤éƒ¨åˆ†é›»è·¯å‰ç«¯ç‚ºRã€C組æˆçš„一階濾波電路,防æ¢å¤–部干擾信號進入系統ä¸ã€‚輸入端外接的輸入控制開關信號(直æµ24V)通éŽè¼¸å…¥é»ž10.0ç¶“é™æµé›»é˜»è¼¸å…¥åˆ°å…‰é›»è€¦åˆå™¨ï¼ˆPC816)的輸入端,M為輸入點10.0~10.7çš„å…¬å…±è¼¸å…¥ç«¯ã€‚å› P0.23å£è¢«è¨ç½®ç‚ºè¼¸å…¥æ¨¡å¼ä¸”å£ç·šå…§éƒ¨ç„¡ä¸Šæ‹‰é›»é˜»ï¼Œæ‰€ä»¥éœ€è¦å¤–接上拉電阻,防æ¢å£ç·šæ‡¸ç©ºã€‚ç•¶10.0輸入端為24V時,光電耦åˆå™¨ä¸çš„å…‰æ•äºŒæ¥µç®¡å°Žé€šï¼Œå…‰æ•æ™¶é«”管輸出端被拉為低電平,指示該路輸入狀態的LED被點亮,P0.23被置為低電平。當CPU訪å•è©²è·¯ä¿¡è™Ÿæ™‚ï¼Œå°‡è©²è¼¸å…¥é»žå°æ‡‰çš„輸入éŽç¨‹æ˜ åƒå¯„å˜å™¨çš„值置為1.10.0輸入端為0V時,P0.23為高電平,當CPU訪å•è©²è·¯ä¿¡è™Ÿæ™‚ï¼Œå‰‡å°‡è©²è¼¸å…¥é»žå°æ‡‰çš„輸入éŽç¨‹æ˜ åƒå¯„å˜å™¨çš„值置為0.å…¶ä½™å„å€‹è¼¸å…¥é»žæ‰€å°æ‡‰çš„電路åŠå·¥ä½œåŽŸç†å‡ç›¸åŒã€‚
圖3所示為繼電器輸出模塊圖,圖ä¸å¹¶è¯åœ¨ç¹¼é›»å™¨ç·šåœˆå…©ç«¯çš„二極管這里起續æµä½œç”¨ã€‚該模塊的工作原ç†å¦‚下:當內部輸出éŽç¨‹æ˜ åƒå¯„å˜å™¨ç‚º1時,LPC2294端å£P1.16輸出0ï¼Œå…‰æ•æ™¶é«”管導通,繼電器線圈得電,輸出點接通;å之當內部輸出éŽç¨‹æ˜ åƒå¯„å˜å™¨ç‚º0時,端å£P1.16輸出1,繼電器線圈失電,輸出點斷開。
éœ€è¦æ³¨æ„的是,當LPC2294çš„GPIOå£åˆä¸Šé›»æ™‚,其輸出端å£ï¼ˆå¦‚本圖ä¸çš„P1.16)的電壓ä¸ç©©å®šï¼Œé€™æ¨£æ˜“導致外部繼電器誤動作而引起外部è¨å‚™å·¥ä½œä¸ç©©å®šã€‚為æ¤ï¼Œæˆ‘們è¨è¨ˆäº†åœ–4電路用來æé«˜ç¹¼é›»å™¨è¼¸å‡ºçš„穩定性。
這是一個由NE555定時器組æˆçš„單穩態電路,其ä¸VCC5.0D端接圖3ä¸å…‰é›»è€¦åˆå™¨çš„集電極。其工作原ç†ç‚ºï¼šç³»çµ±ä¸Šé›»åˆå§‹ï¼Œ2ã€6管腳電平ä¸èƒ½çªè®Šï¼Œä¿æŒç‚ºä½Žé›»å¹³ã€‚分æžNE555的內部電路å¯çŸ¥ï¼Œæ¤æ™‚輸出端3管腳輸出高電平,電路開始å°Rã€C電路進行充電,隨著時間的推移,管腳2ã€6çš„é›»å¹³ä¸æ–·å‡é«˜ï¼Œç•¶å‡è‡³23VCC時,輸出端3管腳將翻轉至低電平,使三極管導通,VCC5.0D輸出5V.這樣,系統上電åŽç¶“éŽä¸€æ®µæ™‚間,I/Oå£çš„電平穩定下來之åŽï¼Œå…‰é›»è€¦åˆå™¨æ‰å¾—電開始工作。暫穩態的æŒçºŒæ™‚é–“tWå–æ±ºäºŽå¤–接電阻R和電容C的大å°ã€‚tWç‰äºŽé›»å®¹é›»å£“在充電éŽç¨‹ä¸å¾ž0上å‡åˆ°23VCC所需è¦çš„æ™‚間,å³
1.2.2模擬é‡è¼¸å…¥é›»è·¯è¨è¨ˆ
先通éŽé›»é˜»R66,將ç¾å ´å‚³æ„Ÿå™¨è¼¸å‡ºçš„é›»æµä¿¡è™Ÿè½‰æ›ç‚º0~5V電壓信號進行采集。考慮到抗干擾åŠå°å¾®è™•ç†å™¨é›»è·¯çš„ä¿è·ï¼Œåœ¨è½‰æ›é›»è·¯çš„è¼¸å‡ºç«¯åŠ äº†ç·šæ€§å…‰è€¦HCNR201.硬件電路如圖5所示。
1.2.3串行通訊接å£é›»è·¯è¨è¨ˆ
ç‚ºäº†èƒ½èˆ‡å…¶å®ƒå·¥æ¥æŽ§åˆ¶ç”¢å“兼容,我們è¨è¨ˆæ™‚采用了RS-485æŽ¥å£æ¨™æº–。為了將TTLé›»å¹³è½‰æ›æˆRS485電平,é¸ç”¨äº†SP485E收發器。SP485E芯片的數據傳輸速率å¯é«˜é”10Mbps,其最大的特點是在為發é€å™¨è¼¸å‡ºå’ŒæŽ¥æ”¶å™¨è¼¸å…¥ç®¡è…³æä¾›äº†ESDä¿è·é›»è·¯ã€‚接å£é›»è·¯å¦‚圖6所示。
2嵌入å¼PLC的軟件系統è¨è¨ˆ
嵌入å¼PLC的軟件分為é‹è¡Œç³»çµ±è»Ÿä»¶å’Œé–‹ç™¼ç³»çµ±è»Ÿä»¶å…©éƒ¨åˆ†ã€‚é‹è¡Œç³»çµ±è² è²¬å°æ•´å€‹ç³»çµ±çš„管ç†å’Œå°ç”¨æˆ¶ç¨‹åºçš„ç·¨è¯åŸ·è¡Œï¼Œå¹¶ä¿å˜æ‰€æœ‰çš„æ•¸æ“šï¼Œå®Œæˆèˆ‡å¤–界通訊。開發系統é¢å°ç”¨æˆ¶ï¼Œå®Œæˆå°PLC程åºçš„編輯和轉æ›ã€‚
2.1PLCé‹è¡Œç³»çµ±è»Ÿä»¶
è©²ç³»çµ±è² è²¬ç‚ºæ‡‰ç”¨ç¨‹åºåˆ†é…å…§å˜ï¼ŒæŠŠè©²æ‡‰ç”¨ç¨‹åºåŠ è¼‰åˆ°åˆ†é…好的內å˜é‡Œï¼Œç„¶åŽé–‹å§‹åŸ·è¡Œè©²ç¨‹åºçš„æŒ‡ä»¤ã€‚如果該程åºè¦æ±‚ä½äºŽåº•層的æ“作系統æä¾›æœå‹™ï¼Œè©²é‹è¡Œç³»çµ±é‚„å¿…é ˆè² è²¬è™•ç†æœ‰é—œçš„æœå‹™è«‹æ±‚ã€‚è©²é‹è¡Œç³»çµ±æ˜¯åŸºäºŽåµŒå…¥å¼æ“作系統μC/OS-II來開發的,é¸ç”¨åµŒå…¥å¼æ“作系統æé«˜äº†è»Ÿä»¶ç³»çµ±çš„æŠ—干擾性,系統的å¯é æ€§åŠæ‡‰ç”¨è»Ÿä»¶çš„開發效率,縮çŸäº†é–‹ç™¼å‘¨æœŸã€‚μC/OS-II的移æ¤çš„主è¦å·¥ä½œæ˜¯ä¿®æ”¹èˆ‡ARM處ç†å™¨ç›¸é—œéƒ¨åˆ†çš„代碼,它們集ä¸åœ¨3個文件ä¸ã€‚
â‘ OS_CPU.H文件該文件包å«äº†ç”¨#define定義的與處ç†å™¨ç›¸é—œçš„常é‡ã€å®å’Œé¡žåž‹å®šç¾©ã€‚文件ä¸é€™äº›æ•¸æ“šé¡žåž‹çš„定義如下:
typedefunsignedcharBOOLEAN;
typedefunsignedcharINT8U;
typedefsignedcharINT8S;
typedefunsignedshortINT16U;
typedefsignedshortINT16S;
typedefunsignedintINT32U;
typedefsignedintINT32S;
typedeffloatFP32;
typedefdoubleFP64;
typedefunsignedintOS_STK;
與ARM7é«”ç³»çµæ§‹ç›¸é—œçš„一些定義如下:
#defineOS_CRITICAL_METHOD2
__swi(0×00)voidOS_TASK_SW(void);
__swi(0×01)void_OSStartHighRdy(void);
__swi(0×02)voidOS_ENTER_CRITICAL(void);
__swi(0×03)voidOS_EXIT_CRITICAL(void);_
_swi(0×40)void*GetOSFunctionAddr(intIndex);
__swi(0×41)void*GetUsrFunctionAddr(intIndex);
__swi(0×42)voidOSISRBegin(void);
__swi(0×43)intOSISRNeedSwap(void);
__swi(0×80)voidChangeToSYSMode(void);
__swi(0×81)voidChangeToUSRMode(void);
__swi(0×82)voidTaskIsARM(INT8Uprio);
__swi(0×83)voidTaskIsTHUMB(INT8Uprio);
/*ä¸Šè¿°å‡½æ•¸éœ€åœ¨ç§»æ¤æ–‡ä»¶OS_CPU.Hä¸å°‡å…¶è²æ˜Žã€‚
*/#defineOS_STK_GROWTH1
æ¤ä»£ç¢¼æ®µä¸çš„OS_ENTER_CRITICAL()函數和OS_EXIT_CRITICALï¼ˆï¼‰å‡½æ•¸å¯¦ç¾æ‰“開和關閉處ç†å™¨çš„功能。
â‘¡OS_CPU_C.C文件該文件ä¸çš„ä»»å‹™æ£§çµæ§‹åˆå§‹åŒ–函數OSTaskStkInitï¼ˆï¼‰ï¼Œå¿…é ˆæ ¹æ“šç§»æ¤æ™‚çµ±ä¸€å®šç¾©çš„ä»»å‹™å †æ£§çµæ§‹é€²è¡Œåˆå§‹åŒ–。å¦å¤–還有9個系統è¦å®šçš„鉤åå‡½æ•¸å¿…é ˆè²æ˜Žï¼Œä½†å¯ä»¥ä¸åŒ…å«ä»»ä½•代碼,這些鉤å函數在本移æ¤ä¸å…¨ç‚ºç©ºå‡½æ•¸ã€‚
â‘¢OS_CPU_A.S文件的移æ¤å…±åŒ…括4個函數:多任務啟動函數ä¸èª¿ç”¨çš„OSStartHighRdy()ã€ä»»å‹™åˆ‡æ›å‡½æ•¸OSCtxSw()ã€ä¸æ–·ä»»å‹™åˆ‡æ›å‡½æ•¸OSIntCtxSwï¼ˆï¼‰ã€æ™‚é˜ç¯€æ‹æœå‹™å‡½æ•¸OSTickISR()。
è‡³æ¤æ•´å€‹Î¼C/OS-IIå…§æ ¸ç§»æ¤å®Œæˆã€‚以åŽçš„用戶程åºéƒ½æ˜¯åœ¨é€™å€‹åŸºç¤Žä¸Šé€²è¡Œçš„æ“´å……。
2.2PLC開發系統軟件
該系統的主è¦ä»»å‹™æ˜¯è®“用戶編寫PLC程åºï¼Œæ‰€ä»¥é‚„需è¦è¨è¨ˆèˆ‡è©²ç³»çµ±ç›¸å°æ‡‰çš„編程平臺。編程平臺的è¨è¨ˆä¸»è¦åŒ…括編程界é¢çš„è¨è¨ˆã€ç·¨è¼¯å™¨çš„è¨è¨ˆã€è½‰æ›æ¨¡å¡Šçš„è¨è¨ˆã€ç·¨è¯å™¨çš„è¨è¨ˆå’Œé€šä¿¡æ¨¡å¡Šçš„è¨è¨ˆç‰ã€‚è»Ÿä»¶ç³»çµ±çµæ§‹åœ–如圖7所示。
用戶在編程平臺里編寫PLC程åºã€‚這里借用FX系列PLC的編程軟件SWOPC-FXGP/WIN-C作為編程平臺,編程語言å¯ä»¥ä½¿ç”¨æ¢¯å½¢åœ–和指令表。然åŽé€šéŽè½‰æ›ç¨‹åºæŠŠç·¨è¯åŽçš„目標文件轉化æˆC語言。轉æ›ç¨‹åºå…¶å¯¦å°±æ˜¯ä¸€å€‹è§£é‡‹ç³»çµ±ï¼Œé€šéŽé€æ¢ç¿»è¯ç·¨ç¨‹è»Ÿä»¶çš„æŒ‡ä»¤è¡¨ï¼Œç”Ÿæˆå’Œè™•ç†å™¨æŒ‡ä»¤ç³»çµ±ç„¡é—œçš„用戶指令。使用這樣的方å¼ä½œç‚ºä¸Šä½æ©Ÿç·¨ç¨‹å¹³è‡ºï¼Œç¯€çœäº†å·¥ä½œé‡ã€‚
3系統測試
將所è¨è¨ˆçš„PLC軟件系統æ¤å…¥åŸºäºŽLPC2294的嵌入å¼é–‹ç™¼å¹³è‡ºï¼Œèˆ‡PLCè¼¸å…¥è¼¸å‡ºç¡¬ä»¶æŽ¥å£æ¿é€£æŽ¥ï¼Œæ§‹æˆ14輸入10輸出的PLC系統。在上層開發系統ä¸ç·¨å¯«ç›¸æ‡‰çš„PLC梯形圖,編è¯åŽåŠ è¼‰åˆ°åµŒå…¥å¼PLCçš„é‹è¡Œç³»çµ±ä¸ã€‚梯形圖如圖8所示。
按下開關0,相應的LED0被點亮,延時4ç§’åŽLED1被點亮。按下開關1,相應的LED2è¢«é»žäº®ï¼ŒåŒæ™‚LED0被熄滅。
由以上的測試效果å¯ä»¥çœ‹å‡ºåŽŸåž‹æ©Ÿçš„æ¸¬è©¦çµæžœèˆ‡ç†è«–分æžçµæžœç›¸åŒï¼Œæ‰€è¨è¨ˆçš„PLC控制系統硬件ã€è»Ÿä»¶åŠÎ¼COS-IIæ“作系統的移æ¤é”到了期望的控制效果,é”到了è¨è¨ˆè¦æ±‚。
4çµæŸèªž
本文é‡å°ç›®å‰æ™®é€šPLCå˜åœ¨çš„一些ä¸è¶³ï¼Œæå‡ºäº†ä¸€ç¨®åŸºäºŽLPC2294的嵌入å¼PLCè¨è¨ˆæ–¹æ¡ˆã€‚該嵌入å¼PLC的硬件ã€è»Ÿä»¶ã€é€šä¿¡ç‰å„æ–¹é¢çš„功能è¨è¨ˆéˆæ´»ï¼Œæ˜“于剪è£ï¼Œæ›´è²¼è¿‘å„種檔次的機電è¨å‚™çš„è¦æ±‚。該PLC完全基于嵌入å¼ç³»çµ±çš„æŠ€è¡“基礎,拿來就å¯ä»¥ç”¨ï¼Œä¸”SOC芯片ã€åµŒå…¥å¼æ“作系統ã€ç¬¦åˆIEC61131-3編程語言標準編程環境ç‰åœ¨å¸‚å ´ä¸Šå¾ˆå®¹æ˜“æ‰¾åˆ°ï¼Œå› æ¤è©²åµŒå…¥å¼PLCåœ¨æˆ‘åœ‹å¸‚å ´çš„ä½¿ç”¨å’ŒæŽ¨å»£å‰æ™¯å分å¯è§€ã€‚
標簽:
上一篇:基于PAC的機器視覺應用方案
下一篇:機器視覺在ADAS系統ä¸çš„æ‡‰ç”¨
ä¸åœ‹å‚³å‹•網版權與å…è²¬è²æ˜Žï¼šå‡¡æœ¬ç¶²æ³¨æ˜Ž[來æºï¼šä¸åœ‹å‚³å‹•ç¶²]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Šå‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(www.hysjfh.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉載請與0755-82949061è¯ç³»ã€‚任何媒體ã€ç¶²ç«™æˆ–å€‹äººè½‰è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²â€ï¼Œé•å者本網將追究其法律責任。
本網轉載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯ç¶²æˆ–æ¥å…§æŠ•稿人士,版權屬于原版權人。轉載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² ç‰ˆæ¬Šæ³•å¾‹è²¬ä»»ã€‚
相關資訊