基于RS485总线的盾构施工地层损失监测数据采集系统的设计

2013-08-22 07:34周奇才徐小芳熊肖磊
制造业自动化 2013年4期
关键词:皮带秤PC机寄存器

周奇才,徐小芳,王 凯,熊肖磊,吕 强

(1. 同济大学 机械工程学院 机械电子研究所,上海 201804;2. 上海盾构设备有限公司,上海 200031)

0 引言

盾构在施工过程中会引起地表沉降,而沉降发生的主要原因是地层损失,一般将其定义为由于超挖(蛇形)、间隙与注浆共同作用下所产生的、不考虑土体变形的实际开挖土体积(需考虑开挖后土体体积的变化)与理论挖土体积之差[1]。经研究,地层损失的主要影响因素包括推进过程中的排土量、注浆压力和注浆量等[2],通过对排土量和注浆量的测量可实现对地层损失的预测,提高盾构施工的自动化水平,而排土量与注浆量数据的获取需要建立在数据采集的基础上,由此可见,建立一个实时、高效的数据采集系统对实现地层损失监测是十分必要的。

本文研究设计了一种基于RS485总线的分布式实时数据采集系统,上位机基于Visual Studio 2010,在c#的语言环境利用串口控件Serial Port实现上位机与下位机之间的实时数据通信。

1 地层损失监测系统简介

地层损失监控系统的主要功能包括数据采集、数据传输、数据存储、数据处理、沉降预测、人机交互等,如图1所示。数据采集部分主要包括盾构 推进过程中的实际出土体积、理论的出土体积以及同步注浆过程中的注浆量。采集得到的出土量与注浆量通过串行总线传给上位机,并在上位机进行相关处理,原始数据与处理后的数据均存在数据库中,处理后的数据可作为建立沉降预测模型的依据。另外操作人员能够通过人机交互界面查找所需信息,在界面上直观的看到预测的沉降值,判断是否需要调整施工参数达到控制沉降的目的。数据采集系统是整个地层损失监测系统的基础,占据着非常重要的地位。

图1 地层损失监测系统功能框图

2 采集系统的总体结构

采集系统的主要任务是实现对出土量与注浆量的测量,测量方案分别为:1)测量出土量——在螺旋输送机出土口处安装激光测速仪测量出土口速度,再将速度与出土口的横截面积进行积分来测量排土体积,另外在皮带输送机上安装模块式皮带秤测量土体重量;利用针轮装置测出土量,即让土体带动针轮转动,通过测针轮的转速反推出出土速度,再与出土口横截面积进行积分运算得到出土体积;2)测量注浆量——通过在注浆泵的两个管道上均安装质量流量计来实现。这些方案需要采集的参数主要包括盾构推进过程中螺旋机出土口的出土速度,皮带输送机上的土体重量以及注浆泵流过管道的浆液流量。

整个数据采集系统的组成如图2所示,主要分为下位机与上位机两部分。下位机是4个传感器检测从站,主要完成数据采集,包括optipact-s1激光测速仪,欧姆龙旋转编码器,赛摩电子皮带秤,科力博奥质量流量计以及DAM3070D高频计数模块,其中欧姆龙旋转编码器用于测量自主研制的针轮装置的转速,DAM3070D高频计数模块是用于采集激光测速仪与旋转编码器的增量信号。上位机为数据采集主站,它是一台放在操作室的工控PC机,负责读取下位机采集的数据并进行相应的处理与数据存储。下位的各个传感器检测装置分布在多处,需要利用现场总线技术将这些传感器采集的数据实时传输到主站,所以该采集系统是分布式的。

2.1 下位机系统简介

下位机主要是由四种不同类型的传感器和一种高频计数模块组成。它们的性能介绍如下:

1)正常情况下螺旋机出土口的速度约为0.1m/s,一般的测速仪量程都比较大,难以满足高精度的要求,而optipact-s1测速仪测量的最大速度只有4m/s,精度优于1%,是较为理想的选择,体积小,方便安装,防护等级为IP65,增量输出;

