请求支援!

gugp8001 2009-07-07 12:57:06
记事本里有数据:
6899999999DE17680808000011484E45238000C816
68999999991E18680808000011484E452380020B16
68999999990000680810000011484E451080AAAAAAAAAAAAAAAA061E16
怎么把这3条数据取出来并且通过232一条一条的发送到单片机? 连续发送5遍.
...全文
55 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdingyun 2009-07-07
  • 打赏
  • 举报
回复
本人代码设置了500毫秒的间隔,此间隔可依据上下位机的通信协议而修改.
其次LZ你的文本似乎是16进制表示的指令,如果通信是按BYTE字节指令发送的,则应该将16进制字符串转换为BYTE字节流发送.
贝隆 2009-07-07
  • 打赏
  • 举报
回复
个人觉得每条数据在向下位机发送时需要间隔一段时间(毫秒计),这样可以确保通信的正常完成。
gugp8001 2009-07-07
  • 打赏
  • 举报
回复
谢谢zdingyun.您的这个答案,让我突发灵感,使我找到了一个解决我好几个月都没有解决我的庞大程序的办法.非常感谢!由衷的感谢!
gugp8001 2009-07-07
  • 打赏
  • 举报
回复
同行!以后多多请教!
chenyubo1977 2009-07-07
  • 打赏
  • 举报
回复
这是我以前写的一个测试用的小程序,现在的做成DLL了,只能给你个长的了。
zdingyun 2009-07-07
  • 打赏
  • 举报
回复
提供思路:
1)读取多行文本,通过SPLIT分割为字符串数组.
2)采用TIMER控件执行发送,以下提供发送部分代码:
Option Explicit
Dim Send(2) As String
Dim sum As Integer
Dim sum1 As Integer

Private Sub Command1_Click()
sum = 0
sum1 = 0
Timer1.Enabled = True
End Sub

Private Sub Form_Load()
Send(0) = "6899999999DE17680808000011484E45238000C816"
Send(1) = "68999999991E18680808000011484E452380020B16"
Send(2) = "68999999990000680810000011484E451080AAAAAAAAAAAAAAAA061E16"
MSComm1.PortOpen = True
Timer1.Interval = 500
Timer1.Enabled = False
sum = 0
sum1 = 0
End Sub

Private Sub Timer1_Timer()
MSComm1.Output = Send(sum)
sum = sum + 1
If sum > 2 Then
sum = 0
sum1 = sum1 + 1
If sum1 >= 5 Then
Timer1.Enabled = False
End If
End If
End Sub

gugp8001 2009-07-07
  • 打赏
  • 举报
回复
哦也!好长哦!先谢谢了!
chenyubo1977 2009-07-07
  • 打赏
  • 举报
