時間:2018-01-10 11:07:31來æºï¼šç¶²çµ¡è½‰è¼‰
1引言
ç¾å ´è¨å‚™å±¤ä¸çš„è¨å‚™ç¨®é¡žç¹å¤š,有傳感器ã€å•Ÿå‹•器ã€é©…動器ã€I/O部件ã€è®Šé€å™¨ã€é–¥é–€ç‰ç‰,當然也包括ç¾å ´æª¢æ¸¬å„€å™¨å„€è¡¨è¨å‚™ã€‚PLC是ç¾å ´è¨å‚™æŽ§åˆ¶å±¤ä¸å¯ç¼ºå°‘的部分,已經éžå¸¸æ™®åŠï¼Œå¦‚何簡便地實ç¾èˆ‡PLC的交互已經æˆç‚ºçœ¾å¤šå» å•†æ–°çš„ç«¶çˆæˆ°å ´ã€‚ç”±æ¤ç”¢ç”Ÿäº†äººæ©Ÿç•Œé¢ç‰è»Ÿä»¶ç”¢å“,這些產å“的出ç¾ç°¡åŒ–了å°PLCçš„æŽ§åˆ¶ã€æ“作,使PLCçš„æ‡‰ç”¨æ›´åŠ æ–¹ä¾¿ï¼›ä½†ä¹Ÿæœ‰å…¶å…±åŒçš„ç¼ºé»žï¼Œåƒ¹æ ¼æ™®éå高和å¯äºŒé–‹ç™¼æ€§è¼ƒå·®ã€‚VB作為“原始â€çš„編程語言在這兩方é¢ç„¡ç–‘有著明顯優勢的,本文çµåˆä¸€å€‹ç°¡å–®çš„æ¡ˆä¾‹ï¼Œç”¨æ¯”較基礎的概念討論如何通éŽVB實ç¾PC與PLC之間的通信å•題,這å°å‰›æ¶‰æ¥æŽ§åˆ¶é ˜åŸŸçš„工程師或許是有幫助的。在ç¾å ´è¨å‚™å±¤ä¸å„å¼å„樣的è¨å‚™éƒ½å¯ä»¥å’Œè¨ˆç®—æ©Ÿè¯æ©Ÿï¼Œè€Œæœ€ç°¡å–®çš„è‡ªå‹•åŒ–è¯æ©Ÿæ–¹å¼å°±æ˜¯ä½¿ç”¨ä¸²è¡Œé€šä¿¡ï¼ŒVBæä¾›äº†ä¸²è¡Œé€šä¿¡æŽ§ä»¶å¯ä»¥è®“開發者開發出串行通信的系統程åºï¼Œä»¥ä¸‹æ˜¯å°ç›¸é—œå•題的粗略討論。
2串行通信基本概念
æ•¸æ“šé€šè¨Šä¸æœ‰å…©ç¨®é¡žåž‹çš„通信形å¼ï¼Œå³å¹¶è¡Œé€šä¿¡ï¼ˆParallelCommunication)和串行通信(SerialCommunication)。例如,如果有8使•¸æ“šéœ€è¦å‚³é€ï¼Œé‚£ä¹ˆå¹¶è¡Œé€šä¿¡ä¸€æ¬¡å°±å¯ä»¥å®Œæˆ8ä½çš„傳輸é‡ï¼›è€Œä¸²è¡Œä¸€æ¬¡åªèƒ½å‚³é€1ä½ã€‚圖1表示了兩種ä¸åŒçš„通信模å¼ï¼Œå¸¸ç”¨çš„串行通信也有兩種,分別為RS-232å’ŒRS-485。
2.1RS-232串行通信
RS-232çš„ä¿¡è™Ÿæº–ä½æ˜¯åƒè€ƒåœ°ç·šè€Œè¨€çš„,如圖2所示。相å°äºŽåƒè€ƒæŽ¥åœ°ç«¯1å‚³è¼¸ç«¯å‚³é€æ•¸æ“šï¼›æŽ¥æ”¶ç«¯å‰‡ç›¸å°äºŽåƒè€ƒæŽ¥åœ°ç«¯2復ç¾å‡ºå‚³é€ç«¯çš„傳é€çš„æ•¸æ“šã€‚
2.2RS-485串行通信
RS-485的信號被傳é€å‡ºåŽ»æ™‚æœƒåˆ†æˆæ£è² å…©æ¢ç·šè·¯ï¼Œç•¶åˆ°é”接收端åŽï¼Œåœ¨å°‡ä¿¡è™Ÿç›¸æ¸›é‚„原æˆåŽŸä¾†çš„ä¿¡è™Ÿï¼›å¦‚æžœå°‡åŽŸå§‹çš„ä¿¡è™Ÿè¡¨ç¤ºæˆï¼ˆDT),而被分æˆçš„信號分別標示æˆï¼ˆD+)åŠï¼ˆD-),則DT=(D+)-(D-)。åŒç†ï¼ŒæŽ¥æ”¶ç«¯åœ¨æŽ¥æ”¶åˆ°ä¿¡è™ŸåŽï¼Œä¹Ÿä¾æ“šä¸Šå¼é‚„原æˆåŽŸä¾†çš„æ¨£å。如果線路å—到干擾,兩æ¢ç·šè·¯çš„信號分別為(D+)+Noise與(D-)+Noise。接收端還原信號為(DT)=[(D+)+Noise]-[(D-)+Noise],與先å‰çµæžœä¸€æ¨£ï¼Œæ‰€ä»¥RS-485å¯ä»¥æœ‰æ•ˆçš„防æ¢å™ªè²çš„干擾。
3VB的基本概念
VB(VisualBasic)是微軟的窗å£è»Ÿä»¶ï¼Œæä¾›äº†å¾ˆå¤šæŽ¥å£æˆå“¡ï¼Œå°è±¡ã€å±¬æ€§ã€äº‹ä»¶ã€æ–¹æ³•就是4個é‡è¦çš„æŽ¥å£ï¼ŒVBæä¾›äº†è¨±å¤šå¸¸ç”¨çš„æŽ§ä»¶ã€‚
3.1å·æ¨™æŽ§ä»¶
3.2按鈕控件
3.3定時器控件
VBæä¾›äº†å¤§é‡çš„æŽ§ä»¶ï¼Œåœ¨æ¤ä¸å†å¤šè¿°ã€‚
4基于MScomm控件的串行通信
è¦å®ŒæˆVB與PLCç‰è¨å‚™çš„串行通信è¦ç”¨åˆ°MScommæŽ§ä»¶ï¼Œåœ¨æ¤æœ‰å¿…è¦å°è©²æŽ§ä»¶ä½œè¼ƒè©³ç´°çš„說明。Mscommæ˜¯ä¸€å€‹éžæ¨™æº–控件,需è¦è¦æ‰‹å‹•æ·»åŠ è¨±å¤šé …ç›®ï¼Œå…¶æ¥é©Ÿå¦‚下。
1ï¼‰é¸æ“‡èœå–®çš„ã€å·¥ç¨‹ã€‘
2ï¼‰é¸æ“‡ã€éƒ¨ä»¶ã€‘
4.1MODBUSASCII
Modbus分為ASCIIå’ŒRTU兩種,ASCIIé‡‡ç”¨çš„æ ¼å¼å’Œæ ¡é©—相å°ç°¡å–®ï¼Œæœ¬æ–‡é‡‡ç”¨ASCIIæ ¼å¼ï¼Œå¹¶åƒ…å°ä½¿ç”¨çš„功能碼進行說明,更多的信æ¯ï¼Œè«‹åƒçœ‹å”è°çš„詳細說明。
1ï¼‰é€šä¿¡æ ¼å¼
LRC算法:ADRH+CMDH+DATAH,然åŽå–2的補碼。
2)功能碼
05,寫入線圈
01,讀線圈狀態
06,寫入單個å—寄å˜å™¨
4.2VB與PLC通信的實ç¾
以下舉例說明ç¾å ´è¨å‚™èˆ‡PLC通信的實ç¾ã€‚
1ï¼‰æŽ§åˆ¶è¦æ±‚:控制PLC的起動ã€åœæ¢ï¼Œå¹¶é¡¯ç¤ºé‹è¡Œç‹€æ…‹ï¼ˆç¶ 色為é‹è¡Œï¼Œç´…è‰²ç‚ºåœæ¢ï¼‰ï¼›èƒ½å¤ 用交替型按鈕控制Y0,Y1,并用指示燈顯示Y0,Y1ç‹€æ…‹ï¼ˆç¶ è‰²ç‚ºé‹è¡Œï¼Œç´…è‰²ç‚ºåœæ¢ï¼‰ï¼›èƒ½å¤ å°D256,D512兩個寄å˜å™¨é€²è¡Œæ•¸å€¼å¯«å…¥çš„æ“ä½œã€‚
2ï¼‰å¯¦ç¾æ€è·¯ï¼šPLCèµ·å‹•åœæ¢çš„æ¨™å¿—ä½ç‚ºM1072,查DVPå”è°ï¼ŒçŸ¥é“地å€ç‚ºH0C30,按功能碼01æ“ä½œï¼›åŒæ¨£Y0,Y1的地å€åˆ†åˆ¥ç‚ºH0500,H0501。寫入FF00為ON,0000為OFF,按功能碼05æ“作;D256,D512地å€åˆ†åˆ¥ç‚ºH1100,H1200,按功能碼06æ“作å³å¯ã€‚
3)VB接å£
用按鈕控制PLCçš„èµ·å‹•åœæ¢ï¼ŒY0ã€Y1çš„ON/OFFåŠD256ã€D512寫完數據的發é€ï¼›ç”¨Shapeçµ„ä»¶åšæŒ‡ç¤ºç‡ˆï¼Œè¡¨ç¤ºPLCçš„é‹è¡Œç‹€æ…‹å’ŒY的狀態;用timer組件ä¸åœçš„讀å–M1072的狀態,以判斷PLCçš„é‹è¡Œæƒ…æ³ï¼›ç”¨MScomm控件實ç¾PC與PLC的通信。
4)編程實ç¾çš„代碼構æˆ
(1)LRCç®—æ³•æ ¡é©—çš„å¯¦ç¾
PublicFunctionLRC(strAsString)AsString
c=0
l=Len(str)
Forc=c+1Tol
c_data=Mid$(str,c,2)
d_lrc=d_lrc+Val("&H"+c_data)
c=c+1
Nextc
Ifd_lrc>&HFFThen
d_lrc=d_lrcMod&H100
EndIf
h_lrc=Hex(&HFF-d_lrc+1)
IfLen(h_lrc)>2Then
h_lrc=Mid(h_lrc,Len(h_lrc)-1,2)
EndIf
LRC=h_lrc
EndFunction
(2)é‹è¡Œçš„開始就判斷PLC的狀態并è¨ç½®æ¨™å¿—ä½
'åˆæ¬¡é‹è¡Œæ‰“開串å£ï¼Œå¹¶é¡¯ç¤ºPLCé‹è¡Œç‹€æ…‹
PrivateSubForm_Load()
Dims1AsString
Dims2AsString
Dims22AsString
Dims3AsString
Dims4AsString
MSComm1.PortOpen=True
s2="01010C300001"
s22=LRC(s2)
s1=":"+s2+s22+Chr$(13)+Chr$(10)
MSComm1.Output=s1
s3=MSComm1.Input
s4=Mid$(s,6,8)
Ifs4="0C30FF00"Then
plc=1'PLC為é‹è¡Œæ¨™å¿—
Else
plc=0'PLCç‚ºåœæ¢æ¨™å¿—
EndIf
EndSub
(3)下é¢ä¸€æ®µç‚ºç”¨æŒ‡ç¤ºç‡ˆè¡¨ç¤ºPLCçš„é‹è¡Œç‹€æ…‹
PrivateSubTimer5_Timer()
Dims1AsString
Dims2AsString
Dims22
Dims3AsString
Dims4AsString
s2="01010C300001"
s22=LRC(s2)
s1=":"+s2+s22+Chr$(13)+Chr$(10)
MSComm1.Output=s1
s3=MSComm1.Input
s4=Mid$(s3,8,2)
Ifs4="31"Then
plc=1'PLC為é‹è¡Œæ¨™å¿—
Else:Ifs4="30"Thenplc=0'PLCç‚ºåœæ¢æ¨™å¿—
EndIf
Ifplc=1Then
Label2.Caption="PLCæ£åœ¨é‹è¡Œ......"
Shape1.FillColor=RGB(0,255,0)'green
Else
Label2.Caption="PLCå·²ç¶“åœæ¢"
Shape1.FillColor=RGB(255,0,0)'red
EndIf
EndSub
(4)PLCçš„èµ·å‹•èˆ‡åœæ¢
'èµ·å‹•PLC
PrivateSubstart_Click()
DimstroutAsString
Timer5.Enabled=False
str="00050C30FF00"'M1072為PLCèµ·å‹•åœæ¢æ¨™å¿—ä½ã€‚查地å€è¡¨ï¼ŒM1072為OC30.FF00為置
ON,0000為置OFF。
'ä»¥ä¸Šéƒ½æ˜¯å›ºå®šæ ¼å¼ï¼Œè¦ç‰¢è¨˜ã€‚
LRCC=LRC(str)'計算strçš„lrcæ ¡é©—ç¢¼ã€‚
strout=":"+str+LRCC+Chr$(13)+Chr$(10)'欲傳é€ä¹‹æ•¸æ“šã€‚13為D,10為A
MSComm1.Output=strout
Timer5.Enabled=True
EndSub
'åœæ¢PLC
PrivateSubstop_Click()
DimstroutAsString
Timer5.Enabled=False
str="00050C300000"
LRCC=LRC(str)
strout=":"+str+LRCC+Chr$(13)+Chr$(10)
MSComm1.Output=strout
Timer5.Enabled=True
EndSub
Y0ã€Y1çš„ON/OFF與PLCèµ·å‹•/åœæ¢çš„æŽ§åˆ¶æ–¹å¼ç›¸åŒï¼ŒæŒ‡ç¤ºç‡ˆçš„表示方å¼ä¹Ÿç›¸åŒã€‚D256,D512數據寫入的æ“作類似,é™äºŽç¯‡å¹…其它代碼就ä¸å†åˆ—出了。
5çµæŸèªž
VB語言易于編程使用,為與串行è¨å‚™çš„通信æä¾›äº†å¾ˆå¤§çš„æ–¹ä¾¿ã€‚臺é”PLC采用標準的目å‰å»£ç‚ºæµè¡Œçš„MODBUSå”è°ï¼Œç‚ºå¯¦ç¾PLC與監控計算機的通信æä¾›äº†ç°¡åŒ–çš„å¹³è‡ºã€‚ç”±äºŽè‡ºé”æ‰€æœ‰çš„æ©Ÿé›»ç”¢å“都支æŒMODBUSå”è°ï¼Œæ‰€ä»¥ï¼ŒæŽŒæ¡äº†VB與PLC通信éŽç¨‹ï¼Œä¹Ÿå°±ç‰äºŽæŽŒæ¡äº†PCèˆ‡è‡ºé”æ‰€æœ‰æ©Ÿé›»ç”¢å“的通信。
標簽:
上一篇:ä¸èƒ½æ¾æ‡ˆçš„é‚„æœ‰è®Šé »å™¨çš„å…§éƒ¨èžºæ “
下一篇:基于FPGA的數å—ä¸‹è®Šé »å™¨çš„è¨...
ä¸åœ‹å‚³å‹•網版權與å…è²¬è²æ˜Žï¼šå‡¡æœ¬ç¶²æ³¨æ˜Ž[來æºï¼šä¸åœ‹å‚³å‹•ç¶²]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Šå‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(www.siyutn.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉載請與0755-82949061è¯ç³»ã€‚任何媒體ã€ç¶²ç«™æˆ–å€‹äººè½‰è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²â€ï¼Œé•å者本網將追究其法律責任。
本網轉載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯ç¶²æˆ–æ¥å…§æŠ•稿人士,版權屬于原版權人。轉載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² ç‰ˆæ¬Šæ³•å¾‹è²¬ä»»ã€‚
相關資訊