|
|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成
7 E: _- U- X- ?; s4 G, ~0 p3 o2 {(1) LRC算法校验的实现
~: E5 J! V7 }Public Function LRC(str As String) As String
1 e0 U5 ]+ s% M5 ]$ B/ O @/ Bc = 0
3 {/ [' `( q9 C+ m, y3 \l = Len(str) / `! y5 t, V; V
For c = c + 1 To l
D" @1 ]/ p% ?9 U# b8 g+ c" m+ `c_data = Mid$(str, c, 2)
- V% `: _" W( P- t& ed_lrc = d_lrc + Val("&H" + c_data)
& Q- b: @2 {# P! V& V/ {% |c = c + 1
/ K9 m- ~( [* ?- P: [3 j; x5 CNext c( C, t* p. M/ p& |2 _9 p8 x% p- a
If d_lrc > &HFF Then2 F; `# ~9 ?. E" B: y7 ?% X
d_lrc = d_lrc Mod &H1004 [; @/ U; L* N5 k# \
End If
9 ]8 {" Y: e, Kh_lrc = Hex(&HFF - d_lrc + 1)
; y# o4 z7 P; ?1 d, g% Y" EIf Len(h_lrc) > 2 Then" |7 R0 z9 S2 ~" U" {: M3 h# u
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)- K$ X, J, E9 [$ V2 q
End If: E1 {3 `1 k7 |+ @! V
LRC = h_lrc
: I8 E; z/ F7 E; o7 r1 x, U+ ]End Function( C: j9 U+ d, Z
(2) 运行的开始就判断PLC的状态并设置标志位" M8 v' w" H7 @
'初次运行打开串口,并显示PLC运行状态5 g( v& ?# @" M3 r% ]
Private Sub Form_Load(), {+ Z8 \2 [! [, E
Dim s1 As String
" q/ o5 e0 ^. iDim s2 As String7 L+ m, e) l+ ^# x& W* X
Dim s22 As String
- _% k. r* X- u/ O' lDim s3 As String
3 t" j* W; y( Q) p) `8 u5 ?! j, XDim s4 As String& o) S) P4 l+ \# k2 C8 T* }. Z
MSComm1.PortOpen = True P9 r* t) Y0 I. ?# W
s2 = "01010C300001"
6 A+ c' _3 L" _' W! p, ~) X& as22 = LRC(s2)
; C, J( b, C" c5 `s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10) ~4 `; P0 g5 W& C Q
MSComm1.Output = s1
7 \# H- x( H* ~6 g% gs3 = MSComm1.Input, n# z, O6 ?/ ~' k6 S3 Y* E
s4 = Mid$(s, 6, 8)
) j9 T$ q, y0 k r3 m0 g; rIf s4 = "0C30FF00" Then
4 f: r3 G. K6 V* Z+ y7 `7 gplc = 1 'PLC为运行标志& u. b1 P, N+ J r( x! C( n
Else1 K" q, M" [8 L6 @% [
plc = 0 'PLC为停止标志. ]% J9 T7 X2 n
End If e# H9 u( S: a8 ]% K& X0 M
End Sub
4 N+ {2 E0 h X3 X6 Y(3) 下面一段为用指示灯表示PLC的运行状态1 F0 V i. P& L6 _4 U/ M
Private Sub Timer5_Timer()
. x+ |9 J) g9 a+ C) m+ S3 _Dim s1 As String) Y" ^+ I: O. @6 D; c+ R8 l' g
Dim s2 As String/ f( N2 P S" Z/ ]/ S
Dim s226 q/ c( j5 X; r/ P L& V9 w% s# @
Dim s3 As String
$ v$ G' h& o+ ~! W8 ?* pDim s4 As String
1 |/ G+ e \) s1 A8 V4 Q% I& Rs2 = "01010C300001"
' E+ E" d& b4 h* d$ l+ `: u; J, Es22 = LRC(s2)0 v/ B, E, h9 y/ F9 n* m
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
) p r- N/ Q* X8 T2 f$ {* pMSComm1.Output = s1$ m* I+ M5 ?. @5 u
s3 = MSComm1.Input
: F( ~. D* A9 ?; W1 v( us4 = Mid$(s3, 8, 2)2 I; G$ R! t9 T* d. E6 v
If s4 = "31" Then
* O) g3 X+ [: C9 w* y! _! o, W# _/ Yplc = 1 'PLC为运行标志& c% x6 x, r$ J5 n* f
Else: If s4 = "30" Then plc = 0 'PLC为停止标志
: T3 e6 \5 V/ r8 i8 Q2 C3 J; b- }End If* [9 [7 P' q& w9 G j. J/ K2 a
If plc = 1 Then1 _7 }& G; m M+ e
Label2.Caption = "PLC正在运行......"3 s8 x3 [. q: \2 j1 @: D/ f
Shape1.FillColor = RGB(0, 255, 0) 'green W& e. d9 y( @5 {' h. A
Else3 _5 \( o4 E, J+ h* [* o3 I
Label2.Caption = "PLC已经停止"
" f5 n, L2 G# p- [Shape1.FillColor = RGB(255, 0, 0) 'red
% q, s w, V& K. f; p2 I' zEnd If
3 t8 i; F, w4 B! sEnd Sub. O8 v$ Z2 p' d& V( q( O- t
(4) PLC的起动与停止
* u& g* ~5 }# W'起动PLC$ D" y) W. y1 v) P
Private Sub start_Click()9 ?/ b X9 r, G7 A
Dim strout As String
# q1 y/ o3 ~4 v: B* c: jTimer5.Enabled = False2 m: s6 x+ w* _4 n7 u
str = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置0 C8 X' h. D Q- p) {
ON,0000为置OFF。: k1 i! N9 k8 h% _- i8 ]5 o* c
'以上都是固定格式,要牢记。
9 f$ ~7 N' E2 B9 dLRCC = LRC(str) '计算 str的lrc校验码。
. r. x' d# Z% d Y2 H) |strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A
9 W9 s2 ]' l% A% WMSComm1.Output = strout
% I: w2 X/ V! E- m7 ` O, @5 w: [Timer5.Enabled = True) L" d$ B+ |; r) I3 ~
End Sub
# o( _# B/ W" a8 m% W# ~4 c'停止PLC% v2 p7 z/ E, n2 D' R" b* p
Private Sub stop_Click()& x, o+ p5 y) }7 K/ c
Dim strout As String* W+ X* D q) z8 S" b
Timer5.Enabled = False
4 w2 l' Z& Q) |; k1 i2 Hstr = "00050C300000"
; G, C: R; a8 H& ULRCC = LRC(str)0 j, \# e/ i. a1 s( v/ K% k% A
strout = ":" + str + LRCC + Chr$(13) + Chr$(10)
$ z. C- H" F) ~7 xMSComm1.Output = strout- n6 L* }0 {2 E5 X$ U4 m" G- z$ W: _# c
Timer5.Enabled = True
! T1 o$ P4 L% G/ I2 bEnd Sub u/ m* z: {8 `( s5 b
Y0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语
9 C) h3 Z8 ]5 R0 U6 ^. z0 bVB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|