|
|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成
; G' R% Q- P. f# b* `(1) LRC算法校验的实现9 i9 U& h& J6 M4 M: R9 c. r
Public Function LRC(str As String) As String
7 G$ z% C, X3 k# `# |c = 0
, ^$ f- r6 `" w4 [5 A9 c6 \l = Len(str) 2 q3 ?' e; D% ^
For c = c + 1 To l
$ z& p1 v3 Z/ r" Vc_data = Mid$(str, c, 2)
1 H; i4 g: ^ F0 }9 ed_lrc = d_lrc + Val("&H" + c_data)% u, Q7 C" t% i! y' `. B4 V
c = c + 1& `' z' f2 x. x3 g9 k( P
Next c. v" W( b, D. N9 L
If d_lrc > &HFF Then# a. b% M0 {9 l" s) o
d_lrc = d_lrc Mod &H100
) {' S7 a3 d' X0 e9 J" ~End If& C2 L0 N6 @% K1 h" e' B8 ^' J
h_lrc = Hex(&HFF - d_lrc + 1)
# Q. }* Z: ]: e' Y; u% [If Len(h_lrc) > 2 Then
0 H8 t, K% a9 P" Y6 nh_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
! T+ o" v; X- F# CEnd If
5 X. v4 U4 @$ s4 a/ C4 oLRC = h_lrc& k0 F9 a' @' ]: o8 F
End Function
2 p/ q% z" ]# h(2) 运行的开始就判断PLC的状态并设置标志位4 ^3 e/ \7 }9 l, V& k$ {" ]: ]
'初次运行打开串口,并显示PLC运行状态$ b: P9 r2 \+ Q
Private Sub Form_Load()/ f9 j) M4 y# I" Z% }: H
Dim s1 As String% O7 l) q9 k/ |) _* Z
Dim s2 As String" A& I9 n" q4 X
Dim s22 As String
; r) @) }/ O0 S* B2 M: o+ M" {* eDim s3 As String
! a# D2 K4 @# r6 ?2 _, G: [Dim s4 As String
* Z& F8 @6 C8 g& {* Y5 v. fMSComm1.PortOpen = True
6 {2 c2 ?" B; [$ |, s% [1 gs2 = "01010C300001"' y" x8 ^# A$ y" k
s22 = LRC(s2)0 o, q+ k7 b3 _6 H+ X7 d9 C9 _
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)6 U, e8 I6 V- }
MSComm1.Output = s1+ f) f& C/ w! t W6 C% d
s3 = MSComm1.Input
, y% N/ `% g7 H, M% r2 B& A( \* b3 ^s4 = Mid$(s, 6, 8)
. b4 t& ]( g2 U" B8 sIf s4 = "0C30FF00" Then$ ]4 }3 ~9 [8 P* G( Z
plc = 1 'PLC为运行标志
8 `* d- h E4 cElse7 m* I9 P; X, j3 X# o. @' F
plc = 0 'PLC为停止标志, P1 u+ d. |+ y) @3 a
End If. O2 |* w9 C5 g8 C0 h7 ? G6 s
End Sub
8 [, m1 m& e& k. N(3) 下面一段为用指示灯表示PLC的运行状态
% [" @6 b) ~% K Q( FPrivate Sub Timer5_Timer()
# R. L( K |* x- R2 v4 a5 }8 E: d0 QDim s1 As String% Q/ C7 M7 {, r y+ l
Dim s2 As String
8 P( l; y6 v3 B: t! w R) EDim s22
' V0 L4 E1 G+ w/ h( }$ kDim s3 As String
3 E1 Q8 k% O6 Y5 _; r: HDim s4 As String
( }3 @" J* b, l( v5 a# h% os2 = "01010C300001"
$ `- ^2 J+ ~0 x& Z, t5 v* G4 ns22 = LRC(s2)
$ X* H6 Y) @: C3 {8 {; Y4 c" `+ hs1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)7 p1 r% B5 W1 N [
MSComm1.Output = s1
. d1 w$ i! g* N- |; N: [5 ds3 = MSComm1.Input7 K! Z. e" t- O! k
s4 = Mid$(s3, 8, 2)
# G& d- v6 l6 F3 {% R8 I# \: lIf s4 = "31" Then
5 g2 r6 |, @9 W7 C, lplc = 1 'PLC为运行标志
+ S8 A# g4 \; }9 q! YElse: If s4 = "30" Then plc = 0 'PLC为停止标志
4 K& R' H" F2 X6 a& JEnd If& f) H( p. t# k1 J; o1 A+ Y$ }
If plc = 1 Then0 @& E' ^, t; {+ Q; M( ]4 \7 d
Label2.Caption = "PLC正在运行......"6 i( o, J+ C/ w% p8 ?/ {& C: v
Shape1.FillColor = RGB(0, 255, 0) 'green
- j7 v( J& r; B6 u& m4 pElse
2 s6 z* L% h8 K- V; OLabel2.Caption = "PLC已经停止"
U+ I9 f7 O) o8 w0 j; n3 SShape1.FillColor = RGB(255, 0, 0) 'red
& q& C6 i/ ~5 v: [End If4 Q7 Z/ j; Q; W! l! g! M! b
End Sub
3 @) H4 C4 v5 b$ E3 O; w(4) PLC的起动与停止. r# w8 |1 \7 Z5 Z7 ]& U6 K
'起动PLC
: V+ l5 v1 w' B1 J! Z mPrivate Sub start_Click(); p7 h# ^& g( u# ] R' a& }
Dim strout As String* I( q2 l. R1 v. r* {! |% j, y/ }
Timer5.Enabled = False
) Y+ V/ O% ]$ B0 Estr = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置
% o# Y, Q; t' e2 f! k, U$ cON,0000为置OFF。% B# k' n5 z+ U8 y
'以上都是固定格式,要牢记。
1 k7 i! e' f1 O' c1 d9 n4 q! VLRCC = LRC(str) '计算 str的lrc校验码。
$ e* W3 F. B6 ?! {strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A
. E) Q- | A; x5 pMSComm1.Output = strout
$ K2 E( l, r3 J2 |$ K% gTimer5.Enabled = True a" o6 r6 A# q& z- Q: f# d/ Z
End Sub
0 t; E8 |/ D8 }: T, g4 Z'停止PLC& i1 m9 s. D0 d3 J
Private Sub stop_Click()0 F1 n/ ]$ |, x: i& f3 `/ T; J
Dim strout As String
5 ^9 X7 Z/ q& \) k2 K2 M- xTimer5.Enabled = False
: O# n o6 |" p6 @2 S. x4 Tstr = "00050C300000"! E0 B) B; C3 t% a: y
LRCC = LRC(str)
{7 D. M1 o* L" P3 Bstrout = ":" + str + LRCC + Chr$(13) + Chr$(10)
& ^; [5 Q$ i2 Z$ Q9 YMSComm1.Output = strout
* b8 d F! q$ b( |/ o vTimer5.Enabled = True( u. O0 G0 t+ u& y7 }
End Sub( x% s) Y) a. K- t9 i0 C
Y0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语
7 p2 t$ Y# T& ]! p' D( k" mVB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|