摘 è¦ï¼šæœ¬æ–‡é‡å°åœ¨ç·šæª¢æ¸¬ä¸å‡ºç¾çš„ç´—ç·šä¸å‹»å•題,通éŽRS-232C串å£é€šè¨Šï¼Œè¨è¨ˆäº†ä¸Šä½æ©Ÿèˆ‡æå§†é¾PLC-CJ1M(CPU21)之間的數據通信,采用基于Windowsæ“作系統功能強大的é¢å‘å°è±¡çš„程åºè¨è¨ˆèªžè¨€â€”—Visual Basicï¼Œç·¨å¯«äº†ä¸Šä½æ©Ÿç¨‹åºï¼Œè€Œç„¡éœ€åœ¨PLCä¸ç·¨å¯«ä»»ä½•程åºï¼Œå¯ä»¥åœ¨ç·šç²å¾—ç´—ç·šçš„æª¢æ¸¬æ•¸æ“šï¼ŒåŠæ™‚åæ˜ ç´—ç·šçš„ä¸å‹»ã€‚
é—œéµå—:紗線檢測; 串行通訊; å¯ç·¨ç¨‹æŽ§åˆ¶å™¨
0. 引言
  1969年美國數å—è¨å‚™å…¬å¸æ ¹æ“šç¾Žåœ‹é€šç”¨æ±½è»Šå…¬å¸çš„è¦æ±‚ï¼Œç ”åˆ¶å‡ºä¸–ç•Œä¸Šç¬¬ä¸€è‡ºå¯ç·¨ç¨‹åºæŽ§åˆ¶å™¨ã€‚最åˆåªèƒ½ç”¨äºŽé‚輯é‹ç®—,故稱為å¯ç·¨ç¨‹é‚輯控制器,簡稱為PLC(Programmable Logic Controllerï¼‰ï¼Œéš¨è‘—è¨ˆç®—æ©ŸæŠ€è¡“å’Œé›»åæŠ€è¡“的飛速發展,其功能é é è¶…å‡ºé †åºæŽ§åˆ¶å’Œé‚輯控制的范疇,ä¸åƒ…實ç¾äº†æ•¸æ“šé‹ç®—和處ç†èƒ½åŠ›ï¼Œè€Œä¸”é«”ç©å°ï¼ŒåŠŸèƒ½å¼·ï¼Œå¯é æ€§é«˜ï¼Œç·¨ç¨‹ç›´è§€ï¼Œé©æ‡‰æ€§å¥½ï¼ŒæŽ¥å£æ–¹ä¾¿ï¼Œæ€§åƒ¹æ¯”高。
  近年來,隨著ç¾ä»£åŒ–生產技術的æé«˜ï¼Œä»¥åŠè¨ˆç®—機技術ã€ä¿¡æ¯æŠ€è¡“和通訊技術的相互滲é€ï¼Œç´—ç·šçš„ä¸å‹»ç›´æŽ¥å°Žè‡´å¸ƒé¢çš„ä¸å¹³æ•´ï¼Œé€™å°±èªªæ˜Žåœ¨ç´—線生產環節極為é‡è¦ã€‚ç´—ç·šä¸å‹»æ˜¯å½±éŸ¿å…¶å“質的é‡è¦æŒ‡æ¨™ä¹‹ä¸€ã€‚傳統的紗線檢測方å¼éƒ½æ˜¯åœ¨å¯¦é©—室離線進行的,通éŽå°ç´—ç·šçš„æŠ½æ¨£ï¼Œè¦æ±‚ä¸€å®šçš„æº«æ¿•åº¦å‰æä¸‹ï¼Œç›¸å°äºŽç´—ç·šçš„åœ¨ç·šæª¢æ¸¬åæ˜ å‡ºé›¢ç·šæª¢æ¸¬çš„æ»¯åŽæ€§å’Œéš¨æ©Ÿæ€§ã€‚RS-232Cä¸²è¡Œé€šè¨Šå¯¦ç¾æ¯”è¼ƒå®¹æ˜“ï¼Œå¸¸è¢«ç”¨äºŽè‡ªå‹•æŽ§åˆ¶ã€æ•¸æ“šé‡‡é›†ã€æ™ºèƒ½å„€è¡¨ç‰ä¸Šä½æ©Ÿèˆ‡å¤–部è¨å‚™çš„æ•¸æ“šé€šè¨Šã€‚本文è¨è¨ˆäº†VB與æå§†é¾PLC-CJ1M(CPU21)之間的數據通信,在線ç²å¾—紗線的檢測數據,如CV值ã€ç´—線瞬時直徑ã€å¹³å‡ç›´å¾‘ã€ç²—節最大值ã€ç´°ç¯€æœ€å°å€¼ç‰ç‰ï¼ŒåŠæ™‚åæ˜ ç´—ç·šçš„ä¸å‹»ï¼Œä½¿æ“ä½œäººå“¡åŠæ™‚åšå‡ºç›¸æ‡‰èª¿æ•´ã€‚
1. ä¸Šä½æ©Ÿèˆ‡PLC之間通訊實ç¾
  æå§†é¾PLC—CJ1M(CPU21)有兩個串行通訊å£ï¼Œä¸€æ˜¯é€šé޿姆é¾å°ˆç”¨ä¸²å£é€šè¨Šç·šCS1W-CN226,其網絡類型è¨ç½®ç‚ºToolbusï¼ŒåŒæ™‚å°‡DIP4串行通訊è¨ç‹€æ…‹ç½®ç‚ºON;ä¸€æ˜¯é€šéŽæå§†é¾ä¹é‡ä¸²å£é€šè¨Šç·šXM2Z-200S-CV,其網絡類型è¨ç½®ç‚ºSYSMAC WAY,其它為默èªè¨ç½®ï¼ŒåŒ…括端å£ç‚ºCOM1,波特率為9600。圖1æ‰€ç¤ºç‚ºä¸Šä½æ©Ÿé€šéŽRS-232C端å£é€£æŽ¥åˆ°PLC的示æ„圖,也å¯ä»¥ç¨±ä½œ1:1連接。
[align=center]

圖1 RS-232C端å£çš„1:1連接[/align]
  圖2æ‰€ç¤ºç‚ºä¸Šä½æ©Ÿèˆ‡PLC之間通訊實ç¾éŽç¨‹ã€‚
[align=center]

圖2 ä¸Šä½æ©Ÿèˆ‡PLC之間通訊實ç¾éŽç¨‹[/align]
2. VB與PLC之間通訊å”è°å’Œç¨‹åºå¯¦ç¾
  2.1 éˆæŽ¥ç³»çµ±çš„é€šè¨Šå”è°
  在紗線數據通訊ä¸ï¼Œåªéœ€è¦åœ¨ä¸Šä½æ©Ÿç³»çµ±ä¸ç·¨å¯«ä¸Šä½æ©Ÿé€šè¨Šç¨‹åºï¼Œç„¡éœ€åœ¨PLCä¸ç·¨å¯«ä»»ä½•程åºï¼ŒPLC CPUæœƒæ ¹æ“šä¸Šä½æ©Ÿç™¼ä¾†çš„命令幀自動生æˆéŸ¿æ‡‰å¹€è¿”å›žçµ¦ä¸Šä½æ©Ÿã€‚命令幀和響應幀之間包å«éœ€è¦é€šè¨Šçš„æ•¸æ“šï¼Œåªæœ‰ä¿è‰æ£ç¢ºå¯¦ç¾å‘½ä»¤å¹€å’ŒéŸ¿æ‡‰å¹€ä¹‹é–“的應ç”,æ‰èƒ½å¯¦ç¾æº–確的數據交æ›ã€‚å‘½ä»¤å’Œæ‡‰ç”æœ‰å…©ç¨®æ–¹å¼ï¼Œä¸€ç¨®æ˜¯å¾žä¸Šä½æ©Ÿç™¼å‘½ä»¤åˆ°PLC,å¦ä¸€ç¨®æ–¹å¼å…許PLCç™¼å‘½ä»¤çµ¦ä¸Šä½æ©Ÿï¼Œæˆ‘們采用淺一種方å¼ã€‚
ã€€ã€€å¾žä¸Šä½æ©Ÿç™¼é€å‘½ä»¤æ™‚的命令幀和響應幀如圖3。
[align=center]

圖3 å‘½ä»¤å¹€å’ŒéŸ¿æ‡‰å¹€æ ¼å¼[/align]
  命令幀ä¸ï¼š
  @——命令開始標志,所有命令都以“@â€é–‹å§‹;
ã€€ã€€ç¯€é»žè™Ÿâ€”â€”èˆ‡ä¸Šä½æ©Ÿé€£æŽ¥çš„PLC,在1:1連接ä¸é»˜èªå€¼ç‚º00;
  標題碼——è¨ç½®å…©å—節的命令代碼,如RD代表讀PLCçš„DM倿•¸æ“š;
ã€€ã€€æ£æ–‡â€”—è¨ç½®å‘½ä»¤åƒæ•¸
  FCS——è¨ç½®å…©å—ç¬¦çš„å¹€æª¢æŸ¥é †åºç¢¼ï¼Œç”¨äºŽæ ¡é©—,是用兩ä½ASCII碼表示的8使•¸æ“šï¼Œæ˜¯å¾žâ€œ@â€é–‹å§‹åˆ°æ£æ–‡çµæŸçš„æ‰€æœ‰å—符的ASCII碼按ä½ç•°æˆ–é‹ç®—çš„çµæžœ;
ã€€ã€€çµæŸç¬¦â€”â€”è¡¨ç¤ºå‘½ä»¤çš„çµæŸï¼Œç”¨â€œï¼Šâ€å’Œå›žè»Šç¬¦â€œCHR$(13ï¼‰â€æ¨™æ˜Žã€‚
  應ç”å¹€ä¸ï¼š
  @ã€ç¯€é»žè™Ÿã€æ¨™é¡Œç¢¼ã€FCSå’ŒçµæŸç¬¦åŒå‘½ä»¤å¹€ä¸çš„å«ç¾©ã€‚
ã€€ã€€ç•°å¸¸è™Ÿâ€”â€”è¿”å›žå‘½ä»¤çš„åŸ·è¡Œç‹€æ…‹ï¼Œï¼Œæ˜¯å¦æœ‰éŒ¯èª¤ç™¼ç”Ÿã€‚
  2.2 通訊端å£åˆå§‹åŒ–
ã€€ã€€åœ¨ä¸Šä½æ©Ÿèˆ‡PLC實ç¾é€šè¨Šä¹‹å‰ï¼Œå¿…é ˆå…ˆåœ¨ä¸Šä½æ©ŸVBä¸è¨ç½®é€šè¨ŠæŽ§ä»¶MSComm1的相應屬性,通訊å£åˆå§‹åŒ–程åºä¸€èˆ¬æ”¾åœ¨çª—é«”åŠ è¼‰ç¨‹åºä¸ã€‚
  Private Sub Form_Load()
  MSComm1.CommPort = 1 ‘è¨ç½®Com1通訊å£
  MSComm1.Settings = “9600,e,7,2†‘波特率9600,eå¶æ ¡é©—,7使•¸æ“šä½ï¼Œ2ä½åœæ¢ä½
  MSComm1.PortOpen = True ‘打開通訊端å£
  MSComm1.InBufferCount = 0 ‘清空接收緩沖å€
  End Sub
  其它è¨ç½®å‡å–通訊控件MSComm1的默èªå€¼ã€‚
  2.3 å¹€æ ¼å¼ä»£ç¢¼
  采用基于Windowsæ“作系統功能強大的é¢å‘å°è±¡çš„程åºè¨è¨ˆèªžè¨€â€”—Visual Basicï¼Œç·¨å¯«äº†ä¸Šä½æ©Ÿç¨‹åºï¼Œå»ºç«‹äº†ä¸Šä½æ©Ÿèˆ‡PLC之間良好的通訊å”è°ã€‚以讀內å˜DMå€ç‚ºä¾‹ï¼š
ã€€ã€€ä¸Šä½æ©Ÿå‘½ä»¤å¹€ï¼š
  "@" + "00" + "FA" + "1" + "00000000" + "0101" + "82" + 開始地å€+讀å–個數+FCS+çµæŸç¬¦
  PLC應ç”幀:
  "@" + "00" + "FA" + "1" + "00000000" + "0101" + "82" + "0000"+è®€å–æ•¸æ“š +FCS+çµæŸç¬¦
  其ä¸ï¼š
  FA——表示FINS命令
  0101——表示連續讀內å˜å€
  82——表示讀內å˜DMå€
  2.4 æ ¡é©—ç®—æ³•å¯¦ç¾
  為了ä¿è‰é€šè¨Šæ•¸æ“šæº–ç¢ºç„¡èª¤çš„å‚³è¼¸ï¼Œæå§†é¾PLCå°é€šè¨Šæ•¸æ“šä»¥æŒ‰ä½ç•°æˆ–ç®—æ³•é€²è¡Œæ ¡é©—ã€‚ä»£ç¢¼å¦‚ä¸‹ï¼Œåƒ…ä¾›åƒè€ƒã€‚
  Option Explicit
  Function FCS(ByVal temp1 As String) As String
  Dim slen1, i, xorresult1 As Integer ‘ 定義變é‡
  Dim tempfcs1 As String
  xorresult1 = 0
  slen1 = Len(temp1) ‘ 求輸入å—符串的長度
  For i = 1 To slen1
  xorresult1 = xorresult1 Xor Asc(Mid(temp1, i, 1)) ‘從首å—符到尾å—符ç²å–ASCII碼,按ä½ç•°æˆ–
  Next i
  Tempfcs1 = Hex$(xorresult1) ‘轉æ›ç‚º16進制
  If Len(tempfcs1) = 1 Then
  FCS = "0" & tempfcs1
  Else
  FCS = tempfcs1
  End If
  End Function
3. çµæŸèªž
  本文作者創新點主è¦é€šéŽRS-232C串å£é€šè¨Šï¼Œé‡‡ç”¨é¢å‘å°è±¡çš„å¯è¦–化編程工具——Visual Basicå»ºç«‹ä¸Šä½æ©Ÿèˆ‡æå§†é¾PLC-CJ1M(CPU21)之間的數據通訊,ç²å–紗線在線檢測數據,ç¾å ´å¯¦æ¸¬è¡¨æ˜Žèƒ½å¤ 快速準確在線測é‡ç´—ç·šçš„CV值ã€çž¬æ™‚直徑ã€å¹³å‡ç›´å¾‘ã€ç²—節最大值ã€ç´°ç¯€æœ€å°å€¼ç‰ç‰ï¼Œå¯¦æ™‚åæ˜ ç´—ç·šçš„ä¸å‹»çŽ‡ï¼Œå°æé«˜æ£‰ç´¡ä¼æ¥ç´—線質é‡å…·æœ‰é‡è¦çš„æ„ç¾©ã€‚
åƒè€ƒæ–‡ç»ï¼š
  [1]榮大é¾. VB編程PLCä¸²è¡Œé€šè¨ŠæŠ€è¡“åŠæ‡‰ç”¨[J].微計算機信æ¯ï¼Œ2002,11:54-56
  [2]張智æ°.使用VB開發PLC的串行通訊程åº.儀器儀表用戶[J],2002,9(1):23-25
  [3]ä½™æ¾ï¼Œè¶™å¿ å ‚.用VISUAL BASIC實ç¾ä¸Šä½æ©Ÿå’ŒPLC的通訊[J].電氣傳動, 1999,(3):41-43
  [4]OMRON SYSMAC CS/CJ系列å¯ç·¨ç¨‹æŽ§åˆ¶å™¨ç·¨ç¨‹æ‰‹å†Š[Z],2003,4
  [5]樊春峰,æŽå‹å‰.用VBé–‹ç™¼ä¸Šä½æ©Ÿèˆ‡OMRON PLC之間的一種通訊程åº[J].洛陽工å¸é™¢å¸å ±ï¼Œ2002,23(2):82-84
  [6]沈世斌. 三è±PLC與PC機間的通訊應用[J].微計算機信æ¯ï¼Œ2006,4-1:81-83