|
|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成
( E$ E# M3 n1 e9 V: Q- N, { `$ _(1) LRC算法校验的实现
9 [5 f" ^$ n" p7 \ ?" Q. ~Public Function LRC(str As String) As String
4 y D4 x2 {6 W& }; xc = 0
7 J; g4 S3 q# M# j/ T) ul = Len(str)
$ } I p2 }6 {For c = c + 1 To l. P1 w0 K5 n+ q* h* a
c_data = Mid$(str, c, 2)
& k8 B9 A! V( J- z/ gd_lrc = d_lrc + Val("&H" + c_data)
! w! }3 f; z+ H L& Bc = c + 1, s% }5 Q. r2 C1 N0 _
Next c$ W" g% s- ^0 X9 [* s( }; \$ m/ J2 G* ?
If d_lrc > &HFF Then
$ }+ F( i$ |- b: r7 O# P" Cd_lrc = d_lrc Mod &H100! n. H: k1 t3 i3 p
End If3 h& e5 d: w$ r3 X) p( I
h_lrc = Hex(&HFF - d_lrc + 1)
+ @9 W8 {, ~- o. vIf Len(h_lrc) > 2 Then% q* k2 j3 v- o+ |0 p/ u
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)+ N5 @* M+ O8 l, Q
End If! W9 ~9 d0 c2 }4 ? T+ B: {; x
LRC = h_lrc
% N3 E* A8 P/ ] Y4 m8 aEnd Function
a( U* [7 t# T, w* ^; N1 o9 B(2) 运行的开始就判断PLC的状态并设置标志位' E" ^( X& @* S7 \
'初次运行打开串口,并显示PLC运行状态, b. Q" v0 b7 N% O7 g
Private Sub Form_Load()& G+ x0 k0 ^7 s# ~
Dim s1 As String
! Y- e! u$ a: U2 k6 e# X/ |2 kDim s2 As String- f$ p- i7 R4 [' N$ j5 i
Dim s22 As String
8 i) c! m* M; I8 x1 l+ ~7 uDim s3 As String
/ B# m3 ~! a+ Z2 F9 g. q0 b9 D! K/ fDim s4 As String
* v E( W U: w! h4 V$ RMSComm1.PortOpen = True
$ K' T1 f9 \4 X2 |" @0 A" ys2 = "01010C300001"( N7 @% t6 S' m6 [& `& z
s22 = LRC(s2)
6 B& P/ ~' d8 Y, y7 w% M! Vs1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)* Q2 _3 k5 K, g0 A& Z
MSComm1.Output = s1& s& [9 _( {/ O$ G
s3 = MSComm1.Input: B8 p, c3 J) u: y- [" t
s4 = Mid$(s, 6, 8); G9 s9 Y! {( P0 g% [1 P
If s4 = "0C30FF00" Then
7 @ M& I& l# D& S9 u6 Iplc = 1 'PLC为运行标志
9 D* [. g, @' c8 }# b3 |( ?Else
. K! ~* ?! f) {4 p! dplc = 0 'PLC为停止标志
, C5 O. o$ _" lEnd If; K b3 \ L X1 \; H) \5 h
End Sub
l# C! T6 I2 }2 ](3) 下面一段为用指示灯表示PLC的运行状态
# W) p* l; E- R7 S2 \ kPrivate Sub Timer5_Timer()6 @6 w3 c0 w* V+ a3 Q
Dim s1 As String
8 k- b5 p' Q7 D" X/ N, G% e9 tDim s2 As String% Y% f: k' q, l) s
Dim s222 r6 p1 T$ Q% P
Dim s3 As String
' O0 s) t- }) `5 N, W( k, c9 O" VDim s4 As String! y+ e; `; S5 h) D9 e" ?* U- X
s2 = "01010C300001"
) G; y7 p9 x2 e# Zs22 = LRC(s2)9 s7 `# N# }; {* m9 i& |0 l
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
# }( |# {3 a9 ?5 a, Y3 yMSComm1.Output = s1
: i; r/ t$ \( W) J! Is3 = MSComm1.Input' y$ H" {1 f; p/ E9 R
s4 = Mid$(s3, 8, 2)2 k7 \- t# d$ L1 F" c. x2 O
If s4 = "31" Then/ C2 N, r0 a$ `7 n( @) M( g1 T' ^
plc = 1 'PLC为运行标志
9 }% E* @( f0 {- X+ qElse: If s4 = "30" Then plc = 0 'PLC为停止标志
8 A9 F* d! L$ GEnd If
" p9 t2 I/ w# L$ Z' M) x% YIf plc = 1 Then7 Q: N/ f0 I! C7 ^) ?
Label2.Caption = "PLC正在运行......"
7 p8 u" V) Z4 f) f4 jShape1.FillColor = RGB(0, 255, 0) 'green
4 }4 ?2 c6 N6 f% sElse
: F, ]2 g% c2 o* B8 q4 e/ ILabel2.Caption = "PLC已经停止"
- c' y7 N* R# p6 gShape1.FillColor = RGB(255, 0, 0) 'red
- _ Y' B' n; s1 Z i% }9 PEnd If
+ S/ F( a3 q+ c( O/ m0 iEnd Sub
+ g8 l. i [' P' D(4) PLC的起动与停止
6 B: V: N- {7 F! g0 b) c. ~'起动PLC
' y$ j0 T, W1 M) q7 [- Y% IPrivate Sub start_Click(). ?$ X7 P: O) K: u& ^" N4 I5 G
Dim strout As String
7 J* B& f+ q$ h( STimer5.Enabled = False
$ z% }) h+ F/ x7 Q' l7 jstr = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置
" r( y; K6 i& f0 AON,0000为置OFF。
* O" N1 B2 V& f" V- ^'以上都是固定格式,要牢记。
1 T9 }, r Q9 W1 d: HLRCC = LRC(str) '计算 str的lrc校验码。, \* m. v- [( p9 A" ^8 l3 @
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A
1 j: T. o/ c( R( M: FMSComm1.Output = strout
2 X* s1 U7 e1 d5 wTimer5.Enabled = True
0 D2 Y+ x3 V/ V+ c( n% X2 }, x9 J. t2 \( UEnd Sub, \! T: k. R# ? @& o8 I# n& ~
'停止PLC! R W5 K; s' S8 {* \
Private Sub stop_Click(); \% T# X9 S2 w/ G$ C9 _( L
Dim strout As String5 [# n5 S. o5 [
Timer5.Enabled = False Z I: P8 ]% K2 b4 F7 _* U$ ?: X: T
str = "00050C300000"/ N! r3 a$ p) d) j7 Y
LRCC = LRC(str)7 {, n. {- E% _; O6 p5 k( y1 g
strout = ":" + str + LRCC + Chr$(13) + Chr$(10)
4 B m d' I/ ~3 ]! n# [. xMSComm1.Output = strout& O1 [9 G, Q/ ?* t5 [, g3 _: O4 ]
Timer5.Enabled = True; g& \4 d) A) [% B. {
End Sub
6 g7 w* w1 }& |2 l- S/ [Y0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语) r8 P% b1 F3 B4 P6 w
VB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|