|
|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成6 L7 Y- N- h I
(1) LRC算法校验的实现
- N2 o& c- W2 u, h6 V( aPublic Function LRC(str As String) As String
5 g* {+ y* @* H4 t" T, Dc = 0' x, }( S+ O7 D5 E, d2 W- a b
l = Len(str) \ g& s1 z+ F$ p! Z
For c = c + 1 To l
; X; Q& [' I9 ]* d" v9 ?c_data = Mid$(str, c, 2) / b8 k7 ?& x6 t7 W5 q: u
d_lrc = d_lrc + Val("&H" + c_data)0 I' K7 W, v5 ?& _
c = c + 12 U7 K' t& i5 _* k& E6 T- k
Next c
3 r$ d( g5 [; uIf d_lrc > &HFF Then0 i, E' e, l) `$ H8 o: ]1 [: _
d_lrc = d_lrc Mod &H1001 W2 w$ J: `. f S# q
End If5 c' P" {9 t; r+ i" m9 g, i
h_lrc = Hex(&HFF - d_lrc + 1)
% r; A" g, F; f& R/ d% \: j xIf Len(h_lrc) > 2 Then z# G8 o5 U7 f
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)/ ~; _, f7 g: E# j; |* H
End If2 m8 K! c; Z- o M" E; g& E( ?- x
LRC = h_lrc
- B, V. L' P0 `End Function! E/ Z; n4 t, Y0 E. D: K& B% d7 r
(2) 运行的开始就判断PLC的状态并设置标志位' I7 }) x9 i5 h- K- h5 ~- z
'初次运行打开串口,并显示PLC运行状态$ g1 q n' x, L6 Y( R
Private Sub Form_Load()2 t7 |8 t, m+ m( |' U
Dim s1 As String
9 d! H! L) E& F$ m* M: b$ RDim s2 As String6 h% h, ?0 ^5 l: Y( v% f9 N' v
Dim s22 As String s/ Z. M& z' x
Dim s3 As String6 i2 d5 e2 r: ^8 u& [! D0 {
Dim s4 As String
1 n1 C0 m2 M7 YMSComm1.PortOpen = True3 R( }. T. S: d! D5 s: e7 D, G
s2 = "01010C300001"
, h8 Z. g( i& L6 ~1 Ss22 = LRC(s2)
$ J" l4 R# K as1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)3 z2 j$ _9 Y# D: ~
MSComm1.Output = s1
- Y+ m+ `% e9 Ps3 = MSComm1.Input- f7 k$ M4 ~2 Z' \/ K0 P
s4 = Mid$(s, 6, 8)9 \; i) w! N" b7 @, ^
If s4 = "0C30FF00" Then: s: Z5 x5 y, b9 W* K- _$ S' W V m# Y
plc = 1 'PLC为运行标志7 h" s0 C0 U3 F
Else; W7 c' J! W) ?4 n
plc = 0 'PLC为停止标志
! t& {2 d7 G+ R2 l3 DEnd If& g4 f0 H/ `: S- ^2 f
End Sub; f* E3 G! v- B+ l
(3) 下面一段为用指示灯表示PLC的运行状态
" o6 o, D- {/ P: G: I! ]Private Sub Timer5_Timer()& D5 z- c6 o& p; W9 b4 q9 \
Dim s1 As String. j2 d& f1 M* G7 ?
Dim s2 As String- B% B; A% q2 ?$ s! f0 l
Dim s22+ g, N; i- m& P
Dim s3 As String1 p) C. M4 _4 M$ w5 T7 \+ K
Dim s4 As String
- V w. _+ u+ es2 = "01010C300001"9 U, d, @! t B* W! R3 c' |+ b
s22 = LRC(s2)
, q% a6 [2 a8 X6 D' u# g. cs1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
0 v+ L% q) H4 Z4 v* g8 V5 l& u' cMSComm1.Output = s1
: C4 M+ O. `3 Z4 k$ u0 z% R- Ps3 = MSComm1.Input7 s% d8 {$ V3 R T F, p, A
s4 = Mid$(s3, 8, 2)
; V2 n) L/ j5 R: y/ b: NIf s4 = "31" Then! Y6 \5 Q- A; q8 C: _9 Z% F
plc = 1 'PLC为运行标志
- k9 X% V4 ?* K, f" L( rElse: If s4 = "30" Then plc = 0 'PLC为停止标志
5 d8 Y8 [1 I; n1 nEnd If
, D( d+ w4 ` Q' h9 XIf plc = 1 Then' w+ k/ l1 V* `: J$ i# T- ]
Label2.Caption = "PLC正在运行......"- [% f7 Y7 y; D) o
Shape1.FillColor = RGB(0, 255, 0) 'green9 l: j5 U( X0 q! c: _" J
Else
& {' A A$ _& U( n# fLabel2.Caption = "PLC已经停止"5 @- e8 J, w/ j% d
Shape1.FillColor = RGB(255, 0, 0) 'red
/ E' B- o5 x6 z6 e6 rEnd If
, \* C, Q: n! V7 p4 H2 t; f+ Z' {End Sub
% x* L/ \$ S4 H/ q- _(4) PLC的起动与停止
$ c- D4 V5 V4 @) w1 i7 i'起动PLC# S$ z2 z) J5 m
Private Sub start_Click()' n0 W7 F% P$ p3 M6 |
Dim strout As String
8 e2 H) P. \( KTimer5.Enabled = False
+ v: J! p: R% P- Cstr = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置& i1 @) }+ Q* ]3 x6 ^
ON,0000为置OFF。
8 S1 A$ S) T' y4 w. g3 L+ ~' k% t'以上都是固定格式,要牢记。
) ^ Q& x/ G& K8 P7 K* _LRCC = LRC(str) '计算 str的lrc校验码。/ s* m; |4 ?6 Y' j8 I: n# ~( c
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A
8 w% Q; C4 M$ lMSComm1.Output = strout5 g( ]6 Y2 b/ W' a8 }% H
Timer5.Enabled = True1 t" Q! G& ^' l
End Sub
4 ^" {9 J; L5 q. P2 d; r# e3 i% K'停止PLC
, @" Y1 ~1 @& {5 c; ]Private Sub stop_Click()
- x8 _3 o4 ^; B" a: tDim strout As String) Z" y1 Z1 s* s! s, H, X
Timer5.Enabled = False" R$ C, E* h6 j' f6 m
str = "00050C300000"
5 t' B; B( B& H5 T* KLRCC = LRC(str)$ R- f+ N/ I/ |" t2 v( \/ [
strout = ":" + str + LRCC + Chr$(13) + Chr$(10)" Y7 Z: [6 [0 r! E. n
MSComm1.Output = strout' c" V6 h5 b! Z% d# K: H- i- Y
Timer5.Enabled = True$ J' x* V: S$ a# z+ n
End Sub
3 r! t& V; l( h o3 z( oY0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语
9 S0 p+ S$ @6 u$ { F/ u6 TVB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|