我想的是:首先发Y,看是否读到P,若成功,则后面发P、U、F,分别将值读出。然后,再发Y,周而复始,
若中途或一开始发Y,读不到P,则连续发十次,再收不到则报警。
还请指点。
Dim binP As Boolean '电源通信是否握手成功,则接着发后面的..
Dim Varp2, Varp3 As String '判断串口能否收到S 电源是否在线
'我用了二个定时器,一个发“Y”,另一个,初始关闭,待确认电源在线后,再打开,发送后面的.
Private Sub Form_Load()
MyCom1 MSComm2 ‘调用串口
timer2.enabled=flase '2号定时器不能用
Varp2 = "S"
End Sub
'向电源发送握手信息
Private Sub Timer5_Timer()
MSComm2.Output = "Y"
End Sub
'串口事件
Private Sub MSComm2_OnComm()
Call Sleep(50) '延时
If MSComm2.CommEvent = 2 Then
MSComm2.RThreshold = 20
Dim i
For i = 1 To MSComm2.InBufferCount
SwichVar1 i ’将不定长的数据一个个接起来
buffer1 = buffer1 & Hex(InByte(i))
Next i
Varp3 = HexToStr(buffer1)'将收到的转成STR
Text1.Text = Varp3 '此处是监测点
End If
If StrComp(Varp2, Varp3, vbBinaryCompare) = 0 Then '若相同
POWER1Alarm.FillColor = QBColor(10) ‘灯变绿
binP = True '变量为真
Timer1.Enabled = False '关闭1号定时器
Timer6.Enabled = True '打开2号定时器
Else
UPS1Alarm.FillColor = QBColor(12)
binADDRS = False
Timer6.Enabled = False
End If
若不加这一段,则发送没有问题,若我后面发“P”,读出的值也就是“数值,比如150”功率,此值也就不等于“S”。这时,程序就停了,好像这里有点乱。
( If temp = 1 Then
Varp3 = HexToStr(buffer1)
Text2.Text = Varp3 '监测点二
End If )
buffer1 = ""
MSComm2.RThreshold = 1
End Sub
'向电源发送读命令
Private Sub Timer6_Timer()
If binADDRS = True Then
temp = temp + 1
If temp = 1 Then
MSComm2.Output = "P" '读功率值
ElseIf temp = 2 Then
MSComm2.Output = "U" '读电压值
ElseIf temp = 3 Then
MSComm2.Output = "f" '读频率值
End If
If temp > 3 Then temp = 0
End If
End Sub
若中途或一开始发Y,读不到P,则连续发十次,再收不到则报警。
还请指点。
Dim binP As Boolean '电源通信是否握手成功,则接着发后面的..
Dim Varp2, Varp3 As String '判断串口能否收到S 电源是否在线
'我用了二个定时器,一个发“Y”,另一个,初始关闭,待确认电源在线后,再打开,发送后面的.
Private Sub Form_Load()
MyCom1 MSComm2 ‘调用串口
timer2.enabled=flase '2号定时器不能用
Varp2 = "S"
End Sub
'向电源发送握手信息
Private Sub Timer5_Timer()
MSComm2.Output = "Y"
End Sub
'串口事件
Private Sub MSComm2_OnComm()
Call Sleep(50) '延时
If MSComm2.CommEvent = 2 Then
MSComm2.RThreshold = 20
Dim i
For i = 1 To MSComm2.InBufferCount
SwichVar1 i ’将不定长的数据一个个接起来
buffer1 = buffer1 & Hex(InByte(i))
Next i
Varp3 = HexToStr(buffer1)'将收到的转成STR
Text1.Text = Varp3 '此处是监测点
End If
If StrComp(Varp2, Varp3, vbBinaryCompare) = 0 Then '若相同
POWER1Alarm.FillColor = QBColor(10) ‘灯变绿
binP = True '变量为真
Timer1.Enabled = False '关闭1号定时器
Timer6.Enabled = True '打开2号定时器
Else
UPS1Alarm.FillColor = QBColor(12)
binADDRS = False
Timer6.Enabled = False
End If
若不加这一段,则发送没有问题,若我后面发“P”,读出的值也就是“数值,比如150”功率,此值也就不等于“S”。这时,程序就停了,好像这里有点乱。
( If temp = 1 Then
Varp3 = HexToStr(buffer1)
Text2.Text = Varp3 '监测点二
End If )
buffer1 = ""
MSComm2.RThreshold = 1
End Sub
'向电源发送读命令
Private Sub Timer6_Timer()
If binADDRS = True Then
temp = temp + 1
If temp = 1 Then
MSComm2.Output = "P" '读功率值
ElseIf temp = 2 Then
MSComm2.Output = "U" '读电压值
ElseIf temp = 3 Then
MSComm2.Output = "f" '读频率值
End If
If temp > 3 Then temp = 0
End If
End Sub
解决方案 »
- VB6自定义银行家舍入
- VB如何把一个资源文件,以2进制写入注册表里?
- vba autocad 圆弧中点座标
- 请教高手:如何使插入到Word中的ActiveX控件背景透明,前景半透明?
- 如何用VB将JPG或者HTM 文件设置为桌面壁纸????[分不多了,不敢一次放出,帮解决立刻给分]
- 讨论!.net好还是java好
- 保存记录时 提示“多步操作发生错误,请检查每一步的状态值”
- 如何用VB窗口查找已建立的表格中的数据,将查找到的数据读到VB窗口的文本中,如果没有,则添加到表末。
- vb里用绘图函数能能画出3d效果的围棋子么如何做呢高分请教
- 怎么样通过写注册表来添加一种文件类型并设置高级属性
- 串口发信息和收信息比较特别的问题
- VB6.0中的treeview中没有selectedNode
Private Sub Timer6_Timer()
If binADDRS = True Then
temp = temp + 1
If temp = 1 Then
MSComm2.Output = "P" '读功率值
ElseIf temp = 2 Then
MSComm2.Output = "U" '读电压值
ElseIf temp = 3 Then
MSComm2.Output = "f" '读频率值
End If
If temp > 3 Then temp = 0
End If
En