当前位置:首页 > 问答 > 正文

通过串口反复发送数据,实现数据库存储和服务器间的数据传输与采集

在工业控制和物联网项目中,有一种常见的需求,就是要让一台设备,比如一台放在车间里的工控机或者一个嵌入式的数据采集盒子,能够通过它自带的串行接口,也就是我们常说的串口(比如COM1、COM2这样的端口),去连接一些传统的仪表、传感器或者PLC控制器,这些老设备很常见,它们没有现在流行的网线口或者Wi-Fi功能,最普遍、最可靠的通信方式就是串口,我们的目标就是让工控机通过串口,一遍又一遍、不间断地从这些设备上读取它们测量到的数据,比如温度、压力、转速等等,然后把这些数据存到一个数据库里,最后再想办法把数据库里的数据传送到一个更远的、中心位置的服务器上,供更多的人查看和分析,这个过程可以分成几个步骤来看。

第一步,也是最基础的一步,就是建立串口连接并反复读取数据,工控机上会运行一个专门的数据采集程序,这个程序首先需要找到正确的串口,比如确定设备是连接在COM3口上,程序要设置好和对方设备一模一样的通信参数,这几个参数是关键,不能设错,主要包括:波特率,就是数据传输的速度,两边必须一样,常见的有9600、19200等;数据位,一般是8位;停止位,一般是1位;还有奇偶校验位,通常设为无,这些参数就像两个人打电话之前要先约定好用什么语言和语速一样,设置好之后,程序就可以打开串口了,打开后,它就会进入一个循环,这个循环会一直运行,除非我们主动停止它,在循环里,程序会定时地,比如每5秒钟,向连接的仪表发送一个命令代码,这个命令代码是事先定义好的,仪表能看懂,比如发送一串十六进制的“01 03 00 00 00 01 84 0A”,意思可能就是“请把1号寄存器里的数据读给我”,仪表收到这个正确的命令后,就会通过串口回复一串数据,程序会等待并接收这串回复数据,由于数据在串口上是像水流一样一个字节一个字节传送的,程序需要把收到的所有字节拼凑起来,然后根据仪表厂家提供的通信协议说明书,从这串数据里解析出我们真正需要的数值,回复数据中的第3和第4个字节可能就代表了实际的温度值,但可能是十六进制形式的,程序需要把它转换成我们能看懂的十进制数字,比如25.6摄氏度,这样,一次数据读取就完成了,然后程序会等待几秒钟,接着发送下一次请求,如此循环往复,实现持续采集。

第二步,是把采集到的数据存到数据库里,每次程序成功地从串口数据中解析出一个有效的温度值或者其他数据后,它不能只是显示在屏幕上就完了,必须要存起来,不然关机就没了,这时候就需要数据库了,数据库就像一个结构规整的电子表格仓库,工控机上的采集程序在得到一个新数据的同时,通常也会记录下这个数据是哪个设备传来的,以及采集到的具体时间点,程序会连接到一个数据库,这个数据库可以是在工控机本机上安装的(比如轻量级的SQLite),也可以是局域网里另一台专门的数据库服务器(比如MySQL),程序会执行一条“插入”命令,简单来说就是:“请在我准备好的那个‘温度数据表’里,新增加一行记录,这一行里要填上设备编号是‘Thermometer_01’,时间是现在的年月日时分秒,温度值是25.6。”数据库收到这个命令后,就会把这条数据妥善地保存起来,由于采集是反复进行的,数据库里的记录就会一条一条地不断增加,形成历史数据,这样我们以后就可以查询过去任意时间点的数据了。

第三步,是把数据库里的数据传输到中心服务器,如果只是把数据存在现场的工控机数据库里,那只有到现场才能看,不方便集中管理,所以我们需要把各个地方采集点数据库里的数据,汇总到一个中心的、更强大的服务器上,这个过程通常由工控机上的另一个程序或者同一个程序的另一个模块来完成,这个模块也会定时工作,比如每隔一分钟或者五分钟启动一次,它的任务是查询本地数据库在这一段时间内新增加了哪些数据记录,它会通过网络(可能是公司的局域网,也可能是互联网)连接到远方的中心服务器,连接上之后,它会把刚才查到的这批新数据,打包成一个一个的请求,发送给中心服务器提供的一个接口地址,这个接口就像是服务器开的一个专门收数据的窗口,中心服务器收到数据后,会进行验证,确认数据没问题,就把它存到自己的、更大的中心数据库里,这样,管理人员在总部的电脑上,通过访问中心服务器的软件或者网页,就能看到所有分布在不同地方的设备上传过来的实时数据和历史数据了,为了保证可靠性,工控机上的程序在成功把一批数据发送到服务器之后,可能会在本地的数据库里做一个标记,表示这些数据已经上传过了,避免下次再重复发送,如果当时网络中断导致发送失败,程序会把数据暂存起来,等网络恢复后再尝试发送。

整个流程就是一个从下到上的数据流:最底层的设备通过串口源源不断地提供原始数据;工控机上的采集程序负责“问”和“听”,解析出有用信息后先存入本地数据库,起到一个缓冲和暂存的作用;另一个传输程序再把本地数据库里的新数据“搬运”到远方的中心服务器,实现数据的集中和共享,这个过程环环相扣,确保了从传统串口设备到现代数据管理系统之间的可靠桥梁。

通过串口反复发送数据,实现数据库存储和服务器间的数据传输与采集