vb原代码VB code
Dim auto As Boolean
Dim ONOFF As Boolean '按钮操作标志
Dim k As Integer '按钮操作判断 k=1为发自动操作命令、k=2为发手动操作命令、k=3为发手动喷命令、k=4为发手动滴命令
Dim j As Integer '轮循判断
Dim DATA As Boolean '读操作标志
Dim sendata As String, sendata1 As String, sendata2 As String ...
VB code
Dim auto As Boolean
Dim ONOFF As Boolean '按钮操作标志
Dim k As Integer '按钮操作判断 k=1为发自动操作命令、k=2为发手动操作命令、k=3为发手动喷命令、k=4为发手动滴命令
Dim j As Integer '轮循判断
Dim DATA As Boolean '读操作标志
Dim sendata As String, sendata1 As String, sendata2 As String 'sendata:读输入,sendata1:读输出,sendata2:读内部继电器
Dim sendata3 As String, sendata4 As String, sendata5 As String, sendata6 As String 'sendata3:自动,sendata4:手动,sendata5:手动喷,sendata6:手动滴
Private Sub Command1_Click() '手动喷
k = 3
ONOFF = True '按钮操作置真
auto = False
End Sub
Private Sub Command2_Click() '手动滴
k = 4
ONOFF = True '按钮操作置真
auto = True
End Sub
Private Sub Command3_Click() '手动/自动转换
Dim sendata3 As String
If Text3.Text = "手动" Then '如果目前为手动状态,则转化为自动状态
k = 1
Else
k = 2
End If
ONOFF = True '按钮操作置真
End Sub
Private Sub Form_Load()
On Error GoTo err1
sendata = "@00RR00000001" '"@" + "00" + "RR" + "0000" + "0001"---@:固定格式,"00":站号,"RR":读出输入/输出、内部辅助继电器命令,"0000":继电器地址,"0001":读取数量
sendata1 = "@00RR00100001" '"@" + "00" + "RR" + "0010" + "0001"---@:固定格式,"00":站号,"RR":读出输入/输出、内部辅助继电器命令,"0010":继电器地址,"0001":读取数量
sendata2 = "@00RR02000001" '"@" + "00" + "RR" + "2000" + "0001"---@:固定格式,"00":站号,"RR":读出输入/输出、内部辅助继电器命令,"2000":继电器地址,"0001":读取数量
sendata3 = "@00KSCIO 020000" '"@" + "00" + "KS" + "CIO " + "0200" + "00"---@:固定格式,"00":站号,"KS":强制置位命令,"CIO ":置位的继电器种类(输出、输入、内部、特殊辅助),"0200":通道号,"00":接点
sendata4 = "@00KRCIO 020000" '"@" + "00" + "KR" + "CIO " + "0200" + "00"---@:固定格式,"00":站号,"KR":强制置位命令,"CIO ":置位的继电器种类(输出、输入、内部、特殊辅助),"0200":通道号,"00":接点
sendata5 = "@00WR02010001" '"@" + "00" + "WR" + "0200" + "0001"---@:固定格式,"00":站号,"WR":写入命令,"0201":通道号,"0001":置201.00并复位201.01
sendata6 = "@00WR02010002" '"@" + "00" + "WR" + "0200" + "0002"---@:固定格式,"00":站号,"WR":写入命令,"0201":通道号,"0002":置201.01并复位201.00
i = 0
k = 0
ONOFF = False
DATA = False
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.CommPort = 1 '通信口
MSComm1.Settings = "9600,E,7,2"
MSComm1.Handshaking = 0
MSComm1.InputLen = 0 '设置和返回input每次读出的字节数,设为0时读出接收缓冲区中的内容
MSComm1.OutBufferCount = 0 '设置和返回发送缓冲区的字节数,设为0时清空发送缓冲区
MSComm1.InBufferCount = 0 '设置和返回接收缓冲区的字节数,设为0时清空接收缓冲区
MSComm1.PortOpen = True
Exit Sub
err1:
MsgBox Err.Description
End Sub
Function FCS(a$) As String '校验计算程序(异或)
b% = 0
i% = Len(a$)
For i = 1 To i%
b% = b% Xor Asc(Mid(a$, i, 1))
Next
ff$ = Hex$(b%)
If Len(ff$) = 1 Then
ff$ = "0" + ff$
End If
FCS = ff$ + "*"
End Function
Private Sub Form_Resize()
Me.Height = 4000
Me.Width = 6000
Me.Left = 0.5 * (MDIForm1.Width - Me.Width)
Me.Top = 0.3 * (MDIForm1.Height - Me.Height)
End Sub
Private Sub MSComm1_OnComm()
Dim getdata As String 'getdata:读输入缓存区
Dim zhuangX As Boolean, zhuangX1 As Boolean 'zhuangX:干旱判断,zhuangX1:严重干旱判断
Dim zhuangY As Boolean, zhuangY1 As Boolean 'zhuangY:喷判断,zhuangY1:滴判断
If MSComm1.CommEvent = comEvReceive Then 'CommEvent的属性返回的值为comEvReceive时是发生了接收事件.
getdata = MSComm1.Input
If ONOFF = True And DATA = False Then '因操作按钮而产生的OnComm时,清除按钮操作标志与按钮操作判断并退出此事件,不做接收数据处理
ONOFF = False
k = 0
Timer1.Enabled = True
Exit Sub
End If
'读数据时返回格式为:"@" + "00" + "RR"+"00"+"四位数据"+FCS+"*"+CHR(13)
'@:固定格式,"00":站号,"00":正确处理时的结束码,FCS:校验和,"*"+CHR(13):固定格式
getdata = Mid(getdata, 11, 1) '因为我们要读的是继电器区的后两位状态,所以取四位数据的最后一位
DATA = False
Select Case j
Case 0 '读000.00与000.01的状态时
If Val(getdata) Mod 2 = 1 Then '除2的余数如果等于1,说明000.00闭合(8421---000.00为最后一位,只有它闭合getdata才为奇数)
zhuangX = True
Else
zhuangX = False
End If
If Val(getdata) Mod 4 >= 2 Then '除4的余数如果大于或等于2,说明000.01闭合(8421---000.01为倒数第二位,只有它闭合getdata除4的余数才会大于或等于2)
zhuangX1 = True
Else
zhuangX1 = False
End If
If zhuangX = False And zhuangX1 = False Then '如果000.00与000.01都不闭合,则显示湿润
Text1.Text = "湿润"
Else
If zhuangX = True Then '如果000.00闭合,则显示干旱
Text1.Text = "干旱"
Else
Text1.Text = "严重干旱" '如果000.01闭合,则显示严重干旱
End If
End If
Case 1 '读10.00与10.01的状态
If Val(getdata) Mod 2 = 1 Then '除2的余数如果等于1,说明10.00闭合(8421---10.00为最后一位,只有它闭合getdata才为奇数)
zhuangY = True
Else
zhuangY = False
End If
If Val(getdata) Mod 4 >= 2 Then '除4的余数如果大于或等于2,说明10.01闭合(8421---10.01为倒数第二位,只有它闭合getdata除4的余数才会大于或等于2)
zhuangY1 = True
Else
zhuangY1 = False
End If
If zhuangY = False And zhuangY1 = False Then '如果000.00与000.01都不闭合,则显示为空,喷嘴没有工作
Text2.Text = ""
Else
If zhuangY = True Then '如果10.00闭合,则显示喷
Text2.Text = "滴"
Else
Text2.Text = "喷" '如果10.01闭合,则显示滴
End If
End If
Case 2
If Val(getdata) Mod 2 = 1 Then '除2的余数如果等于1,说明200.00闭合(8421---200.00为最后一位,只有它闭合getdata才为奇数)
Text3.Text = "自动"
Else
Text3.Text = "手动"
End If
j = -1
End Select
j = j + 1 '进入一个读操作
Timer1.Enabled = True
End If
'
End Sub
Private Sub Timer1_Timer()
If Text3.Text = "自动" Then '如果目前为自动状态,手动“喷”“滴”控制按钮失效
Command1.Enabled = False
Command2.Enabled = False
Else
Command1.Enabled = True
Command2.Enabled = True
End If
If ONOFF = True Then
MSComm1.RThreshold = 11 '设定产生OnComm事件的字符数
'读命令返回格式为:"@" + "00" + "KS/KR"+"00"+FCS+"*"+CHR(13):正好11个字符,所以设定为返回11个字符后产生OnComm事件
'@:固定格式,"00":站号,"KS/KR":根据置/复位命令返回相对应的字符,"00":正确处理时的结束码,FCS:校验和,"*"+CHR(13):固定格式
Select Case k
Case 1
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
MSComm1.Output = sendata3 + FCS(sendata3) + Chr(13) '强制200.00置位
Case 2
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
MSComm1.Output = sendata4 + FCS(sendata4) + Chr(13) '强制200.00复位
Case 3
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
MSComm1.Output = sendata5 + FCS(sendata5) + Chr(13) '201.00置位,201.01复位
Case 4
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
MSComm1.Output = sendata6 + FCS(sendata6) + Chr(13) '201.01置位,201.00复位
End Select
Exit Sub
End If
DATA = True
MSComm1.RThreshold = 15 '设定产生OnComm事件的字符数
'读命令返回格式为:"@" + "00" + "RR"+"00"+"四位数据"+FCS+"*"+CHR(13):正好15个字符,所以设定为返回15个字符后产生OnComm事件
'@:固定格式,"00":站号,"00":正确处理时的结束码,FCS:校验和,"*"+CHR(13):固定格式
Select Case j
Case 0
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
MSComm1.Output = sendata + FCS(sendata) + Chr(13) '读000.00与000.01的状态
Case 1
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
MSComm1.Output = sendata1 + FCS(sendata1) + Chr(13) '读10.00与10.01的状态
Case 2
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
MSComm1.Output = sendata2 + FCS(sendata2) + Chr(13) '读200.00与200.01的状态
End Select
Timer1.Enabled = False '关闭定时器事件等待返回数据处理结束
End Sub
本文档为【vb原代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。