2)欧姆龙旋转编码器,最高响应频率达100kHz,防护等级为IP50,能够适应恶劣的施工环境。

3)赛摩电子皮带秤,双托辊秤架适应皮带的宽度从500~1200mm,而皮带输送机的皮带宽度为600 mm,满足要求。动态累计误差小于0.125%,测量精度达到0.25%~0.5%,且过载达到传感器容量的150%,RS485通讯接口,支持Modbus协议。

4)科力博奥质量流量计,在较为理想的情况下精度达到0.2%,耐压值高达到8MPa,可以承受注浆过程中的因管道堵塞或土压升高等带来的高压情况,并且抗抖动性强。RS485通讯接口,支持Modbus协议。

optipact-s1与旋转编码器均是增量输出,不支持Modbus协议,高频计数模块DAM3070D用于采集这两个传感器的增量信号,输出Modbus协议格式的数据传给上位主站。该模块有2路独立的32位计数器,频率测量范围最大达到100KHz。

2.2 上位机系统设计

下位传感器检测装置采集了各个参数,通过总线实时传输给PC机,并与PC机进行串口通信,将接收到的数据在PC机上显示并利用后台处理软件进行处理。

2.2.1 通讯网络

目前国际上正在使用的现场总线名目繁多,如PROFIBUS、CAN总线,但是其系统造价相对过高,不太适用于中小型系统的应用。而RS485串行通信总线构造简单、技术成熟、造价低廉、便于维护,广泛应用于工业控制、仪器、仪表、机电一体化产品等诸多领域,其技术指标为:传输速率最大为10Mbps;最大距离为1200 m;高阻抗、抗噪声差分(有补偿线)传输;最高为32个节点。因此选用RS485总线进行网络通讯[3]。RS485总线模块比较常用的通信协议是Modbus协议,它是一种广泛的主从式通信协议,已经得到了众多大公司(例如GE,SIEMENs,OMRON等)的支持,都把它作为一种标准的通信接口提供给用户,并且作为与主系统通信的主要途径。故该网络是基于Modbus协议的RS485串行总线的通信网络。

图2 数据采集系统的总体框图

2.2.2 通讯协议

Modbus是OSI模型第7层上的应用层报文传输协议,是一种请求/应答(Master/Slave)协议。一个主站(Master)可以对应多个从站(Slave),能够在连接至不同类型总线或网络的设备之间提供客户机/服务器通信,并且提供功能码规定的服务。Modbus功能码是Modbus请求/应答PDU 的元素[4]。

Modbus 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域。通用的Modbus协议格式如图3所示。

图3 通用的Modbus协议格式

地址域是指slave的地址,取值范围足1—247,“0”单独用作广播地址。在更高一级的网络将使用其他的方法代替“0”实施广播;功能码的取值范围是在1—255,表示Master要求Slave执行何种操作。功能码分为通用功能码(适用所有的Mod icon控制器)、

专用功能码(适用某些功能模块)、留用功能码(作为将来的使用),Slave在收到Master的功能码后,如果一切正常,将原样返回功能码,否则,将返回错误代码,提示Master有错误发生;数据是请求和响应的主要内容。当Master向slave请求读取寄存器内容时,数据将包括寄存器的起始地址及读取的寄存器个数。寄存器是slave存放数据的地方,它的起始地址是从l开始的,但是Master计算时是由0开始的,所以对应的实际寄存器地址应该加l。slave回送响应的数据包括数据长度、实际采集的数据。注意数据长度只是计算数据区的长度,并不管其他部分的长度。如果S1ave出现异常,数据就返回错误代码(Exception code),说明发生何种错误。循环冗余校验(CRC),它是一个16位字。要注意的是加入到数据帧时CRC是低位在前,高位在后。

主机向各个从站发送命令帧并且接收从站的响应帧格式分别如下:

1)高频计数模块

高频计数模块与上位机通信的功能码为04,即访问输入寄存区,主站发送数据格式如表1所示。

