|
|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成
, r Z4 K Q% L" I y8 z4 ^4 P(1) LRC算法校验的实现. c) f7 v: d7 S/ r% n
Public Function LRC(str As String) As String/ P0 M6 F0 a D' Y/ F8 |) I
c = 01 t- p: _; L% N- `) X1 G; _
l = Len(str) 4 d1 w1 q1 c: M2 X8 k
For c = c + 1 To l) ^5 Z2 J2 I& I2 Q. T, x8 T6 e
c_data = Mid$(str, c, 2)
' o& m! l6 z" |6 \d_lrc = d_lrc + Val("&H" + c_data)
- K: p; @3 b A+ n6 C% Rc = c + 1' h' ?) r. K: z6 ^ b
Next c
& k) Y) T9 s2 J( N0 DIf d_lrc > &HFF Then9 h. X7 ?1 U+ l3 t
d_lrc = d_lrc Mod &H100
. d" T; B; w* q: DEnd If$ D& r, F( d! v) [; e4 v7 a. d
h_lrc = Hex(&HFF - d_lrc + 1) E: i9 `) D( w4 |0 T7 C) \& f7 N
If Len(h_lrc) > 2 Then
) N# ]3 w! i1 s' l. L* H. A. _h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2), S5 T, L8 }/ f/ m. I1 \0 Z
End If
# s5 V+ y" w9 o/ m5 O' C: n2 ZLRC = h_lrc
. C( _# [1 h+ X4 VEnd Function
% s3 \* m: Y; C& ~" h(2) 运行的开始就判断PLC的状态并设置标志位; O f/ ]3 b0 u6 d* J4 W
'初次运行打开串口,并显示PLC运行状态% o" s5 V+ x% v$ Y8 ?. W" V; ^
Private Sub Form_Load(); z$ ]! c% A+ E q
Dim s1 As String
4 ]1 Z0 X/ V, T j6 }8 ?& FDim s2 As String
+ J- ^* n. c: D" }Dim s22 As String: }4 ]: G% R2 P
Dim s3 As String* A; [# j4 N9 B: C2 R
Dim s4 As String
- J/ B1 r" w( i( L JMSComm1.PortOpen = True
8 h7 ^! o# X# h$ V5 |( gs2 = "01010C300001"
# _$ g. n; j) X+ ]s22 = LRC(s2)
: e: q1 a) c# e2 o* @s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)0 w: E! Q: |: {3 G$ {' ]) D
MSComm1.Output = s1
! I# K5 f/ ?/ g5 h* Z' [' Ss3 = MSComm1.Input
' S0 a8 C9 Z7 J, f, Ls4 = Mid$(s, 6, 8)
* F2 ? R0 ]1 F' a NIf s4 = "0C30FF00" Then9 e2 V5 `5 z( m9 q9 ?9 n2 ^
plc = 1 'PLC为运行标志& }! b8 q- S- ~6 a
Else' V ~% ?( J; }. Q0 B, N
plc = 0 'PLC为停止标志* E" o9 T2 F! Y$ E4 i; b
End If
/ d9 f6 Z7 e2 g2 r" kEnd Sub% e7 _" Q" M, ]) d& Y; ?
(3) 下面一段为用指示灯表示PLC的运行状态
2 c4 V& X3 P \$ X3 I' iPrivate Sub Timer5_Timer()
! ^+ R0 d6 T) `1 W8 d/ ^8 k! wDim s1 As String
/ X- m ?' V8 s9 t x& LDim s2 As String
# Y7 l" H& w0 r8 q0 XDim s22! e6 u; y4 P' A2 A
Dim s3 As String( L& h# B/ t/ h' _* P, F
Dim s4 As String2 e3 X8 S+ ~8 `' N5 Z
s2 = "01010C300001". E0 V! W _( |& f6 i
s22 = LRC(s2)
9 b, c. ^* N* {- Ks1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
. M" W; q7 L. Y& I: u8 ?/ bMSComm1.Output = s15 w$ y% q& y3 H+ `" A! N
s3 = MSComm1.Input" R0 B+ I9 W' v D7 Q. [( C. r
s4 = Mid$(s3, 8, 2)
/ ]" K/ C& d' E0 G3 h3 @If s4 = "31" Then
7 T7 {- n" u' y0 ~( J, Tplc = 1 'PLC为运行标志. `$ H8 F2 V% K* l& l
Else: If s4 = "30" Then plc = 0 'PLC为停止标志
. T+ t* M# L7 x, |1 x* PEnd If
; R+ _1 d6 ^9 mIf plc = 1 Then
/ T# |" }7 \ A, VLabel2.Caption = "PLC正在运行......"+ z d4 c& ?) |7 n
Shape1.FillColor = RGB(0, 255, 0) 'green
5 Z x* N( u* D3 uElse" U5 x$ O8 \3 e# C$ s
Label2.Caption = "PLC已经停止"
4 k( B9 s( r0 I# d! ?Shape1.FillColor = RGB(255, 0, 0) 'red3 t$ m1 g: T* E6 [- p ~: o) ]
End If: u( b& }8 G4 c6 J
End Sub
# c! Z! E% j( b/ V) h5 j4 H(4) PLC的起动与停止
2 v4 q. ^2 o E& r: ^9 k'起动PLC
( ]/ y! T$ S+ A, \4 ePrivate Sub start_Click()4 H1 Q& @' r! ~& I9 t+ x
Dim strout As String
y0 L3 ~4 Q9 w6 L# ~Timer5.Enabled = False* w. K1 }/ s! ?
str = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置
+ R' A. V$ \5 Z8 x0 `) H. i3 f0 G. WON,0000为置OFF。2 E6 \8 `! W# H/ Z2 O) Y2 N
'以上都是固定格式,要牢记。
6 l6 D, N. H2 j# i& kLRCC = LRC(str) '计算 str的lrc校验码。2 }7 o4 S. B8 O& ]3 r8 \
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A) Y" p# J( G, Z6 r) n
MSComm1.Output = strout
6 P2 c: _ l# b+ ~* U2 |& aTimer5.Enabled = True
F" J* v4 Z. j3 ]8 wEnd Sub
% j- D0 s% E3 X$ D/ W" U'停止PLC
' Q* j" N7 `6 b# p& W* E3 [1 h ?9 }Private Sub stop_Click()
& z+ [( z+ D5 H: I+ O6 o: C* |Dim strout As String
2 ]9 K) o. f+ k8 ^% }; KTimer5.Enabled = False5 W' T" p5 B7 v( {( }: J
str = "00050C300000"$ \! X- N; d, H/ W0 B
LRCC = LRC(str)9 c, b H6 a- P# o1 t) {
strout = ":" + str + LRCC + Chr$(13) + Chr$(10)
# H4 D7 D# E/ D X1 y# hMSComm1.Output = strout, Z8 D$ u; Z& M1 J
Timer5.Enabled = True
6 t8 }+ X( d3 j5 C& r/ iEnd Sub; c% r1 t4 ]) X5 s; l1 n( {) o
Y0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语
0 T) L7 Y# ?8 k8 e9 ZVB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|