想做一个VB的小软件通过串口通信来接受单片机给我发的数据(是16进制的一段数据包),我要从接收到的数据包里将我需要的数据提取出来(我需要的信息是:主机编号,上网时间,工作电流,排风电流,排风时间,A/B模块工作状态(分别有4种情况用4种16进制数代表),500风压值,600风压值,检测结果),将提取出16进制数相应的添入到以上需要的信息中。
因为是没做过VB通信,所以不太了解,希望大家能帮忙简单做个小的程序,以便熟悉。谢谢!
因为是没做过VB通信,所以不太了解,希望大家能帮忙简单做个小的程序,以便熟悉。谢谢!
解决方案 »
- 通过函数参数传一个记录集,是用adodb.recordset还是 recordset呀?
- 麻烦版主和高手进来指点一下如何开发这个程序(结构)?
- 谁知道tar.gz文件在vb中解压命令如何写
- ActiveReport 报表能否设定行间距??
- vb+crystal report9.0+sql 高手请进 看看我的代码有何不当(急!)
- VB6.0好像不支持officeXP的ACCESS,怎样才能支持?
- inet控件的代理设置问题,高分相送!up也有分哦!在线等待!
- Method 'Open' of Object 'Workbooks' failed. 急呀!
- 如何用VB做一个文件监控程序???!!!
- vssp4有问题!!??
- 两张查询表之间的查询
- 出个题目玩,散分
一个最最简单的例子!!! 需要command1 text1 mscomm1 各一个; 代码为
Private Sub Command1_Click()
MSComm1.Output = Text1.Text
End Sub Private Sub Form_Load() MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True End Sub 下面是响应MSComm1_OnComm事件的处理程序,对数据库采集的处理程序采用MSComm事件驱动方式。 Private Sub MSComm1_OnComm()
With MSComm1
Select case .CommEvent
Case .comEvReceive
' 接收数据
' 对数据进行处理
case .comEVSend
'发送数据
case .comEventRxParity
'对奇偶校验错误进行处理
end select
end with
end sub
Option Explicit
Dim strData As StringPrivate Sub MsComm1_OnComm()
Dim inByte() As Byte
Dim i As Integer
Select Case MsComm1.CommEvent
Case comEvReceive
inByte = MsComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
strData = strData & "0" & Hex(inByte(i))
Else
strData = strData & Hex(inByte(i))
End If
Next
Text1.Text = strData
'以下写符合通信协议规定的判断代码处理接收数据
End Select
End SubPrivate Sub Form_Load()
With MsComm1
.CommPort = 1
.Settings = "9600,n,8,1"
.InBufferCount = 0
.InputLen = 0
.RThreshold = 1
.InputMode = comInputModeBinary '以2进制接收
.PortOpen = True
End With
Text1 = ""
End Sub
BYTE字节流未必都是可打印字符。想必是要用二进制接收方式。楼主你把传输数据的格式定义贴出来。大家就有的放矢了。
Dim inByte() As Byte
Dim varTmp
Dim i As Integer
Select Case MsComm1.CommEvent
Case comEvReceive
varTmp = MsComm1.Input
inByte = varTmp
For i = 0 To UBound(inByte)
strData = strData & Right("0" & Hex(inByte(i)),2)
Next
Text1.Text = strData
'以下根据数据格式虰处理接收数据
End Select
End Sub
我现在正在看你给我的这个程序,但是我不知道怎么用。你就用一个MsComm1控件就够了吗?(我现在试的这个程序如下,好像我接收是按文本接收,但是我不会改)
'串口初始化
Private Sub Form_Load()
MSComm1.CommPort = 1 '设置通信端口号为COM1
MSComm1.Settings = "9600,n,8,1" '设置串口参数
MSComm1.PortOpen = True
MSComm1.InputMode = 1 '接收文本型数据
End Sub
'打开通信端口
'把字符通过串口发送出去
Private Sub Cmdsend_Click()
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
MSComm1.Output = Trim(Textsend.Text)
End Sub
Private Sub CmdReceive_Click()
Dim buf$
Timer1.Enabled = False
buf = Trim(MSComm1.Input) '将缓冲区内的数据读入buf变量中
If Len(buf) = 0 Then '判断缓冲区内是否存在数据
TextReceive.Text = ""
Else
TextReceive.Text = buf
End If
End Sub
'启动定时器
'进入自动接收模式
Private Sub Cmdauto_Click()
Timer1.Enabled = True
End Sub'定时自动从输入缓冲区读取字符
Private Sub Timer1_Timer()
If MSComm1.InBufferCount > 0 Then
TextReceive.Text = TextReceive.Text + MSComm1.Input
End If
End Sub
'关闭通信端口,停止程序运行
Private Sub Cmdquit_Click()
MSComm1.PortOpen = False
End
End Sub
InputMode 属性
设置或返回 Input 属性取回的数据的类型。
语法
object.InputMode [ = value ]
InputMode 属性语法包括下列部分:
部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 值或常数,确定输入模式,如“设置值”中所描述。
设置值
value 的设置值是:
常数 值 描述
comInputModeText 0 (缺省)数据通过 Input 属性以文本形式取回。
comInputModeBinary 1 数据通过 Input 属性以二进制形式取回。
Option Explicit
Dim strData As StringPrivate Sub MsComm1_OnComm()
'Dim inByte() As Byte
'Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
strData = strData & MSComm1.Input
Text1.Text = strData
'以下写符合通信协议规定的判断代码处理接收数据
End Select
End SubPrivate Sub Form_Load()
With MSComm1
.CommPort = 1
.Settings = "9600,n,8,1"
.InBufferCount = 0
.InputLen = 0
.RThreshold = 1
'.InputMode = comInputModeBinary '以2进制接收
.InputMode = comInputModeText '以文本方式接收
.PortOpen = True
End With
Text1 = ""
End Sub
1、年龄:25-35岁;
2、学历及专业:必须为正规全国统招全日制本科以上学历,计算机或相关专业,两年以上软件开发工作经验;
3、熟练使用VB开发语言,并能够熟练使用这种语言进行GUI/WinForm界面功能的开发;
4、精通SQL Server、ORACLE数据库应用程序的开发;精通数据库存储过程的开发;对数据库应用性能优化有丰富经验;
5、熟悉面向对象的分析设计技术和工具,包括UML建模、Rose应用;
6、了解CMMI软件过程方法。
7、有积极的工作态度,勤奋踏实,沟通和学习能力较好,能积极面对工作压力,善于和各种背景的人合作;
8、有企业管理软件开发经验者优先,有行业背景(如:制造业、财政、房地产等,)或业务知识(如:财务、HR、供应链等)尤佳。
谢谢你!
Option Explicit
Dim strData As StringPrivate Sub MsComm1_OnComm()
Dim inByte() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
inByte = MSComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
strData = strData & "0" & Hex(inByte(i))
Else
strData = strData & Hex(inByte(i))
End If
Next
Text1.Text = strData
'以下写符合通信协议规定的判断代码处理接收数据
End Select
End SubPrivate Sub Form_Load()
With MSComm1
.CommPort = 1
.Settings = "9600,n,8,1"
.InBufferCount = 0
.InputLen = 0
.RThreshold = 1
.InputMode = comInputModeBinary '以2进制接收
.PortOpen = True
End With
Text1 = ""
End Sub'关闭通信端口,停止程序运行
Private Sub Cmdquit_Click()
MSComm1.PortOpen = False
End
End Sub
给段代码实例,将数据处理到EXCEL表格的:
Private Sub MSComm1_OnComm()
Dim strsj As String
Static sum1 As Integer
Static sum As Integer
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strsj = MSComm1.Input
strData = strData & strsj
If Mid(strData, 1, 4) = "Data" And Right(strData, 3) = Chr(27) & "@@" Then
sum1 = sum1 + 1
Text2 = sum1
If sum1 Mod 5 = 0 Then
sum = sum + 1
Text1 = sum
Dim j As Integer
For j = 0 To 30
Label1(j) = "0.0"
Label1(j).BackColor = vbGreen
Next
Dim sjfg() As String
sjfg = Split(strData, Chr(27) & "@")
Dim i As Integer
'Set xlapp = CreateObject("excel.application")
'xlapp.Visible = True
'Set xlBook = xlapp.Workbooks.Add
'Set xlBook = xlapp.Workbooks.Open(App.Path & "\报表.xlt") '打开EXCEL工作簿
'Set xlSheet = xlBook.worksheets(1)
xlSheet.Cells(2, 2) = Date$ 'Mid(sjfg(0), 7, 10)
xlSheet.Cells(2, 20) = sjfg(1) 'Mid(sjfg(1), 1, 9)
'xlSheet.Cells(sum + 1, 3) = Mid(sjfg(2), 1, 2)
'xlSheet.Cells(sum + 1, 4) = Mid(sjfg(2), 5, 13)
For i = 3 To UBound(sjfg) - 1
xlSheet.Cells(sum + 3, 1) = Right(sjfg(0), 5) ' "Date"
'xlSheet.Cells(sum, Val(Mid(sjfg(i), 1, 2)) + 4) = Val(Mid(sjfg(i), 1, 2))
xlSheet.Cells(sum + 3, Val(Mid(sjfg(i), 1, 2)) + 3) = Mid(sjfg(i), 6, 5)
If Mid(sjfg(i), 1, 2) <> 0 Then
Label1(Val(Mid(sjfg(i), 1, 2))).Caption = Mid(sjfg(i), 6, 5)
Label1(Val(Mid(sjfg(i), 1, 2))).BackColor = vbRed
Else
End If
Next
End If
strData = ""
ReDim sjfg(0)
sjfg = Split(strData, Chr(13))
End If
End Select
End Sub