我要发布
仪器网/ 仪器社区/ 数据采集器/ 各位老师请教下,vb采集温度器上的数据?

各位老师请教下,vb采集温度器上的数据?

aaa一辈子4    2013-05-31    数据采集器    浏览 427 次

用的是modbus协议:RS-485串口,“9600.n.81”,功能码03读参数,功能码10写参数值。我这有个模拟采集温度的程序,请帮忙看下怎么改才能跟温控表实际采集,我这没有添加MSComm通讯控件... 用的是modbus协议:
RS-485串口,
“9600.n.81”,
功能码 03 读参数,
功能码 10 写参数值。
我这有个模拟采集温度的程序,请帮忙看下怎么改才能跟温控表实际采集,我这没有添加MSComm通讯控件:
Public flag As Boolean '报警标志位
Public saveflag As Boolean '数据保存标志位

Private Sub cancelsave_Click()
saveflag = False '取消保存
End Sub
Private Sub cancelwarn_Click()
flag = False '取消报警,并隐藏相关显示控件。
Label3.Visible = False
Label4.Visible = False
cancelwarn.Enabled = False
End Sub
Private Sub Form_Load()
stopgetting.Enabled = False '初始状态,非采集状态下“停止采集”不可用
cancelwarn.Enabled = False '初始状态,非采集状态下“取消报警”不可用
Label2.Caption = ""
End Sub
Private Sub gettting_Click()
Timer1.Enabled = True '启动定时器1,定时读取数据。
Timer1.Interval = 1000 '采集时间间隔。
stopgetting.Enabled = True
End Sub
Private Sub help_Click()
Dim res
res = MsgBox("本系统在开始采集数据后才能进行数据保存,///掉。", , "帮助")
End Sub
Private Sub savedata_Click()
saveflag = True '置位数据保存标志位,保存数据。
End Sub
Private Sub setwarnning_Click()
Form2.Show '显示设置窗口。
End Sub
Private Sub stopgetting_Click()
Timer1.Enabled = False '停止采集
End Sub
Private Sub Timer1_Timer()
Dim t As Double '温度
Dim a As Integer
Dim res
Dim str As String
str = App.Path + "\数据.txt" '文件保存路径,保存在程序相对路径内。
t = 50 + Rnd * 20 '这里生成50-70之间的随机数,模拟采集到的温度。
a = 100 * t
t = a / 100 '保留两位小数
Label2.Caption = t
Label3.Caption = Form2.a
If flag Then '判断是否超过设定温度
If t > Form2.a Then
res = MsgBox("超过设定温度!", vbExclamation, "报警") '超过设定温度弹窗显示报警
flag = False '将报警标志位置0,停止报警。用户需再次启动报警功能。
End If
End If
If saveflag Then '保存数据
Open str For Append As #405 '在文件尾端写入数据
Print #405, t
Close #405
End If

End Sub

精彩问答
mm13981nk47 发布日期:2013-06-01
我做过VB与温控器的通迅, 给你的程序看看, 用Mscomm控件, 你的程序为什么不用,不用又怎么可以接收数据?
Public Sub ReadTempr(Addr As Byte) '读取温度值
Dim SendDat(7) As Byte
Dim Crc_Dat As Long
SendDat(0) = Addr '温控器地址, 在温控器上可以设置
SendDat(1) = 3 '功能码3表示读寄存器
SendDat(2) = 71 '7100温度寄存器地址
SendDat(3) = 0
SendDat(4) = 0 '0002读两个寄存器
SendDat(5) = 2
Crc_Dat = Crc_Check(SendDat, 6) Mod 65536
SendDat(6) = Crc_Dat Mod 256 'CRC校验码
SendDat(7) = Crc_Dat \ 256
Form7.MSComm.Output = SendDat
Form7.MSComm.InBufferCount = 0
End Sub
Public Function Crc_Check(Dat() As Byte, LenDat As Integer) As Long
Dim Crc As Long
Dim count As Integer
Dim Num As Integer
Crc = &HFFFF&
For Num = 0 To LenDat - 1
Crc = Crc Xor Dat(Num)
For count = 0 To 7
If (Crc Mod 2) > 0 Then
Crc = Crc \ 2
Crc = Crc Xor &HA001&
Else
Crc = Crc \ 2
End If
Next count
Next Num
Crc_Check = Crc
End Function
Private Sub MSComm_OnComm() '串口接收事件
Dim Num As Integer
Dim Rdata(9) As Byte
Dim Crc As Long
Dim Crc_H As Byte, Crc_L As Byte
Dim strReceive As String

ReReceive:
Num = 0
If MSComm.CommEvent = comEvReceive Or MSComm.InBufferCount > 0 Then

MSComm.RThreshold = 0 '关闭串口接收中断
Timer1.Enabled = False
Timer1.Interval = 10 '规定在10ms内接收完所有数据
Timer1.Enabled = True

Do While Timer1.Enabled = True

If MSComm.InBufferCount > 0 Then
Rdata(Num) = AscB(MSComm.Input)
Num = Num + 1
If Num = 9 Then Exit Do
End If
DoEvents
Loop
If Num = 9 Then '接收到温度数据
If Rdata(0) = 201 Or Rdata(0) = 202 Then
Crc = Crc_Check(Rdata, 7) Mod 65536
Crc_H = Crc \ 256
Crc_L = Crc Mod 256
If Crc_L = Rdata(7) And Crc_H = Rdata(8) Then '接收成功

Form3.XTemPV(Rdata(0) - 201).Text = Format(((Rdata(3) * 256 + Rdata(4)) / 10), "##0.0")
Form3.XTemPV(Rdata(0) - 201).ToolTipText = "Z近更新时间:" & Now
Form3.XTemSV(Rdata(0) - 201).Text = Format(((Rdata(5) * 256 + Rdata(6)) / 10), "##0.0")
Form3.XTemSV(Rdata(0) - 201).ToolTipText = "Z近更新时间:" & Now
End If
End If
End If

End If

If MSComm.InBufferCount > 0 Then GoTo ReReceive '如果此时接收缓冲区中仍有数据,就返回去再次开始接收

MSComm.RThreshold = 1
End Sub
Private Sub Timer1_Timer() '通迅超时检测
Timer1.Enabled = False
End Sub
全部评论
Nqfxcr 发布日期:2013-06-01
不明白你这是什么意思!你只是保存了数据了,你想要做什么?
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录
官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控