表1 计数模块的主站发送数据格式

主机向从机发送8字节命令,包括的信息有:从机地址为02,访问输入寄存器的起始地址为0000H(16进制),访问寄存区的数量为4,最后两位是CRC(循环冗余校验)的高位与地位。从站响应数据格式如表2所示。

表2 计数模块从站响应数据格式

计数模块返回8字节数据,其中:

0通道计数/频率值低字—2字节,0通道计数/频率值高字—2字节;

1通道计数/频率值低字—2字节,1通道计数/频率值高字—2字节;

0通道用于输出optipact的脉冲量,1通道用于输出旋转编码器的脉冲量。

2)电子皮带秤

主机向赛摩电子皮带秤的发送的命令格式如表3所示。

表3 主站向皮带秤发送的数据格式

主机向从机发送8字节命令,包括的信息有:从机地址为01,读取保持寄存器的起始地址为6640H,访问寄存区的数量为26,最后两位是CRC(循环冗余校验)的高位与地位。从站响应数据格式如表4所示。

表4 从站皮带秤响应数据格式

电子皮带秤返回26字节数据,包括:流量—4字节,设定值—4 字节,累计量—8 字节,速度—4 字节,载荷—4 字节,灯状态—1 字节,报警信息—1 字节。

3)质量流量计

主站向两个质量流量计发送的命令格式与向电子皮带秤发送的格式类似,不同之处在于从站地址不一致,分别为03,04,产生的校验位也不一致。

质量流量计返回88字节的数据,包括质量流量、质量总量、体积总量、温度、密度以及仪表状态等信息,但并非所有的数据都是必须的,从中提取的主要信息如表5所示,共26字节。

表5 质量流量计返回的数据含义

3 采集系统数据通信的实现

在该数据采集系统中,RS485总线构成了主从式的多机串行总线通讯系统,PC机按照通讯协议向下位机发送命令,下位机接收到命令后进行各种操作。PC机与各下位机之间的通讯方式采用半双工方式,每一个下位机被赋予唯一的从站地址,PC机采用轮循的方式在一个固定周期内先后访问4个从站,由PC机轮流向各个从站发送命令,在其控制下完成与各个下位机模块的数据交换,次序为电子皮带秤,高频计数模块,2个质量流量计,同时数据以帧的形式在RS485总线上进行传输。

3.1 RS485总线通讯接口

串行接口包括4个寄存器,即控制寄存器、状态寄存器、数据输入寄存器及数据输出寄存器。数据输入寄存器总是和串行输入/并行输出移位寄存器配对使用的。在输入过程中,数据一位一位从外部设备进入移位寄存器,当数据完整接收之后则从移位寄存器送入输入寄存器,再等待CPU取走。输出的情况与输入过程类似。当CPU向数据输出寄存器中输出一个数据后,数据便传输到移位寄存器,然后一位一位地通过输出线送到外设。

本采集系统利用vs2010提供的Serial Port控件可以实现设备与设备、设备与PC机之间的串口通信。串口通讯的一般流程是设置通讯端口及波特率、数据位、停止位与校验位,对于上位机与下位机而言,这些属性的设置必须一致,然后再打开端口,发送与接收数据,最后关闭端口。设备的工作状态通过串口发送到PC机,发送方不断从输出缓冲提取数据形成数据帧发送出去,接收方不断把接收数据包解开后放入接收缓冲,两者需要遵从共同的数据包协议进行收发[5,6]。串口数据的读取有两种方式:线程实时读串口方式;事件触发方式。由于线程实时读串口的效率不是很高,所以选DataReceiv ed事件触发的方法,将Received BytesThreshold属性值设置为1,即只要接收缓冲区有字符就触发接收事件。由于DataReceived事件在辅助线程被引发,当接收完整的一条数据,返回主线程处理或窗体上显示时,必须要采用跨线程的处理,c#可采用控件的异步委托的方法Control.BeginInvoke及同步委托的方法Invoke。

3.2 通信软件流程

