用VB进行串口实时数据采集.doc_第1页
用VB进行串口实时数据采集.doc_第2页
用VB进行串口实时数据采集.doc_第3页
用VB进行串口实时数据采集.doc_第4页
用VB进行串口实时数据采集.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用VB进行串口实时数据采集VB-界面速成通道 /ChenLL发表于2007-08-10, 20:28 用VB进行串口实时数据采集 本文介绍VB6.0利用MSComm通信控件,开发微机通过串口对工业仪表进行实时数据采集的编程技术。给出的程序代码具有通用性,并有详细的注释,可以直接或稍加改动后用于其他数据采集或实时控制程序中。 -一台工业专用实时检测仪表,接高精度位移传感器,用于测量微小形变或微量位移,仪表测量精度为0.01毫米,测量范围最大值为50毫米。该仪表带有一个9针的RS-232C 串口,能与微机进行串口数据通信,实时传送检测数据,通过微机软件处理可实现工业实时监控。 -该仪表的串口数据通信协议是:数据传输速率为 9600bps,1位开始位,8位数据位,1位停止位,无奇偶校验位。仪表每秒发送50帧检测数据,每帧数据由4个字节组成。第一个字节定义为二进制常数0F0H,是每帧数据开始的标志字节;后面连续2个字节为数据字节,采用压缩的BCD码编码方式,高位在前,低位在后,即一个字节表示两位十进制数,则两个字节表示四位十进制数,小数点采用固定形式,定义在两字节中间;第四个字节为符号字节,该字节第八位为1,即: 1 x x x x x x x 则为负数;第八位为0,即: 0 x x x x x x x 则为正数。 -例如:0F0H 26H 87H 80H 0F0H 34H 62H 00H 表示 26.87 34.62。 -通信传输速率为9600bps,则最快速度1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均5.0ms 发送一个字节,连续读取串口数据时要在程序中添加循环等待程序。 -为了实现实时监测功能,接收数据的读取要尽可能的快速,则设置MSComm1的属性如下: RThreshold = 1 接收缓冲区收到一个字节产生OnComm事件 InputLen = 1 每次读取一个字节-仪表每秒发送50帧数据,微机收到一帧完整数据至少需要20 ms时间,然后再进行数据处理。如果微机在下一帧数据接收前即20ms内能将数据计算处理完毕,则接收缓冲区内只会保存有一帧数据,不会存有两帧以上数据,接收缓冲区的大小不会影响实时监测效果(接收缓冲区4字节),这时完全可以实现实时监测或实时控制;如果微机在20ms内不能将数据计算处理完毕,接收缓冲区设置得又很大,在数据计算处理完毕前,接收缓冲区内就会保存有两帧以上数据,而且一次工作时间越长,缓冲区内滞留数据帧就越多,数据采集和数据处理之间产生逐渐增大的额外时间差,当接收缓冲区充满后,时间差不再增大,固定在某一值,部分数据因不能及时采集到接收缓冲区中,数据产生丢失现象,真实工作情况就会和微机处理结果产生较大的时间差,对实时监测和实时控制很不利,这种情况下接收缓冲区的大小就会影响实时监测效果,所以接收缓冲区设置不能过大,以保证数据处理的实时性。 -设置接收数据模式采用二进制形式,即 InputMode=comInputModeBinary,但用Input属性读取数据时,不能直接赋值给 Byte 类型变量,只能通过先赋值给一个 Variant 类型变量,返回一个二进制数据的数组,再转换保存到Byte类型数变量中。 -VB中有Byte类型变量,但没有字节的位处理语句,符号字节的位处理要判断符号字节的值是否大于 127,大于127则为负数;压缩的BCD码存入 Byte类型变量,VB系统只按十进制数处理,这要通过一个简单算法换算,解压BCD码才能还原成十进制表示数值。假如a是Byte类型变量,D是Single类型变量,将一个压缩的BCD 码存入a中,则算法是: D=(a16)10 a(a16)16 则D=a(a16)6-程序清单: -在通用声明中定义程序所用变量: Dim ab(4) As Byte 字节数据类型数组,用来存储接收到的一组字节数据 Dim av As Variant 用来从接收缓冲区读取数据 Dim i As Integer Dim j As Integer Dim w As Integer 接收数据个数计数器 Dim b1 As Single Dim b2 As Single Dim WW As Single 十进制检测值 Dim MaxW As Single 最大值 Dim MinW As Single 最小值-在窗体中添加名为Command1的开始按钮和名为 MSComm1的MSComm控件。 - 开始按钮的Click事件处理程序主要是对MSComm1控制的参数初始化设置,程序中大部分参数在设计时可在MSComm1控制的属性窗口中设置: Private Sub Command1_Click() 开始按钮 With MSComm1 .CommPort=2 使用COM2 .Setting=“9600,N,8,1 设置通信口参数 .InBufferSize=40 设置MSComm1接收缓冲区为40字节 .OutBufferSize=2 设置MSComm1发送缓冲区为2字节 .InputMode = comInputModeBinary 设置接收数据模式为二进制形式 .InputLen = 1 设置Input 一次从接收缓冲读取字节数为1 .SThreshold = 1 设置Output 一次从发送缓冲读取字节数为1 .InBufferCount = 0 清除接收缓冲区 .OutBufferCount = 0 清除发送缓冲区 MaxW = 99 最大值赋初值 MinW = 99 最小值赋初值 w = 0 数据个数计数器清零 .RThreshold = 1 设置接收一个字节产生OnComm事件 If .PortOpen = False Then 判断通信口是否打开 .PortOpen = True 打开通信口 If Err Then 错误处理 MsgBox “串口通信无效 Exit Sub End If End If End WithEnd Sub-为了达到实时数据采集目的,实时数据采集处理程序采用MSComm事件驱动方式。 -MSComm1_OnComm的事件处理程序只处理 comEvReceive事件,首先判断帧数据的开始字节,关闭OnComm接收事件,然后接收数据字节,将压缩BCD进行还原转换,再接收符号字节,判断数据符号,判断数据最大最小值,最后打开OnComm接收事件,等待下一次OnComm事件产生: Private Sub MSComm1_OnComm() With MSComm1Select Case .CommEvent 判断MSComm1通信事件 Case comEvReceive 收到Rthreshold个字节产生的接收事件 av = .Input 读取一个接收字节 ab(1) = av(0) 转换保存到字节数据类型数组 If ab(1) = HF0 Then 判断是否为数据开始标志 RThreshold = 0 关闭OnComm事件接收 Do DoEvents Loop Until .InBufferCount = 3 循环等待MSComm1接收缓冲区=3个字节 w = w 1 计数器累加计数 av = .Input 读取第二个数据字节(BCD码高位字节) ab(2) = av(0) 转换保存到字节数据类型数组 av = .Input 读取第三个数据字节(BCD码低位字节) ab(3) = av(0) 转换保存到字节数据类型数组 av = .Input 读取第四个数据字节(符号位字节) ab(4) = av(0) 转换保存到字节数据类型数组 b1 = ab(2) 6 (ab(2)16) 高位字节压缩BCD码转换为实数 b2 = ab(3) 6 (ab(3)16) 低位字节压缩BCD码转换为实数 WW = b1 b2 / 100 数值组合,标定小数点 If ab(4) 127 Then WW=WW 判断数据符号位 Label1(0) = Format(WW, “0.00) 显示毫米单位数值,2位小数 Label1(1) =Format(WW /25.4, “0.000) 显示英寸单位数值,3位小数 If WW MaxW And WW 51 Then-判断最大值,仪表在刚开始工作时有干扰,会传导一些乱码,位移传感器有参数偏差,最大值一般都略大于50毫米,所以取51为极限最大值,取51为极限最小值。 MaxW = WW Label1(2) = Format(MaxW, “0.00) 显示毫米单位最大值,2位小数 Label1(3) = Format(MaxW/25.4,“0.000) 显示英寸单位最大值,3位小数 End If If WW 51 Then 判断最小值 MinW = WW Label1(4) = Format(MinW, “0.00) 显示毫米单位最小值,2位小数 Label1(5) = Format(MinW/25.4,“0.000) 显示英寸单位最小值,3位小数 End If .RThreshold = 1 打开MSComm1事件接收 End If Case Else End Select End WithEnd Sub 基于VB的串口数据采集 来源:机电论文 | 类别:技术 | 时间:2008-6-21 14:44:00 字体:大 中 小要求:用VB编写一个小软件,采集电子数显千分表的数据数显表接口参数:数显表的专用接口可与PC机的RS232(9针)相接,其波特率4800,无奇偶校检,8位数据位,1位停止位,以AcsII码发送数据窗体设计:1个listbox,1个textbox,1个MSComm控件,2个CommandButton程序设计:Dim indata As VariantDim data(100) As SinglePrivate Sub Command1_Click()Static ii = i + 1data(i) = Text1.TextList1.AddItem data(i)End Sub .按键一次,采集一个数据,并存入List1中Private Sub Command2_Click()MSComm1.PortOpen = False.关端口Unload MeEnd Sub .退出Private Sub Form_Load()MSComm1.CommPort = 1 .使用Com1口MSComm1.Settings = 4800,n,8,1.设置通讯参数MSComm1.RThreshold = 10MSComm1.streshold = 10MSComm1.PortOpen = True .打开串口Text1.Text = End SubPrivate Sub MSComm1_OnComm()Select Case MSComm1.CommEventCase comEvReceive .有接收事件发生indata = MSComm1.InputText2.Text = (indata / 10) text1实时显示数显表的数据MSComm1.InBufferCount = 0 .清空输入寄存器End SelectEnd Sub我这有一段VB程序是为了画实时采集曲线的。 软件编程我不行,如果大家有看得懂得,请帮我看看。 程序不多 Private Sub MSComm1_OnComm() Dim Inbyte() As Byte Dim buffer As String Dim datatemp(1000) As Single If num 199 Then Call renew 刷新绘图区 读取仪表返回数据串 Select Case MSComm1.CommEvent Case comEvReceive Inbyte = MSComm1.Input 这地方看不懂,数组可以这样赋值吗? For i = LBound(Inbyte) To UBound(Inbyte) buffer = buffer + Hex(Inbyte(i) + Chr(32) for语句也没看懂,尤其是buffer这赋的是什么值? Next i Case comEvSend End Select 获取十进制测量数据 这下面的又是没看懂,应该是将十六进制转换为十进制,怎么转换的呢? If Len(Trim(Mid(buffer, 1, 2) = 1 Then datatemp(num) = Val( &H & Mid(buffer, 3, 2) & Str( 0 ) & Mid(buffer, 1, 2) * 0.01 Else datatemp(num) = Val( &H & Mid(buffer, 3, 2) & Mid(buffer, 1, 2) * 0.01 End If 绘制曲线 Private Sub draw() Picture1.Cls Picture1.DrawWidth = 2 Picture1.BackColor = QBColor(7) 下面的程序我看不懂,用的是什么原理画的曲线呢? Picture1.Scale (0, 50)-(200, 0) For i = 1 To num - 1 X1 = (i - 1): Y1 = datatemp(i - 1) X2 = i: Y2 = datatemp(i) Picture1.Line (X1, Y1)-(X2, Y2), QBColor(1) Next i End Sub 问题点数:100回复次数:10 修改 删除 举报 引用 回复 加为好友 发送私信 在线聊天 CathySun118 等级: 可用分等级:富农 总技术分:88266 总技术分排名:66 2发表于:2007-06-25 14:44:411楼得分:0连点法阿修改 删除 举报 引用 回复 加为好友 发送私信 在线聊天 Winters_lee 等级: 可用分等级:中农 总技术分:1658 总技术分排名:12870 发表于:2007-06-26 09:41:372楼得分:0画曲线啊,用这个吧: 实时曲线左移函数,定义在模块中 Public Declare Function BitBlt Lib gdi32 (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long 建立一个类,作为画实时曲线 Option Explicit Public pCurveNUM As Integer Public pCurveName As String Public pCurveMax As Double Public pCurvemin As Double Private pricCurve As PictureBox Private priCurvePoint(6) As Integer Private priCurveData(6) As Double Private priDrawY0(6) As Double Private priDrawY1(6) As Double Private priDrawNMinute As Integer Private priDrawTMinute As Integer Private WithEvents priTimerDraw As Timer Public Property Let ltDrawTimer(ByRef lTimer As Timer) Set priTimerDraw = lTimer End Property Public Property Let ltGiveCurveData(ByVal lDataPoint As Variant) Dim i% For i = 1 To pCurveNUM priCurvePoint(i) = CInt(lDataPoint(i) Next End Property Public Property Let ltGetPicture(ByRef lDrawPicBox As PictureBox) Set pricCurve = lDrawPicBox End Property Private Sub sDrawTheRealTimeCurve() Dim ypixels, xpixels, i% Dim ShowMode As Long, ii As Long, tm As String, hBmp As Long pricCurve.DrawWidth = 1 hBmp = pricCurve.hDC ShowMode = &HCC0020 ii = BitBlt(hBmp, 0, 0, pricCurve.ScaleWidth - 1, pricCurve.ScaleHeight - 1, hBmp, 1, 0, ShowMode) Dim T As Integer T = Minute(Now() priDrawNMinute = T If priDrawNMinute priDrawTMinute Then pricCurve.CurrentX = pricCurve.ScaleWidth - 19 pricCurve.CurrentY = pricCurve.ScaleHeight - 11 pricCurve.Print priDrawNMinute End If priDrawTMinute = priDrawNMinute pricCurve.ScaleMode = vbPixels ypixels = pricCurve.ScaleHeight - 1 xpixels = pricCurve.ScaleWidth - 1 For 1 to 6 curves If pCurveNUM 6 Or pCurveNUM 1 Then pricCurve.Line (xpixels - 1, priDrawY0(2)-(xpixels - 1, priDrawY1(2), vbWhite If pCurveNUM 2 Then pricCurve.Line (xpixels - 1, priDrawY0(3)-(xpixels - 1, priDrawY1(3), vbGreen If pCurveNUM 3 Then pricCurve.Line (xpixels - 1, priDrawY0(4)-(xpixels - 1, priDrawY1(4), spColor(3).FillColor If pCurveNUM 4 Then pricCurve.Line (xpixels - 1, priDrawY0(5)-(xpixels - 1, priDrawY1(5), spColor(4).FillColor If pCurveNUM 5 Then pricCurve.Line (xpixels - 1, priDrawY0(6)-(xpixels - 1, priDrawY1(6), spColor(5).FillColor For i = 1 To 6 priDrawY0(i) = priDrawY1(i) Next End Sub Public Sub clsInit() Dim i% For i = 1 To 6 priDrawY0(i) = pricCurve.Height priDrawY1(i) = pricCurve.Height Next priTimerDraw.Interval = 1000 priTimerDraw.Enabled = True End Sub Private Sub priTimerDraw_Timer() Dim i% For i = 1 To pCurveNUM priCurveData(i) = gRealTimeData(priCurvePoint(i) Next Call sDrawTheRealTimeCurve End Sub 刷新速度可以调整定时器的时间间隔得到,画出来的效果和Windows任务管理器中的那个CPU工作曲线一样。修改 删除 举报 引用 回复 加为好友 发送私信 在线聊天 Winters_lee 等级: 可用分等级:中农 总技术分:1658 总技术分排名:12870 发表于:2007-06-26 09:45:303楼得分:0方法就是,先初始化PictureBox控件,然后记住本次的坐标点,下次的坐标点和前一次的连线,然后曲线左移,在曲线最下面写上时间,就OK了。实时曲线诞生!修改 删除 举报 引用 回复 加为好友 发送私信 在线聊天 Winters_lee 等级: 可用分等级:中农 总技术分:1658 总技术分排名:12870 发表于:2007-06-26 10:14:164楼得分:0Inbyte = MSComm1.Input 这地方看不懂,数组可以这样赋值吗? /可以,因为MScomm的属性之前应该是设置成数组形式接收的,如果设置为字符串接收的话就得用String变量接收了。 buffer = buffer + Hex(Inbyte(i) + Chr(32) for语句也没看懂,尤其是buffer这赋的是什么值? /接收完整的信息,一直接收,然后每次用Chr$(32)这个换行符格开。 这下面的又是没看懂,应该是将十六进制转换为十进制,怎么转换的呢? /16进制的表示就是行如: &HXXXX ,其中&H是必须的,表示16进制,后面的XXXX为16进制值,所以使用Val,Clng,Cint等强制转换都可以直接将其转换。 修改 删除 举报 引用 回复 加为好友 发送私信 在线聊天 hongmosuyier 等级: 可用分等级:长工 总技术分:472 总技术分排名:34749 发表于:2007-06-26 13:23:505楼得分:0Visual Graph是一套强大的交互图形开发平台,她能非常方便地建造基于图形的界面、制作各种图形元件、实现图形管理、图形建模、制作监控系统、表单系统、绘图系统、流程设计、CAD软件等。她提供功能非常强大的ActiveX控件,和其他流行的编程语言共同工作,极大地弥补了这些语言在图形处理方面的不足。也可以嵌入IE浏览器中,实现网上图形编辑和控制等。基于串口通信的远程自动抄表系统实现 作 者:王 鹏摘 要:对远程抄表系统的方案、系统的组成、硬件的配置、软件设计、工作原理、功能以及技术性能进行了论述。该系统通过下位机(MCU)和无线收发模块(PTR2000)采集、整理数据,通过串口经MODEM模块与上位机通信,水、电、气公司通过上位机(PC机)收集数据,实现远程无线自动抄表的功能。 引言在人们的日常生活中,水、电、气是不可缺少的必备生活保障,然而对于水、电、气供应公司来说,每个月上门抄取各个用户的三表读数却是非常繁重的工作,需要投入大量的人力和物力。现在许多公司在研究自动抄表系统,但是他们通常采用电话线或者是专线完成与上位机的通讯,成本比较高。详见参考资料367。针对这种情况,作者设计了一种远程无线自动抄表系统。自动抄表系统,简称ARMS(Automatic Reading Meter System),是供应水、电、气的部门将安装在用户处的水、电、气表所记录的用量等数据通过遥测、传输和计算机系统汇总到营业部门,代替人工抄表及一连串后续工作的系统。该系统的无线通信是采用GSM短消息业务,它的实现是迈向家庭自动化的第一步,并有助于提高水电系统管理的现代化水平。该系统具有两个主要特点:其一系统数据采集点多,成千上万,数据量大;其二系统是一个覆盖面很广的通信网络,采集点具有分散性。对系统的要求,一方面应造价低、经济实惠,另一方面数据的采集要准确及时,又要有一定的环境适应能力和抗干扰能力。随着现代化电子技术的发展,通信技术和计算机技术都有了飞速发展,而两者的结合又进一步演化出许多新的通信方式和通信系统,为ARMS的实现提供了可能。这样可避免抄表员上门抄表带来的弊端,省却了上门抄表打扰用户的尴尬问题,对公司、用户都有很大的便利,具有良好的市场前景。特别是在大中城市里,该系统具有很广的推广价值。1系统的组成及工作原理系统组成:数据采集部分;数据发送、无线通信部分;数据接收、处理部分。工作原理:数据采集装置首先通过传感器采集三表的读数,将采集的数据存入单片机(AT89C2051)内;单片机再通过无线通讯模块PTR2000(发端)将数据发送,用户集中器的PTR2000(收端)将发送来的数据接收,下位机主要完成采集数据、分时存储和同上位机通信的功能,它通过串行接口与GSM/Modem联接,以公众网(GSM)为平台,通过电信公众网络传输数据。随着GSM移动通信网络的建设和发展,移动通信网日益庞大复杂,所覆盖地区也日益广泛。因而通过GSM移动通信网络进行数据的传输也成为了一种新式的数据传输手段。GSM/Modem通过GSM的短消息业务发送数据。PC机(上位机)一般设在公司的营业处,它是负责整个系统管理的,它将数据收集到,然后对接收的数据整理、存储、显示,并计算出各用户需缴纳的费用。还可以将用户的用量曲线打印出来,对实行季节电价、分时电价,用经济杠杆实现削峰填谷很有利,可以为国家节约能源。系统的组成结构原理图如图1:图1 系统的组成结构原理图(点击可看图) 经济分析:本系统的最大容量设计为1000家。规定每100ms采集一家的数据,则一分钟可以采集600家的数据。普通的电表是2400转/KWH,采集装置每采集20个脉冲记1个点。每十分钟采集的数据最多占1个字节,每家的用量数据是按增量采集的,三个表的增量最多占3个字节,所以600家的数据最多占2K字节,每分钟采集一轮,采集到的数据存储在AT89C51的RAM内,在存储器内整理、打包,每十分钟发送一次。由于夜晚用电水气量比较少,所以在晚上发送的数据包,很多是空包,这样就浪费占用通信信道的时间。因此在软件设计时,采用越限发送,即每次采集的数据必须超越一定的量才发送,一天最多12小时的用量高峰期是每十分钟发送一次的。基于GSM短消息业务的容量主要是由短消息服务中心的处理能力和无线信令信道的承载能力决定的,每个短消息的信息量限制为140个八位组(7比特编码,160个字符)不超过140个字节。每十分钟采集3K数据,需要发送22条短消息,则每月发送约5万条。按照西安市短信费用标准,2-5万条/月的费用是2000元/月。平均每家2元/月。因此该系统非常的经济。而且上位机每十分钟就收集一次的数据,这样就可以在一天里用电高峰期里及时采集用户的用量,并将用量曲线打印出来。 2.硬件配置2.1数据采集、发送部分水表是将原水表计数齿轮指针换装成带磁性的指针,再通过传感器进行数据采集;气表要用带信号输出的气表;电表必须采用脉冲式电子电度表,电表脉冲输出的器件为光耦输出,具有较好的隔离作用。数据采集装置与用户的电表安装在一起,为了防止用户的突然断电,采集装置必须装在空气开关的前端。电表可以通过计数脉冲来测量,由光电采集头采集电表的计数脉冲,表盘转一圈,光电采集头发出一个脉冲,输入的P1口的P1.0,由AT89C2051存储。然后通过PTR2000模块发送数据。PTR2000模块乃是超小型、超低功耗、高速率19.2K无线收发数传MODEM。采用了当代最先进的欧洲蓝牙技术应用全数字科技,由单IC组合而成,接收发射合一,工作频段为433-434MHz,空中传输数据速率为19.2Kbps,工作电压范围为2.7V-5.25V,采用FSK调制,抗干扰能力强,标准的DIP引脚间距,更适合嵌入式设备。当PTR2000的TXEN脚为高时,它处于发射状态;当TXEN脚为低时,它处于接收状态。在硬件设计时,将TXEN与AT89C2051的P1.1脚连接,通过软件控制PTR2000的状态。电路原理图如图2。 图2 数据采集、发送装置电路原理图 (点击可看图)2.2 数据接收和远程无线通讯PTR2000将数据接收并且存入AT89C51内,ROM和RAM分别用来存储程序和数据,数据按当时的时间存入相应时段的存储区内,时段间隔为10分钟。不同日期的同一时段数据仅在相应的存储区内累加。采集装置内装有免维护电源,保证断电后还可以工作,保护数据和接收、执行上位机的命令。AT89C51通过串口与无线MODEM连接,实现与上位机的无线通讯。GSM(Global System for Mobile Communication)系统是目前基于时分多址技术的移动通信体制中最成熟、最完善、应用最广的一种系统。我国目前已建成了覆盖全国的GSM数字蜂窝移动通信网,是我国公众陆地移动通信网的主要方式。GSM的短消息业务SMS(Short Message Service)与话音传输及传真一样同为GSM数字蜂窝移动通信网络提供的主要电信业务,它通过无线控制信道进行传输,是GSM通信网所特有的,经短消息业务中心完成存储和前转功能,它不用拨号建立连接,直接把要发的信息加上目的地址发送到短消息服务中心,由短消息服务中心再发送给最终的信宿。这适于把每次采集到的数据随时发送到监控中心。传送短消息业务的控制信道为专用控制信道(DCCH)。详见参考资料6。短消息业务可以使网络端知道被叫方是否已经收到短消息,如果传送失败,被叫方没有回答确切消息,网络一侧会保留所传的消息,一旦网络发现被叫方能被叫通时,消息能被重发以确保被叫方能收到。因此短消息业务作为GSM网络的一种主要的电信业务,它的传递是可靠的。综上所述,本系统选用GSM的短消息业务来实现远程无线数据传送是可行的。GSM调制解调器(GSM/MODEM)的出现改变了传统的以话音为主的通信手段,打开了GSM网络数据通信及其应用的大门。它提供RS232数据接口,采用AT贺氏指令,符合ETSI标准GSM0707和GSM0705。本系统的GSM/MODEM采用法国WAVECOM公司的GSM/MODEM模块。详见参考资料5电路原理图如图3图3 数据接收、无线通讯电路原理图2.3 数据处理部分 上位机通过DDE接口将下位机发送的数据传送到EXCEL工作表中,在EXCEL中定义好报表格式,计量格式,并将文件以模板格式保存,在抄表完成后,系统能自动将数据填写到相应指定单元格,由EXCEL自动计算,换算成KWH值并算出收费值。在上位机上打印、显示用户的水、电、气费和各种报表及负荷曲线,当用户负荷超限时发出报警信号,根据公司的规定决定是否发遥控命令给下位机对用户实行断电处理。还可以计算各个时段的费用,为电力部门实行分时收费提供可靠的保证。而且为了保证数据存储的安全性,上位机(PC机)采用了双硬盘做数据备份,系统带有后备电源,停电后能保持正常工作状态。后备电源可保证系统在满负荷工作状态下正常工作36小时以上,若停电时间更长,系统将不会进行数据采集,但原有数据不会丢失,供电恢复后需要重新核查数据,更新设置用户集中器中下位机存储的数据。3.软件设计由于该系统采用的是一点对多点的双向数据传输,因此每家的表都有自己的地址码。上位机可以查询下位机,下位机也可以定时发送数据给上位机。本系统要实现的目的是一机(上位机)对多机(下位机)的通讯控制,其通讯软件主要分为两部分:上位机与下位机的远程通讯软件;单片机与GSM/MODEM的串行通讯软件。详见参考资料2。程序设计的关键是上、下位机间的远程通讯的准确性。在程序设计中,采用通讯协议(Protocol)的做法,由上位机发出读表指令与地址码,让各个下位机将记录的数据传过来,同时进行校验,以保证数据的正确

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论