引言
在下业生产中,需要将环境和状态的变化由传感器转换为电压信号,再由监控设备完成对电压信号的数据采集和监控。传感器的信号处理在监测点完成,处理后的结果经RS485网络传送到监控计算机。这样把监控工作分散到各地,而对监控结果集中管理,所形成的分布式监控系统可有效减少因工业强噪声干扰和传输距离的增加所带来的信号失真。
1 系统构成
本监控系统下位机的核心部分为MEGA8单片机。MEGA8单片机内置lO位的A/D转换器。
故可不用外接A/D转换器。当多路电压信号由多路转换器(CIM051)进入单片机后,即可对多路电压信号进行A/D转换和数据处理,完成数据采集。
可根据处理的结果进行报警操作,也可通过RS485网络同监控计算机进行通信,以实现分布式监控。
系统结构如图1所示。此系统的监控计算机程序使用VB开发,单片机程序使用c语言开发。本文主要讨论单片机如何对多路电压信号进行采集,以及采集的数据如何由单片机经RS485网络传送给监控计算机,以及如何编制CheckSum效验码以实现错误检查。
2 数据采集
数据采集工作完全是在下位机进行的,可通过对单片机编写控制程序已完成信号的采集和处理任务,主程序流程如图2所示。
除主程序外,程序中还设置了实现多路信号巡检的1 s中断程序模块;将A/D转换结果送人单片机进行处理的A/D转换完成中断程序模块;实现数据串行传输的USART中断程序模块;以及实现按键报警,数据处理等功能的子程序模块。
A/D转换结束后,在ADC数据寄存器中可以取得转换的结果,对于单端输入的A/D转换,其转换结果为:
其中,Vin表示选定的输入引脚上的电压,Vref表示选定的参考电源的电压。0x000表示输入引脚的电压为模拟地,Ox3FF表示输入引脚的电压为参考电压值减去一个LSB。
3 串行通信协议
监控计算机与单片机的数据交换包括如下3个步骤。
(1)单片机要发送数据时,计算机会发送一组字符串过去。该字符串的第一个字符是前导码,单片机根据前导码辨认是否应该读取该字符串,该字符串属于哪一个命令集。
在前导码之后是站号,通常以两个字符代表,以RS-485进行网络连接,需要用站号来辨别命令是属于哪一个设备。站号之后是要解读的命令或数据。
(2)当单片机收到要求字符串,并经过辨读确定后,便会送出计算机所要求的数据。同样,数据被送出时会在数据之前加上前导码与站号,计算机也有由此辨别数据来自何处。
(3)计算机端收到单片机发送回来的字符串,即进行解读检查的操作。当检查完成后,再送一个确定的字符串给单片机,用以说明计算机端已成功收到字符串;而若发送失败,计算机也在该回送的字符串中要求单片机重新发送数据。
另外数据发送时,一般会加上错误检查机制,最常用的方法是将字符进行运算,而在字符串的最后加上CheckSum字符,收发双方利用Check-Sum字符的检查判断字符串的正确性。
本系统设计的数据格式为:
其中,前导码为一个字节;站号为一个字节;命令/数据为一个字节;数据长度为一个字节;数据内容为几个字节;CheckSum校验为两个字节;结束标志位为一个字节。
4.1 监控计算机通信软件的实现
利用VB提供的具有强大功能的通信控件MsComm,可设置串行通信的数据发送和接收,串口状态及串口通信的数据发送和接收,以及串口状态和串口通信的信息,格式和协议。监控计算机的通信流程如图3所示。
4.2 单片机通信部分的软件实现
ATMEGA8单片机带有一个全双工通用同步/异步串行收发模块USART,该接1:3是一个高度灵活的串行通信设备。单片机的通信流程如图4所示。
4.3 CheckSum的使用
使用了outCheckSum和inCheckSum子函数以实现CheckSum计算。第1个函数(outCheckSum)用于处理所要发送的字符串,只要将所要发送的字符串传人,返回的结果的结果字符串即是作完CheckSum处理。第2个函数(inCheckSum)用于处理接收到的返回字符串,只要将所收到的字符串传人,返回的结果字符串即是做完CheckSum检查,并去除校验和与结尾字符。
5 结语
以上提出的单片机和监控计算机的软硬件设计已在实际中得以应用。数据的采集及单片机和监控计算机之间的通信快速准确,效果良好。可见上述多路电压信号的采集和分布式监控系统的设计方案是可行和可靠的。
上一篇:基于UC浏览器的移动安全支付解决方案
下一篇:基于MAX7456的视频字幕模块的设计与实现
推荐阅读最新更新时间:2023-10-12 20:39
- 请问QV2 D极为何会发黑,而且QV2零件还是好的
- 下载有好礼!罗姆带您学习电源设计应用小技巧
- 想买一块嵌入式开发板,大家有什么好的建议?
- CircuitPython 6.1.0-rc.0发布
- 发现SM32的STOP休眠模式很难适用实时低功耗应用!
- 【一起来玩ble+zigbee+6lowpan!】—我们的TI-CC26xx硬件板
- 红外发光二极管的接收头主要用什么?
- LPC2478驱动nand flash(k9f5608)
- ST sensortile评测分享计划 终结篇 之 蓝牙协议略读及sensortile可剪裁思考
- UCD9XXX 非隔离数字控制器是否可以实现Boost,Buck-Boost等拓扑结构?