|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成3 t, r7 a. x" n+ `5 S N
(1) LRC算法校验的实现/ Q& p5 M/ |$ \7 ]* W9 S! p8 D
Public Function LRC(str As String) As String' T8 Y% w$ I8 N) s9 C$ i
c = 0
) ^( n' P2 h+ b2 i. ml = Len(str)
% i( {# G; G- Y8 }6 y R5 SFor c = c + 1 To l. L+ p) `" v; Z& |. N4 g
c_data = Mid$(str, c, 2)
, d) \0 {- P T" {' U2 Rd_lrc = d_lrc + Val("&H" + c_data)
5 H) i3 O2 P: d1 dc = c + 1
w, Q3 ]# w% f' [7 O. y+ t8 ANext c3 ^/ w, O+ {2 |3 J
If d_lrc > &HFF Then/ z, z# u" B- @6 }4 j/ Q, W
d_lrc = d_lrc Mod &H100
2 ^! i5 P, k, R/ e% K W3 G5 ~ YEnd If. G9 O$ R/ c* c6 p0 q
h_lrc = Hex(&HFF - d_lrc + 1)
+ d1 d5 G! D, o7 S8 b! |If Len(h_lrc) > 2 Then7 ?6 Q% }( X0 D) g: _. A$ `
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
3 [# P% X; f- C9 s) |0 w. OEnd If
: P+ E4 ?: U& W* i$ \& P% S9 Y# TLRC = h_lrc
$ U7 N4 H- e7 Y) q1 U( Q1 IEnd Function. R% C+ l7 ^ j2 e. E
(2) 运行的开始就判断PLC的状态并设置标志位
' \8 X% T. N# U8 Q5 ?% j'初次运行打开串口,并显示PLC运行状态% \ S8 B% T6 z* H4 h+ t4 h
Private Sub Form_Load()4 N% m9 o, l7 L' E
Dim s1 As String
& o- y( F7 U( x1 v8 QDim s2 As String& B1 t E' Q+ s- X
Dim s22 As String3 N( R- Q/ |" D/ F8 x
Dim s3 As String
% _5 N: I1 o- \: P0 |& GDim s4 As String& L5 f' X) a5 p/ k( k8 b+ Z' k
MSComm1.PortOpen = True
+ @4 N# {8 C0 x2 T& o! x' Ms2 = "01010C300001"6 Y3 B: C, b4 P8 {0 _5 u6 @9 _2 d
s22 = LRC(s2)
7 n! F4 ], w% J* H% U/ [2 Ks1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)- k4 I, J( H) i. \& c! _
MSComm1.Output = s1
P: w5 Z. V" Us3 = MSComm1.Input y9 H4 Q2 W1 ?- ?& w* |: b
s4 = Mid$(s, 6, 8)
, i7 U. k7 j# x" g" B' }If s4 = "0C30FF00" Then
7 C; g4 F7 A' k, r& @plc = 1 'PLC为运行标志( U( w' S* s* S" h' C3 E Z$ ] ]) L9 a- ]
Else8 M' U! {% g+ @" \; q8 [
plc = 0 'PLC为停止标志
; O6 w0 Q6 K5 g6 ]0 TEnd If
7 X9 z! j9 s ]4 P; A. gEnd Sub- {9 h$ C( X/ Y/ q+ E
(3) 下面一段为用指示灯表示PLC的运行状态
) u$ Z, O- H; S, U7 q" pPrivate Sub Timer5_Timer()
/ e- H4 U6 p# qDim s1 As String
. W/ A/ a7 X1 QDim s2 As String) ~8 g+ ~2 v, Q) Z2 p! e
Dim s22
6 l! i: @* t/ P1 ADim s3 As String
$ A1 m$ x9 m8 g: X: `; e9 ODim s4 As String
2 p& e3 ^+ i# R: n) y* H% Ks2 = "01010C300001"
' a, ]; G3 `; b5 `. us22 = LRC(s2)
3 @4 d( B8 j' j8 ?7 ?+ n0 d$ cs1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)$ {' v% D* C. m
MSComm1.Output = s13 D" [, k, G" J! a; P9 J
s3 = MSComm1.Input" A6 q5 T) x. J+ A
s4 = Mid$(s3, 8, 2)# {) X; m1 `; L# A- S
If s4 = "31" Then
2 ^0 I2 M* ~- r- b$ Bplc = 1 'PLC为运行标志
5 R" E$ i4 L% RElse: If s4 = "30" Then plc = 0 'PLC为停止标志: z3 O x, c* v9 V$ {- n
End If( M% t& Z& M4 H0 H |5 e! K* }4 |
If plc = 1 Then* Y- J, V* P7 M% { t
Label2.Caption = "PLC正在运行......" C# i& l% Q3 s4 |
Shape1.FillColor = RGB(0, 255, 0) 'green7 J* I) c* i, b, f
Else
3 s/ a& \ T8 e: E+ V( {Label2.Caption = "PLC已经停止"
# x6 d, N- t; |! _: RShape1.FillColor = RGB(255, 0, 0) 'red
$ Z5 F+ b- i6 [* ~! ~- MEnd If1 \6 q t" V8 _2 M4 H) N
End Sub' R( v# _. N( u2 t. Q6 s
(4) PLC的起动与停止, A* W- x$ \+ Z* |6 `+ j& X T2 K* B
'起动PLC4 W/ @; ~/ r% C" q5 O) D ?3 A
Private Sub start_Click()
: o. [8 b4 l7 Y+ CDim strout As String$ Y' B+ F4 O# ~7 e9 M* {
Timer5.Enabled = False
+ B& x8 w. y$ Xstr = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置
+ U( ?6 c3 T( e5 s* b2 z0 mON,0000为置OFF。
6 `8 ]8 b7 _9 @ t'以上都是固定格式,要牢记。
- g7 [ y2 w5 u* S6 u) y& p/ r3 nLRCC = LRC(str) '计算 str的lrc校验码。' a B* {+ {9 }
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A
! d% r* \% v) S7 S" uMSComm1.Output = strout
" } P/ c& p) B/ pTimer5.Enabled = True
5 H7 }4 V5 g% ]" d$ u# u. @9 BEnd Sub/ D/ j* ?! r+ k
'停止PLC
8 L: H; {% U6 G8 }4 C5 a0 |Private Sub stop_Click() ^) s) n% r, j: w _# S: p' ~
Dim strout As String& i# ^- d5 G: `/ {4 n+ {& y6 q
Timer5.Enabled = False
d0 \- @- V* h" |. istr = "00050C300000"
& W1 ]( u, k2 v* @; h/ H: LLRCC = LRC(str)6 ~& N( u6 ]7 j4 H" U7 w& U* e. @
strout = ":" + str + LRCC + Chr$(13) + Chr$(10)0 c4 E; L# L2 G. ^6 N c
MSComm1.Output = strout' N" ?/ h7 x1 u( H4 F" Z
Timer5.Enabled = True
" x, J" n0 b0 e' F# BEnd Sub
4 T( Z7 L- G2 j/ M7 g! x% gY0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语
% k( z+ F# E+ l/ G- `) F4 S% [( |* `) vVB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|