摘 è¦ï¼šéš¨è‘—å·¥æ¥è‡ªå‹•åŒ–æŠ€è¡“çš„ä¸æ–·ç™¼å±•,Modbuså”è°ç¾å·²ä¸åƒ…僅局é™äºŽæ‡‰ç”¨åœ¨PLC/ä¸Šä½æ©Ÿä¹‹é–“çš„é€šè¨Šä¸Šï¼Œè¨±å¤šæ™ºèƒ½å„€è¡¨å» å•†ä¹Ÿç´›ç´›é‡‡ç”¨è©²å”è°ä½œç‚ºè‡ªå·±ç”¢å“的通訊å”è°ã€‚æ–½è€å¾·å…¬å¸åœ¨å…¶ç·¨ç¨‹è»Ÿä»¶Concept2.2+補ä¸ç¨‹åºService Release2ä¸å¢žåŠ äº†ä¸€æ¢åŠŸèƒ½å¼·å¤§çš„é€šè¨ŠæŒ‡ä»¤XXMIT。ç†è€…çµåˆå¯¦ä¾‹å°è©²æŒ‡ä»¤çš„Modbus Master使用方法åšä¸€äº›ä»‹ç´¹ï¼Œä»¥ä¾›å»£å¤§éŽç¨‹æŠ€è¡“人員åƒè€ƒã€‚
é—œéµå—:Modbuså”è°; PLC; XXMIT指令; 智能儀表
1 引言
  Modbus å”è°æ˜¯æ³•國施è€å¾·å…¬å¸æŽ¨å‡ºçš„一個全開放的“主從å¼ï¼ˆMaster/Slave)â€é€šè¨Šå”è°ï¼Œå…¶æœ¬æ„在于實ç¾ä¸Šä½æ©Ÿï¼ˆä¸»è¨å‚™ï¼‰å°PLC(從è¨å‚™ï¼‰å…§éƒ¨å˜å„²å€åŸŸçš„“直接â€è®€å¯«æ“作,無需用戶å°PLC進行通訊編程。隨著工æ¥è‡ªå‹•åŒ–æŠ€è¡“çš„ä¸æ–·ç™¼å±•,Modbuså”è°ç¾å·²ä¸åƒ…僅局é™äºŽæ‡‰ç”¨åœ¨PLC/ä¸Šä½æ©Ÿä¹‹é–“çš„é€šè¨Šä¸Šï¼Œè¨±å¤šæ™ºèƒ½å„€è¡¨å» å•†ä¹Ÿç´›ç´›é‡‡ç”¨è©²å”è°ä½œç‚ºè‡ªå·±ç”¢å“的通訊å”è°ã€‚與æ¤åŒæ™‚,PLC也由以å‰å–®ç´”çš„I/O控制發展æˆç‚ºé›†æŽ§åˆ¶ã€æ•¸æ“šé‡‡é›†ã€é€šè¨Šç‚ºä¸€èº«ï¼Œåœ¨è¶Šä¾†è¶Šå¤šçš„自動化工程ä¸ï¼ŒPLC需è¦å–ä»£ä¸Šä½æ©Ÿï¼Œä½œç‚ºâ€œä¸»è¨å‚™â€ä¾†å®Œæˆèˆ‡æ™ºèƒ½å„€è¡¨æˆ–其它支æŒè©²å”è°çš„PLC的通訊。é‡å°é€™ä¸€æƒ…æ³ï¼Œæ–½è€å¾·å…¬å¸åœ¨å…¶ç·¨ç¨‹è»Ÿä»¶Concept2.2+補ä¸ç¨‹åºService Release2ä¸å¢žåŠ äº†ä¸€æ¢åŠŸèƒ½å¼·å¤§çš„é€šè¨ŠæŒ‡ä»¤XXMIT。通éŽè©²æŒ‡ä»¤ï¼Œç”¨æˆ¶å¯ä»¥å°‡æ–½è€å¾·Modicon系列PLC上的原Modbus Slave通訊å£ä½œç‚ºModbus Master壿ˆ–標準串å£ä¾†ä½¿ç”¨ï¼Œå¤§å¤§æ“´å±•了Modicon系列PLC的通訊功能。本文將çµåˆå¯¦ä¾‹å°è©²æŒ‡ä»¤çš„Modbus Master使用方法åšä¸€äº›ä»‹ç´¹ï¼Œä»¥ä¾›å»£å¤§éŽç¨‹æŠ€è¡“人員åƒè€ƒã€‚
2 XXMITæŒ‡ä»¤åŸºæœ¬åƒæ•¸ä»‹ç´¹
  2.1 åŸºæœ¬åƒæ•¸æ¦‚è¿°
[align=center]åŸºæœ¬åƒæ•¸åˆ—表

[/align]
  2.2 é‡è¦åƒæ•¸èªªæ˜Ž
  2.2.1 Commandåƒæ•¸
ã€€ã€€è©²åƒæ•¸çš„16個為ä½ç”¨äºŽè¨ç½®é€šè¨Šå£çš„ä¸åŒå·¥ä½œæ–¹å¼

  Bit1-Bit4: 使用Modem時需è¨å®šçš„ç›¸é—œåƒæ•¸
  Bit5: 是å¦ä½¿ç”¨XON/XOFFæµæŽ§åˆ¶ã€‚è¨ç‚º1時表示使用XON/XOFFæµæŽ§åˆ¶
  Bit6: 是å¦ä½¿ç”¨RTS/CTSæ¡æ‰‹ä¿¡è™Ÿã€‚è¨ç‚º1時表示å…許使用RTS/CTS信號
  Bit7: æ˜¯å¦æ¸…除“Back Spaceâ€å—符。è¨ç‚º1時表示在“Simple ASCII Inputâ€å’Œâ€œTerminated
  ASCII Inputâ€æ¨¡å¼ä¸‹ï¼Œæ¸…除MsgInä¸çš„“Back Spaceâ€å—符
  Bit8: æ˜¯å¦æŽ¥ç®¡é€šè¨Šå£FIFOç·©æ²–å€ã€‚è¨ç‚º1時表示XXMIT指令接管通訊å£FIFOç·©æ²–å€çš„æŽ§åˆ¶
  Bit9: 是å¦å•Ÿç”¨Modbus模å¼ã€‚è¨ç‚º1時表示通訊å£å·¥ä½œåœ¨Modbus Master模å¼ä¸‹
  Bit10: 是å¦å•Ÿç”¨æ¨™æº–䏲壿¨¡å¼ã€‚è¨æˆ‘1時表示通訊å£å·¥ä½œåœ¨æ¨™æº–䏲壿¨¡å¼ä¸‹
  注:Bit9,Bit10ä¸èƒ½åŒæ™‚è¨ç‚º1
  Bit11: 是å¦å•Ÿç”¨â€œSimple ASCII Inputâ€æ¨¡å¼ï¼Œè¨ç‚º1時表示啟用
  Bit12: 是å¦å•Ÿç”¨â€œTerminated ASCII Inputâ€æ¨¡å¼ï¼Œè¨ç‚º1時表示啟用
  Bit13: ä¸ç”¨
  Bit14: 是å¦å•Ÿç”¨RS485模å¼ã€‚è¨ç‚º1æ™‚è¡¨ç¤ºå•Ÿç”¨ã€‚åªæœ‰åœ¨ä½¿ç”¨Modicon Momentum系列PLCæ™‚ï¼Œè©²ä½æ‰è¨ç‚º1
  Bit15: 是å¦å•Ÿç”¨RTS/CTS Modem控制。è¨ç‚º1時表示啟用
  Bit16: ä¸ç”¨
  2.2.2 Msgoutåƒæ•¸
ã€€ã€€è©²åƒæ•¸ä¸å˜æ”¾éœ€ç™¼é€çš„å—符或數據。通常在Conceptä¸ç”¨ä¸€å€‹WORDåž‹æ•¸çµ„ä¾†çµ¦è©²åƒæ•¸è³¦å€¼ã€‚當通訊å£å·¥ä½œåœ¨Modbus Master模å¼ä¸‹æ™‚,需按Modbus RTUçš„æ ¼å¼ä¾†çµ¦è©²åƒæ•¸è³¦å€¼ï¼Œä½†ä¸å«CRCæ ¡é©—å€¼ï¼Œå…·é«”çš„æ ¼å¼è¦‹ä¸‹è¡¨

  2.2.3 Portåƒæ•¸
  åªè¦ä½¿ç”¨Modicon Momentum系列PLCæ™‚ï¼Œè©²åƒæ•¸æ‰è¢«è¨ç‚º2,å¦å‰‡è©²åƒæ•¸çš„值都被è¨å®šç‚º1,表示用Port1進行通訊。
3 實例
  下é¢çš„例å為ç†è€…在西寧寺æºå£æ°´é›»å» æ©Ÿçµ„ç›£æŽ§é …ç›®ä¸ï¼Œç”¨Modicon Compact PLC與MP6000智能功率儀表通訊的程åºï¼ŒåŸºæ¤ä¾†å°XXMITæŒ‡ä»¤çš„ä½¿ç”¨åšæ›´é€²ä¸€æ¥çš„說明。
  3.1 å·¥ç¨‹è¦æ±‚
  通éŽPLC從MP6000智能儀表ä¸è®€å–機組當å‰çš„æœ‰åŠŸåŠŸçŽ‡ã€ç„¡åŠŸåŠŸçŽ‡ç‰æ•¸æ“šã€‚
  3.2 硬件情æ³ï¼š
  PLC: æ–½è€å¾·Modicon Compact系列PLC,CPU型號為TSX PC-E984-265
  智能儀表:MP6000功率表
  通訊å”è°ï¼šModbuså”è°
  3.3 軟件情æ³ï¼š
  PLC編程軟件:Concept2.2+Service Release2
  編程方å¼ï¼šST文本編程
  MP6000çš„æ•¸æ“šå€æƒ…æ³ï¼šæŠŠMP6000儀表ä¸å¾žç¬¬ä¸€å€‹åœ°å€é–‹å§‹çš„64個數據讀出來
  PLC的數據å€ï¼šå¾žMP6000讀出的數據寫入PLC 40031é–‹å§‹çš„64個寄å˜å™¨ä¸
  3.4 程åºï¼š
  VAR
  XXMIT_MB : XXMIT;
  SET_CMD : SET_BIT;
  END_VAR
  SET_CMD (IN := 1,(* BOOL*)
  NO :=9 (* UINT*)); (*把Commandåƒæ•¸çš„bit9ç½®1,讓通訊å£å·¥ä½œåœ¨Modbus Master模å¼ä¸‹ï¼Šï¼‰
  XXMIT_CMD:=SET_CMD.RES;
  XXMIT_MSGOUT[1]:=3; (***MODBUS功能碼 ***)
  XXMIT_MSGOUT[2]:=64; (***需從MP6000ä¸è®€å–的寄å˜å™¨çš„æ•¸é‡ ***)
  XXMIT_MSGOUT[3]:=5; (***MP6000的地å€ï¼Šï¼Šï¼Šï¼‰
  XXMIT_MSGOUT[4]:=1; (***MP6000䏿•¸æ“šçš„起始地å€ï¼Šï¼Šï¼Šï¼‰
  XXMIT_MSGOUT[5]:=31; (***將讀å–的數據寫入PLC從40031é–‹å§‹çš„64個寄å˜å™¨ä¸ ***)
  XXMIT_MB (Start :=1, (* BOOL *)
  Command :=XXMIT_CMD , (* WORD *)
  MsgOut :=XXMIT_MSGOUT , (* ANY *)
  MsgLen :=5 , (* INT *)
  Port :=1 , (* BYTE *)
  Baudrate :=9600 , (* INT *)
  Databits :=8 , (* BYTE *)
  Stopbits :=1 , (* BYTE *)
  Parity :=2 , (* BYTE *)
  RespTout :=1000 , (* INT *)
  RetryLmt :=20 , (* INT *)
  StartDly :=0, (* INT *)
  EndDly :=0 (* INT *));
åƒè€ƒæ–‡ç»ï¼š
  1〠宋德玉.å¯ç·¨ç¨‹æŽ§åˆ¶å™¨åŽŸç†åŠæ‡‰ç”¨ç³»çµ±è¨è¨ˆ.北京:冶金工æ¥å‡ºç‰ˆç¤¾ï¼Œ1999
  2ã€ æ›¾ç¹æ³°ç‰.å¯ç·¨ç¨‹å™¨ä»¶æ‡‰ç”¨å°Žè«–.北京:清è¯å¤§å¸å‡ºç‰ˆç¤¾ï¼Œ2001