|
|
发表于 2007-2-6 18:30:40
|
显示全部楼层
来自: 中国江苏苏州
4)编程实现的代码构成
! M2 D( D6 s8 ^9 K9 V. B% h$ G2 ~' R(1) LRC算法校验的实现1 ^5 j( v( |/ T/ ]0 B
Public Function LRC(str As String) As String
8 Z. p# j7 ^6 D [$ Z' K" Yc = 0' c$ ~! Q9 A, L/ B. a! e W( ]) j
l = Len(str)
% l k0 a1 A$ T5 IFor c = c + 1 To l
' e# j' G- O0 {* k2 sc_data = Mid$(str, c, 2)
6 x. m' q' C; nd_lrc = d_lrc + Val("&H" + c_data)
6 a1 \; S1 q% X9 U1 Cc = c + 1
+ C/ L0 H6 j7 M0 z9 ]- k. [Next c
% `8 r1 y }( c8 h6 Q) iIf d_lrc > &HFF Then# P# D" M$ K4 i. f
d_lrc = d_lrc Mod &H1007 Z, G9 E {2 O
End If
0 K; G3 V9 X7 [0 d0 h# Hh_lrc = Hex(&HFF - d_lrc + 1)/ o/ g) g( T; O: c
If Len(h_lrc) > 2 Then# W/ t' o- f; Y! S$ j& ^
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)8 [6 S+ R0 r& f( o/ K k! T
End If# n; x5 W6 \) z, c# u
LRC = h_lrc
% s, U4 L7 y+ L7 H) n4 {4 _End Function. k) g6 s. L2 q7 t- A
(2) 运行的开始就判断PLC的状态并设置标志位
* } K5 ~( Y: M% }'初次运行打开串口,并显示PLC运行状态
$ l/ C0 }; n7 B6 g" R/ m/ h0 EPrivate Sub Form_Load()0 L$ W6 F! X5 [
Dim s1 As String
# D: Q0 |6 X( s- J* mDim s2 As String
$ Y, p% j# r; E4 \9 L6 W1 `" zDim s22 As String
Z$ L6 w* ]5 @9 n+ h+ R4 tDim s3 As String
- `0 m% B `9 LDim s4 As String
$ b. K5 H( i4 e* K2 }+ M% EMSComm1.PortOpen = True( ~5 M8 |9 d! ]6 Z) n
s2 = "01010C300001"
! }! y( l/ M) F o: @) z( Zs22 = LRC(s2)
( s L3 Y- K7 M& Fs1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
: Z" F: A- [3 H0 _MSComm1.Output = s1
/ n& r+ Z) d+ s: f K7 I! es3 = MSComm1.Input
$ @5 |. N. [/ ?/ X8 S& N' ~/ As4 = Mid$(s, 6, 8)
& B9 y( {0 Q5 O- {If s4 = "0C30FF00" Then
' L/ U% u+ ~7 H7 m/ Xplc = 1 'PLC为运行标志0 t9 W$ P. W% o5 j. j
Else; e0 j8 I+ ?+ t/ ?: d1 b) \
plc = 0 'PLC为停止标志
$ c5 q: m; H8 V4 SEnd If
5 Q% Q* J4 v3 h. GEnd Sub
- V: ]- }- P3 Z0 l! m9 b1 k(3) 下面一段为用指示灯表示PLC的运行状态6 f; w' P2 S `. d# X% F5 g5 L
Private Sub Timer5_Timer()
9 h- t- H+ t# _# L1 W9 X5 v; LDim s1 As String' t& B. _7 P# r) o, F$ ~
Dim s2 As String
2 w5 n7 K( L' W2 Y( l' DDim s224 g! o6 V+ c, l2 o" @3 s. A
Dim s3 As String
1 c5 e: n7 y# |% qDim s4 As String# R/ A3 [. f+ E9 f
s2 = "01010C300001"
+ x3 z( h5 ^8 D: [" [2 Ks22 = LRC(s2); y2 [( F1 ~9 h- Q8 N7 n
s1 = ":" + s2 + s22 + Chr$(13) + Chr$(10)
5 b0 k2 S* e" c& X: i7 @/ NMSComm1.Output = s1, M/ ^! q$ J8 `, d2 P' \/ _4 a
s3 = MSComm1.Input: ]' b0 Q. q9 J+ ]# j! n
s4 = Mid$(s3, 8, 2)
$ |$ f' M5 [0 C/ w# FIf s4 = "31" Then
# `" R0 s+ x# p# _* Q, jplc = 1 'PLC为运行标志3 k- D5 m. n$ m) Z7 Y
Else: If s4 = "30" Then plc = 0 'PLC为停止标志
+ S' S L. q, M8 b, g1 ?7 v5 h+ eEnd If
/ r. }* K& o& K9 vIf plc = 1 Then
! P$ I. ?2 g+ F, }5 C- pLabel2.Caption = "PLC正在运行......"* U% S8 K1 `7 B7 ~9 O$ H
Shape1.FillColor = RGB(0, 255, 0) 'green( V1 P8 E: X4 ^
Else8 p4 y+ V1 W8 T5 @7 g9 G8 e
Label2.Caption = "PLC已经停止"9 Y) D8 h, O* I; k3 x7 j+ A: n
Shape1.FillColor = RGB(255, 0, 0) 'red
8 h5 N% A* |9 q. f" P; |" e' ]End If
. t" r R F; i) uEnd Sub
$ s5 O* M* `! }, F8 _# w(4) PLC的起动与停止
7 r% ~( H V1 ^9 ?, C'起动PLC
# K! R, f% d( y6 G; XPrivate Sub start_Click()
8 r9 c% E, J' F4 PDim strout As String
5 m% T/ m* m! C: x: z/ Q: R) `: STimer5.Enabled = False
' U0 o# h' A6 Estr = "00050C30FF00" 'M1072 为PLC起动停止标志位。查地址表,M1072为OC30.FF00为置# a5 J- s- C5 [- W
ON,0000为置OFF。
" n( E9 h, g1 e# ^/ S'以上都是固定格式,要牢记。
8 I) E; }. Q6 b2 Q" P3 ]4 ~2 A2 OLRCC = LRC(str) '计算 str的lrc校验码。. s+ y5 R/ ~; y; Q9 y, Z
strout = ":" + str + LRCC + Chr$(13) + Chr$(10) '欲传送之数据。13为D,10为A
9 p0 {' ~7 w9 Y, t" ]8 wMSComm1.Output = strout
( H% {. j) ~: k, L4 RTimer5.Enabled = True+ Q: K, `2 q' V" i
End Sub9 n1 e& f5 q5 m' e4 Q% U8 z# F
'停止PLC
! ~' {1 p# o4 @Private Sub stop_Click()
. K7 i; ]% S3 y! A9 a3 I: I z1 h! EDim strout As String
/ G; ~+ j0 l/ R# hTimer5.Enabled = False
) i- m5 g. C( J3 ~" j2 z* [/ Zstr = "00050C300000"
- x S8 D+ [ J2 K# [7 Z. aLRCC = LRC(str). S+ c! ^ X$ M+ \1 t- r7 A$ Y
strout = ":" + str + LRCC + Chr$(13) + Chr$(10)
% C/ O9 i8 e' U' o) N9 G& OMSComm1.Output = strout
! Z T8 b* f4 s3 P$ D" ?4 c" }Timer5.Enabled = True, @4 s7 e# R! U8 o2 V
End Sub, g1 o" P1 L, D, R3 ?& _
Y0、Y1的ON/OFF与PLC起动/停止的控制方式相同,指示灯的表示方式也相同。D256,D512数据写入的操作类似,限于篇幅其它代码就不再列出了。5 结束语
( Z- H+ q% E/ N' DVB语言易于编程使用,为与串行设备的通信提供了很大的方便。台达PLC采用标准的目前广为流行的MODBUS协议,为实现PLC与监控计算机的通信提供了简化的平台。由于台达所有的机电产品都支持MODBUS协议,所以,掌握了VB与PLC通信过程,也就等于掌握了PC与台达所有机电产品的通信。 |
|