皮带秤、计数模块、质量流量计与PC机之间的通信过程是类似的,本文以皮带秤和PC机间的通信为例,具体流程如下:

1)Serial port控件实现通信的关键是正确设置该控件的属性与方法。首先对该控件进行初始化,设置波特率为9600b/s、数据位为8位、无奇偶校验、1位停止位即9600,8,N,1。然后打开串口。见以下程序所示。

private void InitializeSerialPort()//initialize the serial port

{

serialPort1.Baudrate=9600;//波特率为9600

serialPort1.DataBits = 8;//8位数据位

serialPort1.DtrEnable = false;

serialPort1.Handshake = Handshake.None;//无握手协议

serialPort1.Parity = Parity.None;//无奇偶校验

serialPort1.RtsEnable = false;

serialPort1.StopBits = StopBits.One;//1位停止位

}

2)上位机向下位机发送读取数据的命令。为了保证两者之间的正确通信,发送的命令帧必须正确,在发送完命令帧后,上位机处于等待状态,为了提高通信效率,主机不会一直处于被动的等待状态,采用定时器设置主机等待的时间为30s。主机向从机发送8字节命令,01036640001ADB5D,即向地址为01的从机发送读保持寄存区的命令,最后4位为CRC校验位,并同时开启定时器,若30s之后主机未收到数据,那么重发一次命令,若仍未收到,则再重发,当未收到的次数超过3次则出现报错,退出线程;如果30s之内数据接收成功,关闭定时器,关闭串口。

3)下位机成功接收命令帧后先对地址信息进行审查,若从站地址与本机相符,则根据PC机要求进行相关的工作,并利用串口进行数据发送。

4)对接收的数据进行循环冗余校验CRC校验,判断接收数据的合法性与有效性。CRC校验的过程为,小调入1个16位寄存器,所有位均为1,然后调用消息帧中开始的8位字节和寄存器内容异或,结果向最低有效位(LSB)方向移动(右移),最高有效位以0 填充。LSB被提取出来检测,如果LSB 为1 ,寄存器值和预置的值A001H进行异或运算;如果LSB 为0,则不进行,整个过程重复8 次运算;在最后一位(第8 位)完成后,下一个8 位字节又和寄存器的当前值异或。最终寄存器中的值,是消息中所有的字节都执行校验之后的CRC 值[7]。接收设备将这个CRC 值与被传送的CRC 值比较来检验主机或从机在通信数据传送过程中的信息是有误。经过校验后若数据正确则放

入数据库中存储,否则丢弃。整个流程如图4所示。利用Timer定时器控件的Interval属性设置系统轮循4个从机的周期时间,在Timer事件过程中写入主机与各个从机通信的子程序,保证主机按照固定的时间间隔将命令下达到各个从机并获得数据,从而实现数据的定时采集。

3.3 程序实例

图4 电子皮带秤的串口通信流程图

本实例主要是实现电子皮带秤与上位机的通信,通信界面如图5所示。用户可以在工具栏中选择通信端口,在关闭串口后可以重新设置串口属性,还可以设置通讯等待时间和轮循的时间周期。在状态栏中会显示串口当前的状态,打开或关闭,以及数据存储的情况等。

下面给出皮带秤与PC机通信的部分程序清单[8,9],首先是流程图4中的打开串口过程,见以下步骤1)所示,步骤2)中的程序是实现流程图4中的主机向皮带秤发送读数据命令,并等待皮带秤返回数据。

1)主显示区“采集”按钮的Click事件打开串口。

private void button12_Click(object sender,EventArgs e)//打开串口

{ if (serialPort2.IsOpen == false)

{ serialPort2.Open();

button12.Text = “关闭串口";

else{serialPort2.Close();

button12.Text = "打开串口";}}

2)PC机以Modbus协议格式向皮带机发送命

令并接收皮带秤返回的数据。

图5 采集赛摩皮带秤的操作界面

public MODBUSRESULT SendAndReceive(string SendData, int _BytesToRec,out string RetData)

