用VB进行串口实时波形显示_第1页
用VB进行串口实时波形显示_第2页
用VB进行串口实时波形显示_第3页
用VB进行串口实时波形显示_第4页
用VB进行串口实时波形显示_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、2.2 数据接收和远程无线通讯PTR2OO0各数据接收并且存入AT89C51内,ROM和RAM分别用来存储程序和 数据,数据按当时的时间存入相应时段的存储区内,时段间隔为 1 0分钟。不同 日期的同一时段数据仅在相应的存储区内累加。采集装置内装有免维护电源, 保证断电后还可以工作,保护数据和接收、执行上位机的命令。AT89C51通过串 口与无线MODE连接,实现与上位机的无线通讯。GSM( Global System for Mobile Commu ni catio n)系统是目前基于时分多址技术的移动通信体制中最成熟、最完善、应用最广的一种系统。我国目前已 建成了覆盖全国的GSh数字蜂窝移

2、动通信网,是我国公众陆地移动通信网的主 要方式。GSM的短消息业务SMS(Short Message Service)与话音传输及传真一 样同为GSM数字蜂窝移动通信网络提供的主要电信业务,它通过无线控制信道 进行传输,是GSMS信网所特有的,经短消息业务中心完成存储和前转功能, 它不用拨号建立连接,直接把要发的信息加上目的地址发送到短消息服务中心, 由短消息服务中心再发送给最终的信宿。这适于把每次采集到的数据随时发送 到监控中心。传送短消息业务的控制信道为专用控制信道(DCCH。详见参考资料6 。短消息业务可以使网络端知道被叫方是否已经收到短消息,如果传送 失败,被叫方没有回答确切消息,网络

3、一侧会保留所传的消息,一旦网络发现 被叫方能被叫通时,消息能被重发以确保被叫方能收到。因此短消息业务作为 GS嗣络的一种主要的电信业务,它的传递是可靠的。综上所述,本系统选用 GSM勺短消息业务来实现远程无线数据传送是可行的。GSMH制解调器(GSM/MODEIM勺出现改变了传统的以话音为主的通信手段,打开了GSM网络数据通信及其应用的大门。它提供 RS232数据接口,采用AT贺氏指令,符合ETSI 标准 GSM070和 GSM0705 本系统的 GSM/MODE采用法国 WAVECO公司的 GSM/MODE模块。详见参考资料 电路原理图如图3图 3 数据接收、无线通讯电路原理图2.3 数据处

4、理部分上位机通过DDE接口将下位机发送的数据传送到 EXCEL工作表中,在EXCEL 中定义好报表格式,计量格式,并将文件以模板格式保存,在抄表完成后,系 统能自动将数据填写到相应指定单元格,由EXCEL!动计算,换算成KWH值并算出收费值。在上位机上打印、显示用户的水、电、气费和各种报表及负荷曲 线,当用户负荷超限时发出报警信号,根据公司的规定决定是否发遥控命令给 下位机对用户实行断电处理。还可以计算各个时段的费用,为电力部门实行分 时收费提供可靠的保证。而且为了保证数据存储的安全性,上位机(PC机)采用了双硬盘做数据备份,系统带有后备电源,停电后能保持正常工作状态。后 备电源可保证系统在满

5、负荷工作状态下正常工作 36 小时以上,若停电时间更长, 系统将不会进行数据采集,但原有数据不会丢失,供电恢复后需要重新核查数据,更新设置用户集中器中下位机存储的数据。3.软件设计由于该系统采用的是一点对多点的双向数据传输,因此每家的表都有自己 的地址码。上位机可以查询下位机,下位机也可以定时发送数据给上位机。本 系统要实现的目的是一机(上位机)对多机 (下位机)的通讯控制,其通讯软件主 要分为两部分:上位机与下位机的远程通讯软件;单片机与GSM/MODEM串行通讯软件。详见参考资料2。程序设计的关键是上、下位机间的远程通讯的准 确性。在程序设计中,采用通讯协议(Protocol )的做法,由

6、上位机发出读表 指令与地址码,让各个下位机将记录的数据传过来,同时进行校验,以保证数 据的正确性。每个下位机都编有不同的地址码,当上位机向所有的下位机发送 一个地址码和抄表指令时,所有的下位机都接收到该地址码,并比较是否与其 自身的地址码相同,如不相同则退出比较,不再接收其他命令。如相同则表示 上位机查询的就是该下位机,同时收回应答信号,并准备接收命令,而上位机 将收回的应答信号与发出的地址码相比较,不同则给出错误的信息,相同则可 控制已叫通的下位机。这时已叫通的下位机继续接收上位机发送的抄表命令, 并收集用户的数据,通过 GSM络发送给上位机,直到接收到上位机发来的执 行完成命令。程序流程图

7、见图 4、图5。图四:上位机数据通讯程序流程图图五:上位机数据通讯程序流程图用VB进行串口实时数据采集VB-界面速成通道 /ChenLL 发表于2007-08-10,20:28用VB进行串口实时数据采集本文介绍 VB6.0 利用MSComm 通信控件,开发微机通过串口对工业仪表进行实时 数据采集的编程技术。给出的程序代码具有通用性,并有详细的注释,可以直接或稍 加改动后用于其他数据采集或实时控制程序中。台工业专用实时检测仪表,接高精度位移传感器,用于测量微小形变或微量位该仪表带有一个9针测数据,通过微机软移,仪表测量精度为0.01毫米,测量范围最大值为50毫米。的RS-232C 串口,能与微

8、机进行串口数据通信,实时传送检 件处理可实现工业实时监控。-该仪表的串口数据通信协议是:数据传输速率为 数据位,1位停止位,无奇偶校验位。仪表每秒发送 个字节组成。第一个字节定义为二进制常数0F0H9600bps50帧检测数据,每帧数据 是每帧数据开始的标志字节;后,1位开始位,8位由4面连续2个字节为数据字节,采用压缩的BCD码编码方式,高位在前,低位在后,即一个字节表示两位十进制数,则两个字节表示四位十进制数,小数点采用固定形式,定义在两字节中间;第四个字节为符号字节,该字节第八位为1,即:1 x x x xxxx 则为负数;第八位为0,即: 0XXXXXXX则为正数。-例如:0F0H 2

9、6H87H80H 0F0H 34H62H00H 表示26.8734.62。-通信传输速率为9600bps,则最快速度 1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均 5.0ms 发送一个字节,连续读取串口数据时要在程序中添加循环等待程序。-为了实现实时监测功能,接收数据的读取要尽可能的快速,则设置MSComml的属性如下:RThreshold =1接收缓冲区收到一个字节产生On Comm事件In putLe n= 1每次读取一个字节-仪表每秒发送 50帧数据,微机收到一帧完整数据至少需要20 ms时间,然后再进行数据处理。如果微机在下一帧数据

10、接收前即20ms内能将数据计算处理完毕,则接收缓冲区内只会保存有一帧数据,不会存有两帧以上数据,接收缓冲区的大小不 会影响实时监测效果(接收缓冲区4字节),这时完全可以实现实时监测或实时控制; 如果微机在20ms内不能将数据计算处理完毕,接收缓冲区设置得又很大,在数据计算处理完毕前,接收缓冲区内就会保存有两帧以上数据,而且一次工作时间越长, 缓冲区内滞留数据帧就越多,数据采集和数据处理之间产生逐渐增大的额外时间差, 当接收缓冲区充满后,时间差不再增大,固定在某一值,部分数据因不能及时采集到 接收缓冲区中,数据产生丢失现象,真实工作情况就会和微机处理结果产生较大的时 间差,对实时监测和实时控制很

11、不利,这种情况下接收缓冲区的大小就会影响实时监 测效果,所以接收缓冲区设置不能过大,以保证数据处理的实时性。-设置接收数据模式采用二进制形式,即InputMode=comInputModeBinary,但用In put属性读取数据时,不能直接赋值给Byte 类型变量,只能通过先赋值给一个 Varia nt类型变量,返回一个二进制数据的数组,再转换保存到Byte 类型数变量中。_-_VB 中有Byte 类型变量,但没有字节的位处理语句,符号字节的位处理要判断 符号字节的值是否大于127,大于127则为负数;压缩的 BCD码存入 Byte 类型变量,VB系统只按十进制数处理,这要通过一个简单算法换

12、算,解压BCD码才能还原成十进制表示数值。假如a是Byte类型变量,D是Single类型变量,将一个压缩的BCD 码存入a中,则算法是:D=(a16)* 10+ a (a16)* 16则 D=a (a16)* 6程序清单:-在通用声明中定义程序所用变量:Dim ab(4) As Byte字节数据类型数组,用来存储接收到的一组字节数据Dimav As Variant用来从接收缓冲区读取数据Dimi As IntegerDimj As IntegerDimw As Integer接收数据个数计数器Dimb1 As Si ngleDimb2 As Si ngleDimWW As Si ngle十进制

13、检测值DimMaxW As Si ngle最大值DimMi nW As Si ngle最小值在窗体中添加名为Comma nd1的开始按钮和名为MSComm1的 MSComm 控件。-开始按钮的Click事件处理程序主要是对MSComm1控制的参数初始化设置,程序中大部分参数在设计时可在MSComm1控制的属性窗口中设置:Iick()Private Sub Comma nd1_C开始按钮With MSComm1 .CommPort=2 .Setting=“ 9600,N,8,1".In BufferSize=40 设置 MSComm1.OutBufferSize=2 设置 MSComm

14、1使用COM2设置通信口参数接收缓冲区为40字节2字节.In putMode设置接收数据模式为二进制形式发送缓冲区为comln putModeB inaryn putLe n= 1设置In put一次从接收缓冲读取字节数为.SThreshold =1设置Output次从发送缓冲读取字节数为清除接收缓冲区清除发送缓冲区.In BufferCou nt= 0.OutBufferCou ntMaxW = 99最大值赋初值最小值赋初值MinW =99w =0数据个数计数器清零.RThreshold = 1 设置接收一个字节产生If .PortOpe n= False判断通信口是否打开.PortOpe

15、n= TrueIf Err The nMsgBox"串口通信无效Exit SubEnd IfEnd IfOn Comm 事件The n打开通信口错误处理IIEnd WithEnd Sub-为了达到实时数据采集目的, 方式。实时数据采集处理程序采用MSComm事件驱动MSComm1_ On Comm判断帧数据的开始字节,关闭D进行还原转换,再接收符号字节,判断数据符On Comm的事件处理程序只处理On CommcomEvReceive 事件,首先 接收事件,然后接收数据字节,将压缩BC号,判断数据最大最小值,最后打开PrivateWith接收事件,等待下一次On Comm事件产生:S

16、ub MSComm1 _On Comm()MSComm1SelectCase .CommEve nt 判断MSComm1通信事件C ase comEvReceive收到Rthreshold个字节产生的接收事件av =n put读取一个接收字节ab(1)=av(0)转换保存到字节数据类型数组If ab(1)=& HFO Then判断是否为数据开始标志RThreshold = 0关闭On Comm事件接收DoDoEve nts>=3Loop Un til .In BufferCou nt循环等待 MSComm1w = w +1av =n put读取第二个数据字节接收缓冲区>=3

17、 个字节计数器累加计数BC D码高位字节)ab(2)=av(0)转换保存到字节数据类型数组av =n put读取第三个数据字节(BC D码低位字节)ab(3)=av(0)转换保存到字节数据类型数组av =n put读取第四个数据字节(符号位字节)ab(4)=av(0)转换保存到字节数据类型数组b1= ab(2)高位字节压缩b2 = ab(3)低位字节压缩WW = b1-6* (ab(2)16)BCD码转换为实数-6* (ab(3)16)BCD码转换为实数+ b2 /100数值组合,标定小数点If ab(4)> 127 The nWW=判断数据符号位Label1(0) = Format(W

18、W,“ 0.00")显示毫米单位数值,2位小数Label1(1) =Format(WW/25.4,'0.OOO")显示英寸单位数值, 3位小数If WW > MaxW And WW <51 The n-判断最大值,仪表在刚开始工作时有干扰,会传导一些乱码,位移传感器有参数偏差,最大值一般都略大于50毫米,所以取 51为极限最大值,取51为极限最小值。WWMaxWLabel1(2) = Format(MaxW,“ 0.00")显示毫米单位最大值,2位小数Label1(3) = Format(MaxW/25.4, “ 0.000")显示英

19、寸单位最大值,3位小数End IfIf WW < Mi nW And WW > 51 Then判断最小值Mi nW = WWLabel1(4) = Format(MinW,“ 0.00")显示毫米单位最小值,2位小数Label1(5) = Format(MinW/25.4,“ 0.000")显示英寸单位最小值,3位小数End If.RThreshold= 1打开MSComm1事件接收End IfCase ElseEnd SelectEnd WithEnd Sub基于VB的串口数据采集来源:机电论文 |类别:技术|时间:2008-6-21 14:44:00 字体:

20、大 中 小要求:用VB编写一个小软件,采集电子数显千分表的数据数显表接口参数:数显表的专用接口可与PC机的RS232( 9针)相接,其波特率 4800,无奇偶校检,8位数据位,1位停止位,以 Acsll码发送数据窗体设计:1 个 listbox,1 个 textbox, 1 个 MSComm 控件,2 个 CommandButton程序设计:Dim indata As V ariantDim data(100) As SinglePrivate Sub Command1_Click()Static ii = i + 1 data(i) = Text1.T extList1.AddItem da

21、ta(i)End Sub .按.键一次,采集一个数据,并存入List1 中Private Sub Command2_Click()MSComml.PortOpen = False '关端口Unload MeEnd Sub '.退出Private Sub Form_Load()MSComml.CommPort = 1 '.使用 Com1 口MSComm1.Settings = "4800,n,8,1" '. 设置通讯参数MSComm1.RThreshold = 10MSComm1.streshold = 10MSComm1.PortOpen =

22、 True '. 打开串口Text1.Text = ""End SubPrivate Sub MSComm1_OnComm()Select Case MSComm1.CommEventCase comEvReceive '.有接收事件发生indata = MSComm1.InputText2.Text = (indata / 10)'实时显示数显表的数据MSComm1.InBufferCount = 0 '. 清空输入寄存器End SelectEnd Sub我这有一段 VB 程序是为了画实时采集曲线的。软件编程我不行,如果大家有看得懂得,请帮

23、我看看。程序不多Private Sub MSComm1_OnComm()Dim Inbyte() As ByteDim buffer As StringDim datatemp(1000) As SingleIf num > 199 Then Call renew ' 刷新绘图区'读取仪表返回数据串Select Case MSComm1.CommEvent Case comEvReceiveInbyte = MSComm1.Input 'For i = LBound(Inbyte) buffer = buffer + 懂,尤其是 buffer 这赋的是什么值?Ne

24、xt iCase comEvSend这地方看不懂,数组可以这样赋值吗?To UBound(Inbyte)Hex(Inbyte(i) + Chr(32) 'for语句也没看End Select'获取十进制测量数据'这下面的又是没看懂,应该是将十六进制转换为十进制,怎么转换的呢?IfLen (T rim(Mid(buffer,1,2) =1Thendatatemp(num)=Val("&H"&Mid(buffer,3,2)&Str( "0") &Mid(buffer,1,2) *0.01Elsedata

25、temp(num)=Val("&H" &Mid(buffer,3,2) &Mid(buffer,1, 2) *0.01End If绘制曲线Private Sub draw()Picturel.CIsPicturel.DrawWidth=2Picture1.BackColor= QBColor(7)'下面的程序我看不懂,用的是什么原理画的曲线呢?问题点数:100回复次数:10显示所有回复一修改删除举报引用回复Picture1.Scale(0,50)-(200,0)Fori =1Tonum-1X1=(i-1):Y1=datatemp(i-1)X2

26、=i:Y2= datatemp(i)Picture1.Line(X1,Y1)-(X2,Y2),QBColor(1)NextiEndSub加为好友发送私信发表于:2007-06-25 14:44:411楼得分:0II连点法阿修改删除举报引用回复在线聊天CathySun118失.悟II等级:可用分等级:富农总技术分:88266总技术分排名:66楼得分:02发表于:2007-06-26 09:41:372画曲线啊,用这个吧:'实时曲线左移函数,定义在模块中PublicDeclareFunctionBitBltLib"gdi32加" (ByVaihDestDCAsLong,

27、ByValx AsLong,ByValy为AsLong,ByValnWidthAsLong,ByValnHeightAs Lo好ng.ByValhSrcDCAsLong,ByValxSrcAsLong,ByVal友ySrcAs Long,ByValdwRopAsLong)As Long发送'建立一个类,作为画实时曲线私OptionExplicit信在PublicpCurveNUMAsInteger线PublicpCurveNameAsString聊PublicpCurveMaxAsDouble天PublicpCurveminAsDoubleWintePrivatepricCurveAs

28、PictureBoxrsePrivatepriCurvePoint(6)As IntegerePrivatepriCurveData(6)AsDouble其 PrivatepriDrawY0(6)AsDoublePrivatepriDrawY1(6)AsDoublePrivatepriDrawNMinuteAs1ntegerLilPrivatepriDrawTMinuteAsInteger等PrivateWithEventspriTimerDrawAs Timer级:可PublicPropertyLetltDrawTimer(ByReflTimerAsTimer)用分等级:中SetpriTim

29、erDraw=lTimer农总EndProperty技术分:PublicPropertyLetltGiveCurveData(ByVallDataPointAs Va1658riant)总Dimi%技术分Fori =1To pCurveNUM排名priCurvePoint(i)= Clnt(IDataPoint(i)1287Next0End PropertypriDrawY0(2)-(xpixels1, priDrawY1(2),vbWhite0End PropertyPublicPropertyLetltGetPicture(ByRefreBox)SetpricCurve=lDrawPicB

30、oxEndPropertyIDrawPicBoxAs PictupriDrawY0(2)-(xpixels1, priDrawY1(2),vbWhite0End PropertypriDrawY0(2)-(xpixels1, priDrawY1(2),vbWhite0End PropertyPrivate Sub sDrawTheRealTimeCurve()ii As Long,tm As StringDimypixels,xpixels, i%DimShowMode AsLong,hBmp As LongpricCurve.DrawWidth=1hBmp = pricCurve.hDC S

31、howMode =& HCC0020priDrawY0(2)-(xpixels1, priDrawY1(2),vbWhite0End Propertyii = BitBlt(hBmp,0,0, pricCurve.ScaleWidth1, prpriDrawY0(2)-(xpixels1, priDrawY1(2),vbWhite0End PropertyicCurve.ScaleHeight-1, hBmp, 1,0, ShowMode)Dim T As IntegerT = Minute(Now() priDrawNMinute= TIf priDrawNMinute> pr

32、iDrawTMinuteThenpricCurve.CurrentX= pricCurve.ScaleWidth-19pricCurve.CurrentY= pricCurve.ScaleHeight-11pricCurve.PrintpriDrawNMinuteEnd IfpriDrawTMinute= priDrawNMinutepricCurve.ScaleMode= vbPixelsypixels = pricCurve.ScaleHeight-1xpixels = pricCurve.ScaleWidth-1'For 1 to 6 curvesIf pCurveNUM>

33、6 Or pCurveNUM <1 Then pCurveNUM =1For i1 To pCurveNUMpriDrawY1(i)CInt(ypixels(priCurveData(i)pCurvemin)/ (pCurveMaxpCurvemin)* ypixels)If priDrawY1(i)priDrawY0(i)Then priDrawY1(ipriDrawY0(2)-(xpixels1, priDrawY1(2),vbWhite0End PropertypriDrawY1(i)NextpriDrawY0(2)-(xpixels1, priDrawY1(2),vbWhite0

34、End PropertypriDrawY0(2)-(xpixels1, priDrawY1(2),vbWhite0End PropertypricCurve.Line(xpixels1, priDrawY0(1)-(xpixels1, priDrawY1(1),If pCurveNUMvbRedThen pricCurve.Line(xpixelspriDrawY0(2)-(xpixels1, priDrawY1(2),vbWhiteThenpricCurve.Line(xpixels - 11, priDrawY1(3),vbGreenThenpricCurve.Line(xpixels -

35、1,priDrawY1(4),spColor(3).FillThenpricCurve.Line(xpixels -1,priDrawY1(5),spColor(4).FillThenpricCurve.Line(xpixels -1,priDrawY1(6),spColor(5).FillIf pCurveNUM > 2 , priDrawY0(3)-(xpixels - ' If pCurveNUM > 3 1, priDrawY0(4)-(xpixels Color' If pCurveNUM > 41, priDrawY0(5)-(xpixels Co

36、lor' If pCurveNUM > 51, priDrawY0(6)-(xpixels ColorpriDrawY1(i)For i = 1 To 6 priDrawY0(i)NextEnd SubPublic Sub clsInit()Dim i%pricCurve.HeightpricCurve.Height1000TrueFor i = 1 To 6 priDrawY0(i) priDrawY1(i)NextpriTimerDraw.Interval priTimerDraw.Enabled End SubPrivate Sub priTimerDraw_Timer()

37、Dim i%For i = 1 To pCurveNUM priCurveData(i) = gRealTimeData(priCurvePoint(i) NextCall sDrawTheRealTimeCurveEnd SubWindows 任务管理器中的那刷新速度可以调整定时器的时间间隔得到,画出来的效果和 个 CPU 工作曲线一样。修改删除举报引用回复修改删除举报引用回复加为好友发表于:2007-06-26 09:45:303楼得分:0发送私信在线聊天& Winters lee其实我真的叫迪米亚路方法就是,先初始化PictureBox次的坐标点,下次的坐标点和前一次的连线,左移

38、,在曲线最下面写上时间,就0K 了。实时曲线诞生!控件,然后记住本然后曲线等级:可用分等级:中农总技术分:1658总技术分排名:12870修改删除举报引用回复修改删除举报引用回复修改删除举报引用回复发表于:2007-06-26 10:14:164楼得分:0Inbyte = MSComm1.lnput '这地方看不懂,数组可以这样赋值吗?/可以,因为MScomm 的属性之前应该是设置成数组形式接 收的,如果设置为字符串接收的话就得用String变量接收了加为好友发送私信buffer = buffer + Hex(lnbyte(i)+ Ch在线聊天r(32) 'for语句也没看懂,

39、尤其是buffer 这赋的是什么值?"Winters_lee其实我真的叫迪米亚路/接收完整的信息,一直接收,然后每次用Chr$ ( 32 )这个换行符格开。'这下面的又是没看懂,应该是将十六进制转换为十进制,怎么 转换的呢?16进制的表示就是行如:&HXXXX,其中&H 是等级:必须的,表示16进制,后面的 XXXX为16进制值,所以使可用分等级:中农用Vai,Clng,Cint等强制转换都可以直接将其转换。总技术分:1658 总技术分排名:12870修改删除举报引用回复发表于:2007-06-26 13:23:505楼得分:0Visual Graph是一套强

40、大的交互图形开发平台,她能非常方便地建造基于图形的界面、制作各种图形元件、实现图形管理、图形建模、制作监控系统、表单系加为好友发送私信在线聊天可用分等级:长工总技术分:472总技术分排名:34749统、绘图系统、流程设计、CAD软件等。她提供功能非常强大的ActiveX控件,和其他流行的编程语言共 同工作,极大地弥补了这些语言在图形处理方面的不 足。也可以嵌入IE浏览器中,实现网上图形编辑和控 制等。http:/www.visual-基于串口通信的远程自动抄表系统实现作者:王鹏摘 要:对远程抄表系统的方案、系统的组成、硬件的配置、软件设计、工作原理、功能以及技术 述。该系统通过下位机(MCU和

41、无线收发模块(PTR2OO0采集、整理数据,通过串口经 MODE 通信,水、电、气公司通过上位机(PC机)收集数据,实现远程无线自动抄表的功能。引言在人们的日常生活中,水、电、气是不可缺少的必备生活保障,然而对于水、电、气供应公 月上门抄取各个用户的三表读数却是非常繁重的工作,需要投入大量的人力和物力。现在许多公 抄表系统,但是他们通常采用电话线或者是专线完成与上位机的通讯,成本比较高。详见参考资针对这种情况,作者设计了一种远程无线自动抄表系统。自动抄表系统,简称ARMS(Automatic FSystem),是供应水、电、气的部门将安装在用户处的水、电、气表所记录的用量等数据通过遥测 机系统

42、汇总到营业部门,代替人工抄表及一连串后续工作的系统。该系统的无线通信是采用GSM它的实现是迈向家庭自动化的第一步,并有助于提高水电系统管理的现代化水平。该系统具有两 其一系统数据采集点多,成千上万,数据量大;其二系统是一个覆盖面很广的通信网络,采集点 对系统的要求,一方面应造价低、经济实惠,另一方面数据的采集要准确及时,又要有一定的环 抗干扰能力。随着现代化电子技术的发展,通信技术和计算机技术都有了飞速发展,而两者的结 化出许多新的通信方式和通信系统,为 ARMS勺实现提供了可能。这样可避免抄表员上门抄表带来 了上门抄表打扰用户的尴尬问题,对公司、用户都有很大的便利,具有良好的市场前景。特别是

43、在 该系统具有很广的推广价值。1 系统的组成及工作原理系统组成:数据采集部分;数据发送、无线通信部分;数据接收、处理部分工作原理:数据采集装置首先通过传感器采集三表的读数,将采集的数据存入单片机(AT89片机再通过无线通讯模块 PTR2000(发端)将数据发送,用户集中器的 PTR2000(收端)将发送来 下位机主要完成采集数据、分时存储和同上位机通信的功能,它通过串行接口与GSM/Mode联接,以 为平台,通过电信公众网络传输数据。随着GSM动通信网络的建设和发展,移动通信网日益庞盖地区也日益广泛。因而通过GSh移动通信网络进行数据的传输也成为了一种新式的数据传输手 通过GSM勺短消息业务发

44、送数据。PC机(上位机)一般设在公司的营业处,它是负责整个系统管理 据收集到,然后对接收的数据整理、存储、显示,并计算出各用户需缴纳的费用。还可以将用户 印出来,对实行季节电价、分时电价,用经济杠杆实现削峰填谷很有利,可以为国家节约能源。 构原理图如图1:图1系统的组成结构原理图(点击可看图)经济分析:本系统的最大容量设计为 1000家。规定每100ms采集一家的数据,则一分钟可以 的数据。普通的电表是2400转/KWH采集装置每采集20个脉冲记1个点。每十分钟采集的数据 字节,每家的用量数据是按增量采集的,三个表的增量最多占3个字节,所以600家的数据最多每分钟采集一轮,采集到的数据存储在

45、AT89C51 的 RAM内,在存储器内整理、打包,每十分钟发 于夜晚用电水气量比较少,所以在晚上发送的数据包,很多是空包,这样就浪费占用通信信道的 在软件设计时,采用越限发送,即每次采集的数据必须超越一定的量才发送,一天最多12小时白是每十分钟发送一次的。基于 GSMfi消息业务的容量主要是由短消息服务中心的处理能力和无线 承载能力决定的,每个短消息的信息量限制为140个八位组(7比特编码,160个字符)不超过每十分钟采集3K数据,需要发送22条短消息,则每月发送约5万条。按照西安市短信费用标准 月的费用是2000元/月。平均每家2元/月。因此该系统非常的经济。而且上位机每十分钟就收 据,这

46、样就可以在一天里用电高峰期里及时采集用户的用量,并将用量曲线打印出来。2.硬件配置2.1数据采集、发送部分水表是将原水表计数齿轮指针换装成带磁性的指针,再通过传感器进行数据采集;气表要用 的气表;电表必须采用脉冲式电子电度表,电表脉冲输出的器件为光耦输出,具有较好的隔离作 集装置与用户的电表安装在一起,为了防止用户的突然断电,采集装置必须装在空气开关的前端 通过计数脉冲来测量,由光电采集头采集电表的计数脉冲,表盘转一圈,光电采集头发出一个脉 P1 口的P1.0,由AT89C2051存储。然后通过 PTR2OO0莫块发送数据。PTR2OO0莫块乃是超小型、超低功耗、高速率 19.2K无线收发数传

47、MODEM采用了当代最先 牙技术"应用全数字科技,由单IC组合而成,接收发射合一,工作频段为 433-434MHZ,空中传 为19.2Kbps,工作电压范围为2.7V-5.25V,采用FSK调制,抗干扰能力强,标准的 DIP引脚间 嵌入式设备。当PTR2000的TXEN却为高时,它处于发射状态;当 TXEN脚为低时,它处于接收状 设计时,将TXEN与 AT89C2051的 P1.1脚连接,通过软件控制 PTR2000的状态。电路原理图如图图2数据采集、发送装置电路原理图(点击可看图)用VB6实现仪器串口通信及检测功能38610部队89分队(125000) 才 滢38611部队96分队

48、(125000) 李 莉摘 要 介绍利用VB6串行通信编程的方法,对采用了 RS-232接口的仪器进行 串行通信的计算机测控软件开发,以及实现仪器功能和指标的验收。关键词串行通信 测控软件开发随着Windows98的推出,越来越多的微机用户已习惯于 Windows操作系统 不过Windows应用软件的开发对于一般工程技术领域的技术人员来说并非易事,然而使用微软的 VisualBasic6.0 (简称VB6来开发这些方面的 Windows 应用软件就十分方便,编程工作量相对较小,只需进行主要应用功能的编程和 少量界面控制的编程。本文介绍利用VB6串行通信编程的方法对采用了 RS-232 接口的仪

49、器 ,进行串行通信的计算机测控软件开发和实现仪器功能和指标的验 收。VB6 提供了许多供用户选择的控件( Customcontrol ),这些控件以 .OCX 为文件后缀名,其中MSCOMM.OC是用于串行通信的控件。如果需要使用该 控件,可将该控件添加到工具箱( toolbox )内,这样就可以利用该控件进行 串行通信程序的设计。下面举一个简单的例子,说明如何进行串行通信程序的设计,该程序在Windows98环境下已调试通过。该例介绍通过 RS-232对一台HP53150A微波计 数器的程控功能和性能指标的验收。1设计用户界面首先新建一个“标准EXE工程,然后选择“工程/部件”菜单项,在“部

50、 件”对话框中选择 Microsoft Comm Control6.0即可添加 MsCom控件;再在窗体中依次布置如下控件并设置其属性。控件名称name 属性Caption 属性Formform1空Frame1frame1空Frame2frame2空Frame3frame3空Command1comd1确定Command2comd2退出Command3comd3确定Command4comd4退出Command5comd5做完退出MSCommmsc1空Label 1lab1RS-232 接口功能检测Label 2lab2请输入被检仪器程控码控制仪器功能Label 3lab3请输入被检仪器程控码读取

51、仪器数据Text1txt1空Text2txt2空完成后的界面如图 1 所示图1用户界面2编写程序代码编写的程序代码如下:Private Sub Form_Load ()Msc1.CommPort=1 '使用串行口 1'波特率9600,偶校验,8个数据位,1个停止位Msc 1.Settings= “9600, E,8,1”'当使用Msc 1.1 nput时,每次从接收缓冲区取一个字节。Msc1.lnputLen=0 '读取整个接收缓冲区内码或消除Msc1.Portopen=True ' 打开串行口End SubPrivate Sub Comd1_Click

52、 ()On Error Resume Next'简单的错误处理If Txt1.Text = "" Thenx = MsgBox("被检仪器程控码不能为空值",16)Exit SubEnd IfMSC1.Output = Txt1.T ext + Chr$ ( 13)'发送程控码For i = 1 To 20000000NextEnd SubPrivate Sub Comd2_Click ()Txt1.Text =""Txt1.SetFocusEnd SubPrivate Sub Comd3_Click ()Dim instring As string instring = MSC1.InputMSC1.Output = Txt2.T ext + Chr$ (13) DoDoEventsLoop Until MSC1.InBufferCount >= 20 instring = MSC1.Input ' 从接收队列中读入字符串 Txt2.Text = ""Txt2.Text = instring ' 显示读入的字符串 End Sub

温馨提示

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

评论

0/150

提交评论