|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成, s E r; x c5 O3 h8 t
(1) LRC算法校验的实现
) E4 Y. r( n3 |8 e; hPublic Function LRC(str As String) As String
. G( m( ~1 U x6 l7 f2 g" Wc = 0. C8 S% F- S9 A
l = Len(str) 5 U! q$ s9 i) k: N# H* {% `
For c = c + 1 To l, V1 N! d! }' ?, t. n3 q2 [
c_data = Mid$(str, c, 2) 0 ?/ f; O& \6 N2 o8 R, q
d_lrc = d_lrc + Val("&H" + c_data)
9 c# q+ g9 p0 R, p* _+ j a* ?" H: xc = c + 1
5 l; { v6 P/ y$ w0 c$ V* _Next c
8 h* L. c1 Y# D5 X. s. }' ]+ \If d_lrc > &HFF Then1 Q( X& O# `$ B# }5 Y' H
d_lrc = d_lrc Mod &H1002 P5 n3 F9 q) @% |1 I
End If# s7 w1 \! b/ L; ?
h_lrc = Hex(&HFF - d_lrc + 1); F% @; }# |& _3 m- V$ s
If Len(h_lrc) > 2 Then
5 q9 g! ]; }- N: sh_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
8 `+ W' f. S. b: UEnd If
6 C1 k7 F! f: m* A/ U* KLRC = h_lrc8 |3 d' @, O: n, q& D9 F4 [' {2 V- w
End Function
! P9 I7 W/ P; G ?(2) 运行的开始就判断PLC的状态并设置标志位& S$ {- X n7 H( W+ I7 E' x! t9 J
'初次运行打开串口,并显示PLC运行状态# l P: T% Y+ e# v6 N& a: t) S
Private Sub Form_Load()* p. r4 C1 V% R6 F7 x
Dim s1 As String+ T+ L1 e. x% [! y; G1 @
Dim s2 As String
0 ?, b! N3 h9 G1 P0 {Dim s22 As String
# `9 x+ u F {Dim s3 As String
+ S. b# G0 T1 `+ A% [$ [Dim s4 As String
^: u* O8 G1 s4 q2 l7 \* xMSComm1.PortOpen = True
. E6 R! k5 M- _s2 = "01010C300001"
6 ^: k' d& e3 e% t% g: Q1 ts22 = LRC(s2)
9 t, q2 f- T; d6 k, q; e2 Qs1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
/ {$ Y, ?7 E3 {/ ^MSComm1.Output = s1( e' Q; V6 z2 n- A
s3 = MSComm1.Input1 g+ C" [0 o- ? O- z @
s4 = Mid$(s, 6, 8)3 Y2 ^! ~$ h/ {* f3 e* m C
If s4 = "0C30FF00" Then3 O5 K3 `# O" O" h, P- q1 q5 M6 r
plc = 1 'PLC为运行标志
* j7 L/ }: V m; ]( K: sElse
; r7 \7 g3 K" W2 {plc = 0 'PLC为停止标志9 M; E9 C/ T+ q p( y5 b
End If
6 b! O2 G' O2 b& p4 SEnd Sub
2 ^& s' ^- l* m; B, U6 g2 ^(3) 下面一段为用指示灯表示PLC的运行状态8 j2 U' K7 B. Q+ l; ]5 v: k
Private Sub Timer5_Timer()/ O7 n( x1 ?* \; s
Dim s1 As String
" G& e! L% a1 P& eDim s2 As String$ Z4 U. z) S A- f
Dim s22
" y- L6 s A4 F1 ZDim s3 As String4 Q- Y" n/ _' A- ^0 }6 U
Dim s4 As String+ |0 k6 Q! M9 K" e# ^
s2 = "01010C300001"
- C# p* w7 G- G) ls22 = LRC(s2)* G5 B+ i+ v, N8 D/ M$ F
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
+ y; H* A6 B- W: Y" ^6 T( n/ GMSComm1.Output = s1
. E! w2 l7 X$ o9 z# \s3 = MSComm1.Input
: W8 `- R4 x1 N6 Q% h! Y1 \s4 = Mid$(s3, 8, 2)
r8 H' \* k6 D7 Z9 K% m1 C" \# JIf s4 = "31" Then! ?/ r: |+ `8 m3 { m) k4 x: e
plc = 1 'PLC为运行标志1 |. R3 O" Q3 C
Else: If s4 = "30" Then plc = 0 'PLC为停止标志; W2 S1 c; K& t! g/ M, U+ k
End If
* R9 o: |& y9 z4 h: W p# }; lIf plc = 1 Then- b$ H2 D$ c. @9 d3 f0 R
Label2.Caption = "PLC正在运行......"# ]: v( }3 X5 y7 E, v
Shape1.FillColor = RGB(0, 255, 0) 'green
! D# h$ }; w( @, f9 \+ y2 I0 Q eElse
, S1 W) Z; c/ [2 e$ fLabel2.Caption = "PLC已经停止"# Z1 ]5 H/ @! O! u ]( |
Shape1.FillColor = RGB(255, 0, 0) 'red
! T1 n# m/ a# u! K) }1 A E7 JEnd If& O: X5 ] U( e; G7 A3 K
End Sub2 j* U2 L: p) {
(4) PLC的起动与停止
7 C( j. A! `' C; d6 w5 d# f'起动PLC2 n L: }: A: R) I* K1 ?2 \3 p* i
Private Sub start_Click()
2 ^* A5 S1 u7 }4 z0 W5 F* t# nDim strout As String! t9 r! u( T% N1 m3 F
Timer5.Enabled = False2 ^! e" E9 o/ e; y; h9 s* @
str = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置
- l, S" A \8 JON,0000为置OFF。
8 d' _+ |: R% A* S$ g'以上都是固定格式,要牢记。2 W$ C d0 A! j1 W
LRCC = LRC(str) '计算 str的lrc校验码。
' l* s, Z$ |- x: ]strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A
, \- X4 c1 D+ R7 Z$ S( iMSComm1.Output = strout. Y* |! L! V2 k' e
Timer5.Enabled = True# j6 g4 J+ o2 G W, H, f
End Sub
+ a; f: a( ]8 ^'停止PLC
- {/ k6 L6 _6 ?! e: OPrivate Sub stop_Click()
5 e! Z2 R. ~4 V7 A/ p' dDim strout As String( L* f1 q1 b d& `
Timer5.Enabled = False
& {0 o0 r' Z, o3 b# J* g# s; ostr = "00050C300000"
6 |. S7 Z0 u" ^" q3 K% wLRCC = LRC(str)
e; h3 v/ C& w- nstrout = ":" + str + LRCC + Chr$(13) + Chr$(10)
8 ^0 I3 t! t! H# N( s1 bMSComm1.Output = strout
* ?/ {, J+ t+ G& Z: E. a/ J \! ?Timer5.Enabled = True
C$ a6 |) h! Y- v: ZEnd Sub2 Z7 e f; @: f. n* P5 ?: `
Y0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语
0 C& ^( n% K( l/ A" o5 W, D' cVB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|