{

RetData = “”;//初始化接收数据

IsTimeout = false;//通讯未超时

DataBuff = "";//数据缓存

DataRecCount = 0;//接收的数据个数

BytesToRec = _BytesToRec;

SerialPort sp = new SerialPort(_PortName,_PortBaud, _parity, _Databit, _Stopbit);//实例化串口

try

{

sp.Open();//打开串口

}

catch

{

return MODBUSRESULT.PortOpenFall;//串口未打开,报错

}

if (SendData.Length / 2 > 0)//PC发送命令帧

{

byte[] bt = CRC16.StrToByte(SendData);

DataHead = bt[0];

sp.Write(bt, 0, bt.Length);//数据写入串口

}

if (_BytesToRec > 0)//上位接收数据

{sp.DataReceived += new

SerialDataReceivedEventHandler(sp_DataReceived);//数据接收事件

Timers.Timer MyTimer = new System.Timers.Timer(_Timeout);

MyTimer.Elapsed += new ElapsedEventHandler(MyTimer_Elapsed); //通讯超时事件

MyTimer.Enabled = true;

MyTimer.Start();//定时器开启

while ((IsTimeout == false) && (DataIsReceived== false)) ;//

通讯未超时且数据接收

MyTimer.Stop();//定时器停止

MyTimer.Elapsed -= new ElapsedEventHandler(MyTimer_Elapsed);

MyTimer.Dispose();//定时器资源释放

sp.Close();//串口关闭}

else{

sp.Close();

return MODBUSRESULT.OK;//通讯未超时且数据接收}

if (IsTimeout == true)

{

return MODBUSRESULT.Timeout;//返回通讯超时

}

//校验数据

MODBUSRESULT ret = CheckData(DataBuff,SendData);

if (ret == MODBUSRESULT.OK)

{

RetData = DataBuff;

return MODBUSRESULT.OK;

}

else

{return ret;

}

}

4 结论

数据采集系统的实时性与高效性对地层损失监测系统非常重要。本文主要对整个采集系统的结构进行了较为深入的阐述,介绍了各个下位机的基本性能及其Modbus通讯协议,在Visual Studio 2010环境下利用C#的Serial Port类编写了网络通信程序,实现了皮带秤、计数模块、质量流量计与上位机通信。经过多次试验,本文设计的通信程序性能良好,操作简便。

[1] 周奇才,徐小芳,王凯,等.盾构施工过程地层损失监测系统的设计[J].机电一体化,2012,18(5):65-71.

[2] 王国才,许四法.地铁盾构隧道施工引起地表沉降的影响因素分析[J].温州大学学报·自然科学版,2010,31(增2):280-285.

[3] 孙鹏,任维松,张赤斌.基于RS485总线的SBI试验数据采集系统的设计[J].计算机应用,2009(11):44-47.

[4] 文小玲,余飞,卢圣文,等.基于MODBUS协议的串口通信软件设计[J].湖南工业大学学报,2008,22(6):100-102.

[5] 谢瑞和.串行技术大全[M].北京:清华大学出版社,2003.

[6] 赵炯,熊肖磊,周奇才.串行数据传输协议的剖析研究[J].计算机工程,2004,30 ( 9) : 106- 108.

[7] 李宥谋,房鼎益.CRC编码算法研究与实现[J]. 西北大学学报,2006,36(1):895-898.

[8] 张立.C#程序设计编程经典[M].北京:清华大学出版社,2008.

[9] 姜拓,张剑平.基于c#的数据采集系统上位机软件设计与实现[J].电子测试,2009(9):58-61.

猜你喜欢
皮带秤PC机寄存器
基于线性系统理论的皮带秤角度补偿
三埃皮带秤应用的问题和措施研究
Lite寄存器模型的设计与实现
小流量加香精度超标解决实例
二进制翻译中动静结合的寄存器分配优化方法
移位寄存器及算术运算应用
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
基于单片机与PC机的电气量采集系统设计
仪表控制在电子皮带秤上的应用