回复
你这不是645规约吗
给你一个做通断电的小例子,自己加下延时就可以试了
Private Sub Command1_Click()
Dim strtxd(17) As Byte
Dim bh, mm As String
Dim av() As Byte
Dim inttemp As Integer
Form1.Text1.Text = ""
Form1.Text2.Text = ""
Form1.Text3.Text = ""
Form1.Text4.Text = ""
Form1.Text5.Text = ""
Form1.Text6.Text = ""
bh = "12位表号"
mm = "密码"
s1 = ""
If Form1.MSComm1.PortOpen = False Then
Form1.MSComm1.CommPort = "4"
Form1.MSComm1.Settings = "9600,e,8,1"
Form1.MSComm1.PortOpen = True
End If
6:
inttemp = "0"
strtxd(0) = CByte("&H68")
For j = 0 To 5
strtxd(6 - j) = CByte("&H" + Mid(Trim(bh), 2 * j + 1, 2))
Next j
strtxd(7) = CByte("&H68")
strtxd(8) = CByte("&H04")
strtxd(9) = CByte("&H06")
strtxd(10) = CByte("&H6D")
strtxd(11) = CByte("&HF3")
strtxd(12) = CByte("&H33")
For j = 0 To 2
strtxd(15 - j) = CByte("&H" & (Val(Mid(Trim(mm), 2 * j + 1, 2))))
strtxd(15 - j) = strtxd(15 - j) + 51
Next j
For j = 0 To 15
inttemp = inttemp + Val(CByte(strtxd(j)))
Next j
inttemp = inttemp Mod 256
strtxd(16) = "&H" + Trim(Hex(Val(inttemp)))
strtxd(17) = CByte("&H16")
Form1.MSComm1.InputLen = 0
Form1.MSComm1.InBufferCount = 0
Form1.Text1.Text = strtxd
Form1.MSComm1.Output = strtxd
'延时
Form1.MSComm1.RThreshold = 0
Form1.MSComm1.InputMode = comInputModeBinary
Form1.MSComm1.RThreshold = 1
If Form1.MSComm1.InBufferCount >= 11 Then
s2 = Form1.MSComm1.InBufferCount
s = ""
av = Form1.MSComm1.Input
For m = 0 To (s2 - 1) Step 1
If (av(m) < 16) Then
If av(m) <> "63" Then
s = s & "0" + Hex(av(m))
End If
Else
If av(m) <> "63" Then
s = s & Hex(av(m))
End If
End If
Next m
SD1 = Mid(s, 13, 2) & Mid(s, 11, 2) & Mid(s, 9, 2) & Mid(s, 7, 2) & Mid(s, 5, 2) & Mid(s, 3, 2)
If SD1 = bh Then
s8 = Mid(s, 17, 4)
If s8 <> "8400" Then
GoTo 6
Else
Form1.Text7.Text = "断电报警成功"
End If
Else
GoTo 6
End If
Form1.Text2.Text = av
Else
GoTo 6
End If
If Form1.MSComm1.PortOpen = True Then Form1.MSComm1.PortOpen = False
If Form1.MSComm1.PortOpen = False Then
Form1.MSComm1.CommPort = "4"
Form1.MSComm1.Settings = "9600,e,8,1"
Form1.MSComm1.PortOpen = True
End If
7:
inttemp = 0
strtxd(0) = CByte("&H68")
For j = 0 To 5
strtxd(6 - j) = CByte("&H" + Mid(Trim(bh), 2 * j + 1, 2))
Next j
strtxd(7) = CByte("&H68")
strtxd(8) = CByte("&H04")
strtxd(9) = CByte("&H06")
strtxd(10) = CByte("&H6F")
strtxd(11) = CByte("&HF3")
strtxd(12) = CByte("&H33")
For j = 0 To 2
strtxd(15 - j) = CByte("&H" & (Val(Mid(Trim(mm), 2 * j + 1, 2))))
strtxd(15 - j) = strtxd(15 - j) + 51
Next j
For j = 0 To 15
inttemp = inttemp + Val(CByte(strtxd(j)))
Next j
inttemp = inttemp Mod 256
strtxd(16) = "&H" + Trim(Hex(Val(inttemp)))
strtxd(17) = CByte("&H16")
Form1.MSComm1.InputLen = 0
Form1.MSComm1.InBufferCount = 0
Form1.Text3.Text = strtxd
Form1.MSComm1.Output = strtxd
'延时
Form1.MSComm1.RThreshold = 0
Form1.MSComm1.InputLen = 0
Form1.MSComm1.InputMode = comInputModeBinary
Form1.MSComm1.InputLen = 0
Form1.MSComm1.RThreshold = 1
If Form1.MSComm1.InBufferCount >= 11 Then
s2 = Form1.MSComm1.InBufferCount
s = ""
av = Form1.MSComm1.Input
For m = 0 To (s2 - 1) Step 1
If (av(m) < 16) Then
If av(m) <> "63" Then
s = s & "0" + Hex(av(m))
End If
Else
If av(m) <> "63" Then
s = s & Hex(av(m))
End If
End If
Next m
SD1 = Mid(s, 13, 2) & Mid(s, 11, 2) & Mid(s, 9, 2) & Mid(s, 7, 2) & Mid(s, 5, 2) & Mid(s, 3, 2)
If SD1 = bh Then
s8 = Mid(s, 17, 4)
If s8 <> "8400" Then
GoTo 7
Else
Form1.Text8.Text = "断电成功"
End If
Else
GoTo 7
End If
Form1.Text4.Text = av
Else
GoTo 7
End If
If Form1.MSComm1.PortOpen = True Then Form1.MSComm1.PortOpen = False
If Form1.MSComm1.PortOpen = False Then
Form1.MSComm1.CommPort = "4"
Form1.MSComm1.Settings = "9600,e,8,1"
Form1.MSComm1.PortOpen = True
End If
8:
inttemp = 0
strtxd(0) = CByte("&H68")
For j = 0 To 5
strtxd(6 - j) = CByte("&H" + Mid(Trim(bh), 2 * j + 1, 2))
Next j
strtxd(7) = CByte("&H68")
strtxd(8) = CByte("&H04")
strtxd(9) = CByte("&H06")
strtxd(10) = CByte("&H70")
strtxd(11) = CByte("&HF3")
strtxd(12) = CByte("&H33")
For j = 0 To 2
strtxd(15 - j) = CByte("&H" & (Val(Mid(Trim(mm), 2 * j + 1, 2))))
strtxd(15 - j) = strtxd(15 - j) + 51
Next j
For j = 0 To 15
inttemp = inttemp + Val(CByte(strtxd(j)))
Next j
inttemp = inttemp Mod 256
strtxd(16) = "&H" + Trim(Hex(Val(inttemp)))
strtxd(17) = CByte("&H16")
Form1.MSComm1.InputLen = 0
Form1.MSComm1.InBufferCount = 0
Form1.Text5.Text = strtxd
Form1.MSComm1.Output = strtxd
'延时
Form1.MSComm1.RThreshold = 0
Form1.MSComm1.InputLen = 0
Form1.MSComm1.InputMode = comInputModeBinary
Form1.MSComm1.InputLen = 0
Form1.MSComm1.RThreshold = 1
If Form1.MSComm1.InBufferCount >= 11 Then
s2 = Form1.MSComm1.InBufferCount
s = ""
av = Form1.MSComm1.Input
For m = 0 To (s2 - 1) Step 1
If (av(m) < 16) Then
If av(m) <> "63" Then
s = s & "0" + Hex(av(m))
End If
Else
If av(m) <> "63" Then
s = s & Hex(av(m))
End If
End If
Next m
SD1 = Mid(s, 13, 2) & Mid(s, 11, 2) & Mid(s, 9, 2) & Mid(s, 7, 2) & Mid(s, 5, 2) & Mid(s, 3, 2)
If SD1 = bh Then
s8 = Mid(s, 17, 4)
If s8 <> "8400" Then
GoTo 8
Else
Form1.Text9.Text = "通电成功"
End If
Else
GoTo 8
End If
Form1.Text6.Text = av
Else
GoTo 8
End If
If Form1.MSComm1.PortOpen = True Then Form1.MSComm1.PortOpen = False
MsgBox ("通断电测试完成!")
End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