|
|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成
/ K6 P1 W8 ^8 C% G+ c3 G(1) LRC算法校验的实现
( N: z5 ^; y( {# DPublic Function LRC(str As String) As String$ n) t. W. M$ L; Z1 y
c = 0 g' W+ N; u2 ~! u
l = Len(str) x$ C2 H1 E1 L7 p' Y% q& q
For c = c + 1 To l9 q U# ~3 X t1 B+ m( O
c_data = Mid$(str, c, 2) 4 W( Z0 k( ?. r. i8 d" S: j
d_lrc = d_lrc + Val("&H" + c_data)4 L9 y+ \: D6 p. E3 n, N3 S4 e
c = c + 1
9 E3 O; j/ q& o$ PNext c5 T6 I2 u" |" N2 D6 t/ z( W/ U
If d_lrc > &HFF Then
* p* v3 F) V: L, s0 ]d_lrc = d_lrc Mod &H100' s& \7 y) `7 k- g. n7 K! N) C" n
End If
3 n7 ?2 I4 |9 a- E' W3 g' j- u% Bh_lrc = Hex(&HFF - d_lrc + 1)# ]0 ~0 [0 n5 p, j2 i k; y5 G
If Len(h_lrc) > 2 Then: G) {2 U# J l) d- P
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
% P% Q8 N+ M( p7 p( b- JEnd If _7 r) A) i$ b; r' G8 x
LRC = h_lrc# P1 S. ?+ H9 j
End Function
* h2 ?$ o" x2 L9 S; k) k(2) 运行的开始就判断PLC的状态并设置标志位1 t) o1 o- y0 U- W: t
'初次运行打开串口,并显示PLC运行状态
, E( ?8 `+ S5 q, z( g IPrivate Sub Form_Load()
8 q9 ?6 Z& b9 uDim s1 As String
, I* W& ]- f; jDim s2 As String
7 t+ n. V. }7 c: @5 Z$ p4 RDim s22 As String
* `2 n, _% i+ N O; CDim s3 As String
W" x6 p/ T- O1 g- B8 F, lDim s4 As String1 M- G, T& P1 r$ `; Z
MSComm1.PortOpen = True* ?* t, q6 \7 m9 J( w3 J- G; ~0 ^
s2 = "01010C300001"
& z; |; W `! P( l: @& z/ t- is22 = LRC(s2)
- Q, M2 `2 f3 _s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
' J+ N* w5 ?! ^9 W7 ] F2 m1 b, ^MSComm1.Output = s1
; Q; C3 k+ l2 B) V" Z4 L! g$ @) o Js3 = MSComm1.Input
; M- W4 g0 N5 d* d1 C9 ]s4 = Mid$(s, 6, 8)
% _! M' h" N7 F0 y% {1 gIf s4 = "0C30FF00" Then
5 s* A# w7 a# Vplc = 1 'PLC为运行标志4 V4 p" F$ e& B7 U; U; x* m+ h! G
Else+ A& h5 z+ D* ?& @9 g/ H" i
plc = 0 'PLC为停止标志
% Y* d0 z: s1 W4 S _; AEnd If
, {+ ~1 B7 m+ e9 mEnd Sub
& D s6 Q B. |" p7 G* @' ](3) 下面一段为用指示灯表示PLC的运行状态
" y; Q1 O9 b$ z! IPrivate Sub Timer5_Timer()$ A) ^5 w3 L7 \ R9 G
Dim s1 As String
0 f# o9 a# Y% c; r. ]% x& p# sDim s2 As String/ u1 r* q: B; ?0 ?& O: {3 i
Dim s22
* X0 A4 G. x, ~* m. _, UDim s3 As String% L Z, }' n5 `2 i' l& ~' V
Dim s4 As String
- F( I9 E( `/ g, q( b' e" u8 Fs2 = "01010C300001"
' l0 t. l; _4 c+ a o/ }4 j/ ~s22 = LRC(s2)+ ^& P7 _/ F1 D5 l2 X3 [
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10): p& r6 h. [4 Q5 L) y, u
MSComm1.Output = s1
" a5 E& h) ^7 I) x9 y- ?) rs3 = MSComm1.Input/ k) D4 E) \2 `: C; y8 M& F
s4 = Mid$(s3, 8, 2)
" s) F2 l$ B/ t" ] A' H% z3 s1 ^! m) ]If s4 = "31" Then* j8 I. j8 ?9 w" F7 w
plc = 1 'PLC为运行标志7 W! L( Q5 t f2 _* s
Else: If s4 = "30" Then plc = 0 'PLC为停止标志& s' n, B G( [+ W5 @7 T( p. a
End If
; X& ^" g/ c" l, i! H p6 x+ wIf plc = 1 Then) o6 ~% t6 Y) J6 W$ S' _, Q
Label2.Caption = "PLC正在运行......"% n6 C" m4 M5 T1 M
Shape1.FillColor = RGB(0, 255, 0) 'green( r ?* w: n/ L
Else+ d3 h8 I Y u
Label2.Caption = "PLC已经停止"1 [2 T9 p/ D- b1 [
Shape1.FillColor = RGB(255, 0, 0) 'red
' G4 C& n7 Q2 w/ ~/ e1 QEnd If6 q7 f: w( J" V& N W( K2 S
End Sub* N' f9 J" ]3 Q" N. d, _
(4) PLC的起动与停止- U% x( ~! `) h! O2 J* i
'起动PLC
2 \- g0 c, U7 Q2 J4 @! D: B3 yPrivate Sub start_Click()! Z5 A5 h0 y+ v4 g( Z8 z
Dim strout As String1 |+ W& I5 C" m% \0 p
Timer5.Enabled = False3 T# v x# \4 `' u
str = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置- v* G' r2 X$ u
ON,0000为置OFF。
- X# ` B p/ C1 i'以上都是固定格式,要牢记。+ G3 r* `2 o0 U2 t7 P; `
LRCC = LRC(str) '计算 str的lrc校验码。" C3 u% I2 U1 i1 k2 B& X' D3 F
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A- ^. y+ I, ?! \, o4 b' f
MSComm1.Output = strout
$ ^5 L+ ?* H# o6 }7 OTimer5.Enabled = True
0 s0 v( S, u# B4 X) [* C1 S, sEnd Sub
8 z8 t' ~5 J( B% |5 ['停止PLC
% ~6 | c+ ~0 T% `0 x0 q4 FPrivate Sub stop_Click()" W' r" J- r1 S2 e
Dim strout As String
6 }: L6 k! ^6 e- _; cTimer5.Enabled = False
/ f4 i @2 q0 Y7 @5 m! Bstr = "00050C300000"0 E( Y% I' R# c
LRCC = LRC(str)
* J j: i7 \ _strout = ":" + str + LRCC + Chr$(13) + Chr$(10)% A; F C' X/ {, m
MSComm1.Output = strout
# H# W- d; D7 r3 v( {% n9 [4 pTimer5.Enabled = True& Z* A5 _+ U, V4 ~; D
End Sub
6 m& \5 P. c& AY0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语) [% L* x" V3 F4 n9 z. H
VB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|