要实现通信,将数据读入数据库,100分求解! 电压监测系统想问一下,从串口来的数据是否应该放在内存数组中,然后读入,可是,我不知道该在哪里定义这个数组,还有,要执行插入语句,应该怎么做呢?测量到电压超限后,要执行一个通信命令,又该怎么做呢??虚心求教!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那就直接用动态数组吧.dim theV() as single每到来一个新数值就:redim preserve theV(ubound(theV)+1)theV(ubound(theV))=NewValue 3楼老马方法正确.LZ的:楼上你说的这个数组定义在哪里啊?当然是在接收到下位机返回的正确数据后,进入数据处理时.例(代码引自本人答复http://topic.csdn.net/u/20080724/14/5fbcb79d-5e12-43b5-9b92-c09b875e99db.html贴依据问贴者的通信协议写的):Option Explicit Dim strData As String Dim sjO2 As Single Dim sjCH4 As Single Dim sjCO2 As Single Dim sjCO As Single Dim sjSend() As Byte Private Sub Command1_Click() '查询测量结果 ReDim sjSend(3) sjSend(0) = &H11 sjSend(1) = &H1 sjSend(2) = &H1 sjSend(3) = &HED MSComm1.Output = sjSendEnd SubPrivate Sub Form_Load() Dim port As Integer port = 1 MSComm1.CommPort = port 'COM端口 MSComm1.Settings = "9600,n,8,1" MSComm1.InputMode = comInputModeBinary '采用二进制传输 MSComm1.InBufferCount = 0 '清空接受缓冲区 MSComm1.OutBufferCount = 0 '清空传输缓冲区 MSComm1.RThreshold = 1 '产生MSComm事件 MSComm1.InBufferSize = 1024 MSComm1.PortOpen = TrueEnd SubPrivate Sub MSComm1_OnComm() '接收数据 Dim BytReceived() As Byte Dim strBuff As String Select Case MSComm1.CommEvent Case 2 MSComm1.InputLen = 0 strBuff = MSComm1.Input BytReceived() = strBuff Dim i As Integer For i = 0 To UBound(BytReceived) '接收数据处理为16进制 If Len(Hex(BytReceived(i))) = 1 Then strData = strData & "0" & Hex(BytReceived(i)) Else strData = strData & Hex(BytReceived(i)) End If Next ' 2 2 2 4 4 4 4 2 2 2 '数据处理代码 应答:[ACK] 0B 01 (CO) (CO2) (CH4) (O2) [ST1] [ST2] [CS] If Mid(strData, 1, 2) = "16" And Len(strData) = 2 * (Val("&H" & Mid(strData, 3, 2)) + 3) Then '定义在此初,使用老马提供的方法写定义代码及后面的数据赋值句 Text1 = strData sjCO = Val("&H" & Mid(strData, 7, 4)) / 10 sjCO2 = Val("&H" & Mid(strData, 11, 4)) / 1000 sjCH4 = Val("&H" & Mid(strData, 15, 4)) sjO2 = Val("&H" & Mid(strData, 19, 4)) / 100 Print sjCO, sjCO2, sjCH4, sjO2 strData = "" '为下次接收做清除 End If End SelectEnd Sub上述红色文字是指明定义处,绿色文字仅是说明多字段数据的取出. lz是做plc的?楼上的方法不错 要是想要源码 我这到有 苍天啊!!!!截屏功能 windowsmediaplayer控件控制的问题.急!!!!!!? 〓500分悬赏!!〓怎么才能检测到POS机的钱箱是否关闭?〓 十万火急。。。在线等待之中{关于MSHFlexGrid控件} 紧急求救,vb中通过ODBC访问dbf格式数据文件的遇到的头疼问题 报表问题(datareport)急 在线求助!!!!! 谁知道VB5/6比较好的反编译程序 使用VB.NET对Xml文档进行读取与操作 vb界面打开报错 请求帮助:关于赋值语句的特殊用法 VB以binary形式搜索文件中的ascii值如何实现? 怎样让网页中的某个超链接获得焦点?
LZ的:楼上你说的这个数组定义在哪里啊?
当然是在接收到下位机返回的正确数据后,进入数据处理时.
例(代码引自本人答复http://topic.csdn.net/u/20080724/14/5fbcb79d-5e12-43b5-9b92-c09b875e99db.html贴依据问贴者的通信协议写的):
Option Explicit
Dim strData As String
Dim sjO2 As Single
Dim sjCH4 As Single
Dim sjCO2 As Single
Dim sjCO As Single
Dim sjSend() As Byte
Private Sub Command1_Click() '查询测量结果
ReDim sjSend(3)
sjSend(0) = &H11
sjSend(1) = &H1
sjSend(2) = &H1
sjSend(3) = &HED
MSComm1.Output = sjSend
End SubPrivate Sub Form_Load()
Dim port As Integer
port = 1
MSComm1.CommPort = port 'COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm() '接收数据
Dim BytReceived() As Byte
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
Dim i As Integer
For i = 0 To UBound(BytReceived) '接收数据处理为16进制
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next ' 2 2 2 4 4 4 4 2 2 2
'数据处理代码 应答:[ACK] 0B 01 (CO) (CO2) (CH4) (O2) [ST1] [ST2] [CS]
If Mid(strData, 1, 2) = "16" And Len(strData) = 2 * (Val("&H" & Mid(strData, 3, 2)) + 3) Then
'定义在此初,使用老马提供的方法写定义代码及后面的数据赋值句 Text1 = strData
sjCO = Val("&H" & Mid(strData, 7, 4)) / 10
sjCO2 = Val("&H" & Mid(strData, 11, 4)) / 1000
sjCH4 = Val("&H" & Mid(strData, 15, 4))
sjO2 = Val("&H" & Mid(strData, 19, 4)) / 100
Print sjCO, sjCO2, sjCH4, sjO2
strData = "" '为下次接收做清除
End If
End Select
End Sub上述红色文字是指明定义处,绿色文字仅是说明多字段数据的取出.