Singnal 3.0 里的C、G、Y转氨酶是什么么意思

基于MODBUS协议的管道监测系统_文档下载_文档资料库
当前位置: >>
基于MODBUS协议的管道监测系统
基于 MODBUS 协议的管道监测系统基于 MODBUS 协议的管道监测系统1 绪论原油管道输送是石油行业的重要一环,其特点是运输量大,运输工程量小,占 地少,可实现封闭运输,能耗小,然而管道运输的过程中人为破坏及管线运行过程 中腐蚀所引起的管线穿孔,造成资源财产流失、环境受到污染等一系列严重问题。 尤其是在石油资源日益珍贵的今天,巨大的利益驱使着大量的人为破坏管线现象不 断涌现,如何避免和杜绝这些问题,这便是一套能即时、准确判断输油管道是否泄 漏及泄漏的准确位置的输油管道泄漏报警定位系统的重要意义所在。1.1 本课题的来源本课题来源于科研项目。近年来,由于管道老化和盗窃原油及破坏油田设施的 现象屡见不鲜,特别是发展到在油田的大动脉即输油管道的盗窃原油,严重威胁到 第三采油作业区的正常生产。为了减少因原油泄漏以及泄漏所造成的环境污染,油 田公司非常希望有一套能即时、准确判断输油管道是否泄漏及泄漏的准确位置的输 油管道泄漏报警定位系统,以准确、及时、彻底打击盗油不法分子,维护输油管道 的正常运行。因此,对管道监测系统的现场数据的安全和稳定传输作为毕业设计的 研究,实现远程传输的控制,很好的体现了本学科及相关领域的发展状况。1.2 管道泄漏监测系统现状目前,国际上已有的检测和定位方法大体上分基于硬件的方法和基于软件的方法 两大类。基于硬件的方法是指对泄漏物直接进行检测,如直接观察法、检漏电缆法、 放射性示踪法、光纤检漏法等。基于软件的方法是指利用现代控制理论信号处理和 计算机技术等对因泄漏而造成的影响(如压力、流量、流速、摩阻等管道动态模型参 数的变化及泄漏引起的声波传输特性等)进行采集、处理和估计,从而对管道的非线 性、不确定性、随机性等因素引起的误差进行补偿,进而提高泄漏检测的灵敏度和定第 1 页(共 60 页) 绪论位精度。也就是说,基于软件的方法是充分依靠计算机并采用某种或某些运算策略, 利用泄漏 所引起的传输质在管道内或管壁上所产生的信息进行泄漏检测和定位的 方法。 除了上述两类主要方法外,还有其它的一些检漏方法,如基于录像、磁通、超声、 涡流等投球技术的管内探测球法,该法将探测球沿管道内进行探测,利用超声技术、 视觉技术、漏磁技术等采集大量数据进行事后分析以判断漏点。 由于各类方法都有一定的适用范围,现在随着计算机技术的迅速发展,出现了以软件 为主、软硬件相结合的检漏与定位方法的趋势,以实现多种检测方法的优势互补。基 于硬件的方法和管内探测球法都只能间断运行,实时性差,造价很高,而软件检测法能 连续实时运行,适应性广,安装简单,目前较为多用。 目前,基于软件的长输管道泄漏检测与定位方法均是基于在管道首末端安装若干 固定传感器的情况下进行检测和定位的,该方法主要有基于模型的方法、 基于信号处 理的方法和基于知识的方法三种。 1、基于模型的方法 为了提高泄漏检测和定位的准确性,用模型在线观测管道的压力和流量,并与压力和 流量的实测值比较来进行泄漏故障诊断,这是模型法的基本思想。 2、基于数学原理的方法 基于数学原理的泄漏检测方法主要有统计学法、模式识别法、神经网络法、专家系 统法等。如根据管道出入口的压力和流量,连续计算压力和流量之间的变化关系,并 应用最优序列分析技术和模式识别来检测这种变化,当泄漏确定以后,用最小二乘法 进行泄漏定位。 3、基于信号处理的方法 基于信号处理方法无需建立管道的数学模型主要有声学方法、压力点分析法和流量 平衡法等。 声学方法利用声音传感器检测沿管壁传播的泄漏点噪声(或流质在泄漏后 产生的压力波信号)利用相关信号处理技术(如相关分析法,小波变换等)进行泄漏检 测和定位。由于受检测对象和应用环境的限制,对长距离管道检漏,必须沿管道安装 许多声音传感器。该方法泄漏检测准确率高,定位精度。 本文即是研究基于压力点分析法的负压波法对管道的泄露进行监测控制的。 基于 MODBUS 协议的管道监测系统1.3 本文研究的主要内容通过负压波法将采样得到的实时数据发送到系统,为了保证传输数据的可靠不 丢失,将使用以太网通讯传输数据。 本论文主要研究完成以下几个方面内容工作: 1)使用负压波法对管道进行实时监测,当管道发生泄漏时报警,熟悉掌握所涉的 参数变量,加深对现场环境的认识。 2)掌握 SM5651 压力传感器,PROline Promag 50 电磁流量计,PT100 温度传感器 的性能特点及其应用,理解压力传感器,电磁流量计,温度传感器对压力,流量, 温度采集的原理。掌握 dsPIC30F4013 微处理器性能特点,熟悉 dsPIC30F4013 与以 太网的接口电路。 3)熟悉基于工业以太网的 TCP/IP 协议和 MODBUS 协议,将采集到的参数变量通 过模数变换送至微处理器,然后经由以太网接口电路,通过网线送至中控室的 PC 机上 4) 测量参数通过处理器处理的数据量通过网线传给上位机, 上位机由 VB 编写的应 用程序,完成算法处理,并且反映在可视化的人机交互界面上,完成最管道泄漏的 实时监测第 3 页(共 60 页) 绪论2 管道监测系统的原理和方法管道监测系统是对管道的压力、温度和流量进行实时检测,然后通过远程通讯 (有线或无线)对原油传输的状态进行实时监测。这样可以根据监测得到的数据做 出相应的判断,以减少损失。2.1 管道监测的原理负压波法的工作原理是:当管道上某处发生泄漏时,在泄漏处将产生瞬态压力突 降,形成一个负压波,该负压波以一定的速度自泄漏点向管道两端传播,利用管道首末 端压力传感器检测到泄漏点处传来的负压波突变拐点就可进行泄漏检测,并根据管 道首末端压力传感器检测到的压力信号时间差和负压波波速已知的情况下就可以 进行泄漏定位。基于负压波进行泄漏检测和定位的方法主要有相关分析法、时间序 列分析法和小波变换法等。相关分析法就是指用相关技术对管道泄漏点两侧传感器 接收到的信号进行相关分析,实时计算其相关函数,当没有泄漏时,相关函数值在零附 近;当发生泄漏时,相关函数值将显著变化,以此来检测泄漏。两侧来的信号延迟时间 不同,相关函数值就不同,当在某一延迟时间间隔相关函数具有峰值,该峰值表示与两 个测量点所接收的信号时间差相一致,于是相关函数峰值的位置就表示了泄漏的位 置。相关分析法对检测来的泄漏信号是微弱的情况,如已存在的固定泄漏及缓慢、没 有明显负压波出现的泄漏则失效;当泄漏的声音在传输中受到很大程度的衰减时,如 塑性管道等,该方法也难令人满意。 定位方法受环境噪声和观测点埋设情况影响较大,一般不能保证信号传输路径的 线性,通常定位精度不高,且当在检测点附近不止一个泄漏时会产生误检。此外,时域 相关法还存在一个不容忽视的问题:当靠近泄漏点附近的通道上有不光滑现象存在 时,那么泄漏点发出的声波可能与不光滑处反射回来的波混叠在一起,从而使定位精 度下降。频域相关分析方法,首先用双通道快速傅立叶变换 FFT 分析器将泄漏点两 侧传感器接收到的时间信号变换成频域信号,然后对这两个频域信号进行互谱运算, 最后将该互谱函数反变换为时域相关函数,相关函数的峰值直接表明了泄漏的位置。 这种方法与纯时域相关法比较的优点在于:能有效降低非泄漏噪声和管道系统本身 引起的噪声的影响,提高检测精度。 时间序列分析法就是将实时检测到的压力信号构 基于 MODBUS 协议的管道监测系统成时间序列,对这两对时间序列进行分析,可以进行泄漏检测。通过管道两端的 4 个压力传感器得到的 4 个压力信号,构造管道首末端的两个压力梯度信号组成的时 间序列,然后用 Kullback 信息测度对这两个时间序列进行分析,根据预先设定好的 阈值按照一定的策略进行故障报警,从而实现对管道的泄漏检测。 该方法抗干扰性能 差,且不能对泄漏点进行定位。 小波变换是一种时间―尺度分析方法,在时频域中都有表征信号局部特征的能 力。利用小波变换的极值可以检测信号的边沿,并且可以抑制噪声,所以,可通过小波 变换检测瞬态负压波的下降沿进行泄漏检测,通过确定负压波到达管道上下端的时 间差及负压波波速就可实现泄漏点定位。 该方法的局限性在于:要求泄漏的发生是快速的、突发性的;抗干扰能力差,对于工况 扰动易误报警。 总之,负压波法要求泄漏点产生突然的压降,对快速突变的泄漏和大泄漏敏感,对 于缓慢发生的泄漏或已经发生的泄漏则失效。2.2 泄漏监测、定位原理及方法HKH 管道泄漏报警系统的定位综合考虑了各种情况,从根本原理上讲,和负压 波法相似,只不过它能发现负压波法所发现不了的泄漏,定位也是一个已知时间和 速度的问题,这种速度往往因各种环境和流体状况而变,所以速度既不是平均速度 也不是匀加速度运动,而是根据具体管道特性确定的数字模型。对于事件发生时刻 的认识与以往的任何一种方法都不同,因为没有阈值,这是凭经验和知识估计、寻 找出来的。其特点是比人的速度快,比人工观察选点更精确、更及时,它不是简单 的几种模式识别能做到的, 这就是人工智能的特点。 所以, 它的定位效果是最好的, 和传统方法相比是一个巨大的进步。它不但解决了定位问题而且也比传统方法误报 少得多,从本质上说它是一种声学方法,即利用管道内外的压差,泄漏点的液体迅 速流失,使该点管道内压力下降,流体分子间隙变疏,泄漏点两边密度高的液体就 向密度小的泄漏点补充,从而产生了一个新的波源,该波以一定速度依次向管道的 两端传播,这就是所谓的负压力波。根据负压力波到达上下游监测点的时间差和管 道内压力波的传播速度就可以计算出泄漏位置。该定位方法图如图 1 所示,常用的 定位公式⑴、⑵如下:第 5 页(共 60 页) 管道监测系统的原理和方法图 1 负压波泄漏检测定位原理图X = ( L + a Δt ) / 2⑴式中:X――泄漏点的位置 L――被监测的管道的长度 a――波在管道中传播的速度 Δt――首末两站点收到波的时间差 a=?( 1 ?1KD E?⑵?)式中:ρ――液体密度; K――液体的体积弹性系数; E――管材弹性系数; D――管道的平均直径; δ――管壁厚度; ψ――系数,对于埋地管道,ψ=1-μ2; μ――泊松系数,钢管的 μ=0.3;从上述公式可以看出,ρ 和 K 除了与流体的特性有关外,还和液体的温度和压力相 关,一般这两项误差可以用数学模型来近似解决,当然这种情况下的定位公式就不 是上式了,所以说⑴式只不过是一个近似的公式。 ZFPL 管道泄漏监测报警定位系统以负压力波法为基本方法,利用管道瞬态模型, 采用流量和压力综合报警定位。当首末两站间输油管段内某一点发生泄漏时,根据 流体力学理论,泄漏点压力突然降低,将产生负压波。负压力波将沿管道利用介质 (原油)向两端传播,当该负压波传播到管道端点时,引起首站出站压力和末站进 站压力降低,并分别被设在两端的压力变送器捕获,随泄漏位置的不同,首末站响 应的时间差也不同,根据响应时间差、管道长度、压力传播速度即可计算出相应泄 基于 MODBUS 协议的管道监测系统漏位置。 瞬时传播速度是介质粘度、密度、管道管径、弹性模量的函数。对由于因管线 的工况参数及被输介质的理化性质和温度等引起压力波的传递速度及衰减速度变首站泄漏点末站t1图 2 现场油田泄漏点的定位原理t2化进行必要的补偿和修正,即可实现准确定位。如图 2: Δt = t2-t1 ⑶假设管道长度 L、压力波传递速度 a(变量)、流速 V,由以下公式即可算出管 道泄漏位置 X0: X0=a ?V2a [ L ? Δ t(a ? V)]⑷根据这个公式,可以算出最终的泄漏位置。2.3 现场总线通信协议的设计与实现现场总线是在上个世纪 80 年代末、90 年代初国际上发展形成的,是用于过程自 动化、制造自动化、楼宇自动化等领域的现场智能设备互连通讯网络。它作为工厂 数字通信网络的基础,沟通了生产过程现场及控制设备之间以其更高控制 管理层 次之间的联系。它不仅是一个基层网络,而且还是一种开放式、新型全分布控制系 统[4]。这项以智能传感、控制、计算机、数字通讯等技术为主要内容的综合技术, 已经受到世界范围的关注,成为自动化技术发展的热点,并将引起自动化系统结构 与设备的深刻变革。 与现场总线技术形成鲜明对比的是,以太网(Ethernet)技术在没有任何标准化组 织支持的情况下却发展得非常迅速。以太网由于其开放性好、应用广泛以及价格低 廉等特点, 不但基本垄断了商业领域的网络市场, 而且在工业控制领域(主要在企业第 7 页(共 60 页) 管道监测系统的原理和方法管理层)也得到了大规模的应用。 目前许多大公司的工业控制系统都是采用以太网来 统一管理层的通信,而且各种现场总线也开发出以太网接口,因此可以说以太网已 经成为工业控制领域的主要通信标。2.4 工业以太网的简介为满足工业现场控制系统的应用要求,必须在 Ethernet 的 TCP/IP 协议之上, 建立完整的、有效的通信服务模型,制定有效的实时通信服务机制,协调好工业 现场控制系统中实时和非实时信息的传输服务,形成为广大工控生产厂商和用户 所接收的应用层、用户层协议,进而形成开放的标准。为此,各现场总线组织纷 纷将以太网引入其现场总线体系中的高速部分,利用以太网和 TCP/IP 技术,以及 原有的低速现场总线应用层协议,从而构成了所谓的工业以太网协议,如 HSE、 Profinet、Ethernet/IP、MODBUS TCP 等。我国自主开发的工业控制网络协议 EPA 也 成为国际现场总线标准体系中的一员[5]。 TCP/IP 的特点: 1)、TCP/IP 协议并不依赖于特定的网络传输硬件,所以 TCP/IP 协议能够集各 种各样的网络。用户能够使用以太网 (Ethernet) 、令牌环网 (Token Ring Network) 、 拨号线路(Dial-up line)、X.25 网以及所有的网络传输硬件。 2)、TCP/IP 协议不依赖于任何特定的计算机硬件或操作系统,提供开放的协 议标准,即使不考虑 Internet,TCP/IP 协议也获得了广泛的支持。所以 TCP/IP 协议 成为一种联合各种硬件和软件的实用系统。 3)、TCP/IP 工作站和网络使用统一的全球范围寻址系统,在世界范围内给每 个 TCP/IP 网络指定唯一的地址。这样就使得无论用户的物理地址在哪儿,任何其 他用户都能访问该用户。TCP/IP 在实际应用中,除多数用到 TCP、IP、UDP 等低层 协议外,还使用另外一些协议来完成传统的网络服务,这包括: 文件传输 文件传输协议(FTP)允许一台计算机上的用户从另一台计算机上取得文件或 将自己的文件传送到另一台计算机上。通过要求用户说明另一台计算机上的用户 名和口令字的方法保证安全性。FTP 具有处理不同计算机在字符集、行结束符等方 面差异的能力。 基于 MODBUS 协议的管道监测系统远程登录 网络终端协议(Telnet)允许用户远程注册到网络上的任何一台计算机上。通 过说明要连接的计算机启动一个远程会话,此后直到完成这个会话,用户键入的 任何字符都被送到远程计算机,由远程计算机解释信息的含义,完成相应的功 能,并将最终结果送回本地计算机。 电子邮件 简单邮件传输协议 (SMTP) 允许用户发送信息给其它计算机上的用户,邮件通 常由一个功能强大的计算机系统或服务器处理。该计算机系统或服务器不间断地 运行,为用户代办各种邮件服务。包括邮件检索或处理。 TCP/IP 协议的封装与分用。 TCP/IP 协议采用分层结构,实现也采用分层实现的方法。在实现的过程中,首 先要了解封装和分用的概念。封装数据从一层传递到另一层,从一个协议传递到 另一个协议。在这个过程中,每一层的协议软件为下一层进行数据封装,封装是 一个按照较低协议要求的格式保存数据的过程。数据被送入协议栈中,然后逐个 通过每一层直到被当作一串比特流送入网络。这个过程称作封装。如图 3 所示。用户数据 应用程序 AppL 首部 用户数据 TCP TCP首部 TCP段 IP首部 TCP首部 IP数据报 以太网首部 IP首部 TCP首部 应用数据 应用数据 以太网驱动程 序 应用数据 IP以太网帧 40――1500字节图3TCP/IP 协议的封装第 9 页(共 60 页) 管道监测系统的原理和方法分用是当目的主机收到一个以太网数据帧时,数据就开始从协议栈底层向上 升,同时去掉各层协议加上的报文首部。以太网帧要检查首部中的帧的类型字 段,IP 要检查首部中的协议值字段,TCP 和 UDP 要检查首部中的端口号字段来确 定数据属于哪一层,这个过程称作分用。如图 4 所示。HTTPFTPPOP3SMTPSNMPTCPICMPICMPUDPIPARP硬件驱动图4 以太网帧的的分用过程2.5MODBUS 的简介2.5.1 MODBUS的历史与现状 MODBUS 作为产生最早的总线(或总线标准协议)之一,随着工业自动化领域 的发展,不断完善。MODBUS 协议主要分为 MODBUS 应用协议,MODBUS 在串 行链路上的实现指南和 MODBUS 在 TCP/IP 上的实现指南三大部分。2004 年, MODBUS 成为了我国的国家标准。 截至到 2004 年,MODBUS 的节点安装数量已经超过了 800 万个,而且 75%的 产品为非施耐德产品,安装的地区遍及世界各地。在国内,电力系统、数据采集、 工业生产等方面都有一定应用。成为我国国家标准后,MODBUS 的发展将更为迅 速。 2.5.2 MODBUS协议概述 MODBUS 协议是工业控制系统采用的一种通用协议。通过此协议,采集器相互 基于 MODBUS 协议的管道监测系统之间、采集器经由网络(例如以太网)和其它设备之间可以通信,己经成为一种通用 工业标准。不同厂商生产的采集设备可以通过协议连成工业网络,进行集中监控。 MODBUS 协议描述了采集器请求访问其它设备的过程,如何回应来自其它设备的 请求,以及怎样侦测错误并记录,制定了消息域格式和内容的公共格式。当在一个 MODBUS 网络上通信时,此协议决定了每个采集器必须知道自己的设备地址,根 据地址识别消息的归属,决定执行何种功能。如果需要回应,采集器将生成报文并 以 MODBUS 协议帧方式发送报文。 在 MODBUS 网络上转输。 标准的 MODBUS 口是使用一 RS-232C 兼容串行接口, 它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或 经由 Modem 组网。控制器通信使用主―从技术,即仅一设备(主设备)能初始化传 输。其它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备: 主机和可编程仪表。典型的从设备:可编程控制器。主设备可单独和从设备通信, 也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如 果是以广播方式查询的,则不作任何回应。 MODBUS 协议建立了主设备查询的格式: 设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。从设备回应 消息也由 Modbus 协议构成,包括确认要行动的域、任何要返回的数据、和一错误检 测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立 一错误消息并把它作为回应发送出去。MODBUS应用层MODBUS TCPTCPIP 其他 MODBUS +/HDLC 主/从 ETHERII/802.3 物理层 物理层 DIA/TIA-232或 DIA/TIA-485 Ethernet物理层图5MODBUS 通信线路第 11 页(共 60 页) 管道监测系统的原理和方法查询―回应:查询消息中的功能代码告之被选中的从设备要执行何种功能。数 据段包含了从设备要执行功能的任何附加信息。例如功能代码 03 是要求从设备读 保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器 开始读及要读的寄存器数量。错误检测为从设备提供了一种验证消息内容是否正确 的方法;回应,如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消 息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如 果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了 描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。 在 MODBUS 上有两种传输方式 :ASCII 和 RTU。控制器能设置为两种传输模 式中的任何一种在标准的 MODBUS 网络通信。用户选择想要的模式,包括串口通 信参数(波特率、校验方式等) ,在配置每个控制器的时候,在一个 MODBUS 网络 上的所有设备都必须选择相同的传输模式和串口参数。 1.ASCII 模式地址 功能代码 数据数量 数据 1 .. 数据 n LRC 高字节 LRC 低 字节 回车 换行 2.RTU 模式地址 功能代码 数据数量 数据 1 ... 数据 n CRC 高字节 CRC 低字 节 所选的 ASCII 或 RTU 方式仅适用于标准的 Modbus 网络,它定义了在这些网络 上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。 在本节中,介绍了用负压波法测量管道泄漏定位的原理,现场总线在工业中的 应用, 工业以太网的简单概述和 TCP/IP 协议的特点以及 MODBUS 协议的来源与现 状,基于 MODBUS 的通信原理。 基于 MODBUS 协议的管道监测系统3 系统的硬件设计根据现场情况和监测系统的原理,采用整体框图如图 6 所示,用于管道的实时 监测。我们设计了采用分布式结构,通过 AD 采样后,得到压力、流量和温度的数 字量。再将数据通过远程通讯(有线或无线)发送到服务器进行处理。当原油在管 道输送过程中一旦发生异常,通过所 Modbus 协议进行数据的远程传输,系统会自 动进行原油是否漏失的判断, 一旦出现问题,将会自动报警, 并确定具体漏失位置, 完全实现了智能监测。整体框图结点一 管 道 结点二压 力流 量温 度数据采集 系统压 力流 量温 度测试仪数据处理 转换系统 通讯系统测试仪光纤通讯图6 系统整体框图光纤通讯整个系统需要满足以下要求:在对外围设备所传输到的电流进行处理时,系统 同时发送和接收以太网数据。系统能够与多个主机建立连接,可以同时发送数据给 多个连接的主机,也可以同时接收多个主机发送的数据;系统资源允许建立多个网 络连接数,当资源耗尽时,系统拒绝建立新的连接。其电路方框图如图 7 所示。第 13 页(共 60 页) 系统的硬件设计阀门状态DI温度 压力 流量 调理 AD 采样dsPIC 30F4013以 太 网 接 口DO控 制 中 心AO阀门控制阀门控制图 7 系统电路方框图3.1 器件选型系统要实现对管道的实时监测实际就是要对管道的压力,流量,温度的数据进 行实时的采集,然后经由数据处理转换系统对数据进行处理,再经由于以太网的接 口电路,通过网线把数据传至上位机进行处理,所以本系统的器件选型主要为: 3.1.1压力传感器的选型 压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环 境,本课题中主要用于原油管道中的液体压力,所以选择美国麦克传感器公司的 SM5651 压力传感器。 SM5651 压力传感器为陶瓷基底贴装高稳定压阻式压力传感器芯片,利用陶瓷基板 上的薄膜电阻进行零度校正、零点温度补偿和灵敏度温度补偿。SM5651 只能用恒 流驱动,一个额外的电阻修剪正常化的外部差分放大器的输出提供了跨度校准。而 SM5652 在恒压激励下对输出信号很容易进行放大。 SM5651 芯片有额外的增益电 阻,采用恒流激励,SM5652 采用恒压激励。 基于 MODBUS 协议的管道监测系统性能参数 测试的条件是:SM5651 激励电流源为 1.5mA,室温为 25℃;SM5652 激励电压源 为 10.00V DC,室温 25℃。 最小值 激励源 激励电压源 DC(SM5652) &0 激励电流源 DC(SM5651) &0 满量程输出 SM5651 满量程输出 SM5652 满量程输出 零点输出 温度系数 满量程温度系数 零点温度系数 温度迟滞性 准确度 线性度(非线性误差) 重复性 压力迟滞性 灵敏度匹配性 阻抗(SM5651) 输入阻抗 输出阻抗 阻抗(SM5652) 输入阻抗 输出阻抗 4.50 2.00 8.00 2.50第 15 页(共 60 页)典型值最大值单位10.00 1.5020.00 3.00V mA25.0 24.5 -2.0045.0 25.0 +0.2075.0 25.5 2.00mV mV mV-0.65 -1.00 -0.30+0.20 +0.20 +0.050.65 1.00 0.30%FS %FS %FS-0.30 -0.30 -0.30 -2.0+0.05 +0.05 +0.05 -0.2+0.30 +0.30 +0.30 +2.0%FS %FS %FS %FS1.80 2.703.00 3.303.80 3.80kΩ kΩ25.00 3.80kΩ kΩ 系统的硬件设计温度范围 补偿温度 工作温度 存储温度 动力特性 耐压 爆破压力 电气连接 SM5651 管脚输出 1 2 3 4 -Singnal Out -In + Singnal Out +In 8 7 6 5 NC NC Gainset Resistor Gainset Resistor 10 15 Rated FS Rated FS +0 -40 -40 +60 +125 +125 ℃ ℃ ℃图85651 外部引脚图 基于 MODBUS 协议的管道监测系统3.1.2流量传感器选型 考虑到油流量传感器选型田污水成分复杂,污水呈酸性且腐蚀性强,生产区温度 变化范围大等因素,污水流量计选用德国 E+H 公司的 PROline Promag 50 电磁流量 计。 测量原理: 法拉第电磁感应定律指出,导体在磁场中运动时会产生感应电压。在电磁仪表中, 流动介质相当于运动的导体。与流速成比例的感应电压用两个测量电极检出并传送 到放大器。流体体积根据管道直径进行计算,恒定磁场由交变极性的开关直流电流 产生。 电气连接图如图 9 所示,PROline Promag 50 电磁流量计特点: ? 标称直径 DN 25?2000 ? 硬橡胶或聚氨基甲酸乙脂衬里 ? 接头长度符合 DVGW 和 ISO 标准 ? 测量准确度高:±0.5 % 选项±0.2 %图9电磁流量计电气连接图 第 17 页(共 60 页) 系统的硬件设计3.1.3温度传感器的选型 温度传感器 PT100 是一种稳定性和线性都比较好的铂丝热电阻传感器,可以工 作在 -200℃ 至 650℃ 的范围.本电路选择其工作在 -19℃ 至 500℃ 范围. 整个电路分为两部分,一是传感器前置放大电路,一是单片机 A/D 转换和显示,控制, 软件非线性校正等部分. 工作原理: 传感器的接入非常简单,从系统的 5V 供电端仅仅通过一支 3K92 的电阻就连 接到 PT100 了.这种接法通常会引起严重的非线性问题,但是.由于有了单片机的软 件校正作为后盾,因此就简化了传感器的接入方式. 按照 PT100 的参数,其在 0℃ 到 500℃ 的区间内,电阻值为 100 至 280.9Ω, 我们 按照其串联分压的揭发, 使用公式: Vcc/(PT100+3K92) PT100 = 输出电压 * (mV) , 可以计算出其在整百℃时的输出电压,见下面的表格: 温度 ℃ 0 1 100 150 200 300 350 400 450 500 PT100 阻值 Ω 100.00 100.39 138.51 157.33 175.86 212.05 229.72 247.09 264.18 280.98 传感两端电压 mV 124.38 124.8 170.64 192.93 214.68 256.59 276.79 296.48 315.69 334.423.1.4主CPU的选型 系统的硬件系统中不仅考虑到硬件功能的实现方法,而且还针对工作环境的要 求进行了优化设计。 所以模块的 CPU 选择采用 Microchip 公司生产的 DSPIC30F4013 芯片,该芯片是 Microchip 推出的带有 DSP 功能的中高端 CPU,其主要性能如下: 基于 MODBUS 协议的管道监测系统改进的高性能 RISC CPU: ? 改进的哈佛架构, 优化的 C 编译器指令集架构,灵活的寻址模式; ? 83 条基本指令,24 位宽指令,16 位宽数据路径; ? 最高 48 KB 的片上闪存程序空间,2 KB 的片上数据 RAM,1 KB 的非易失性 数据 EEPROM; ? 16 x 16 位的工作寄存器阵列; ? 运行速度最高为 30 MIPS; ? 最多 33 个中断源; ? 双数据取操作,模寻址和位反转寻址模式; ? 两个带可选饱和逻辑的 40 位宽累加器,17 x 17 位单周期硬件整数/小数乘法 器,所有 DSP 指令均为单周期指令; dsPIC30F 系列器件采用功能强大的 16 位架构, 无缝集成了单片机(MCU)的控 制功能和数字信号处理器的计算能力。 因此是以高速、重复计算和控制为基础的 应用的理想选择。第 19 页(共 60 页) 系统的硬件设计图 10dsPIC30F4013 功能框图 基于 MODBUS 协议的管道监测系统3.1.5dsPIC30F4013 12位A/D转换器 dsPIC30F4013 单片机有一个片内 12 位 A/D 转换器,具有以下主要特点: ? 逐次逼近寄存器(SAR)转换; ? 最大 200 ksps 的转换速度; ? 最大 16 个模拟输入引脚; ? 外部参考电压输入引脚; ? 单极性差分 S/H 放大器; ? 自动通道扫描模式; ? 可选转换触发源; ? 16 字转换结果缓冲器; ? 可选缓冲器填充模式; ? 四种结果对齐选择; ? 在休眠和空闲模式下运行;图 1112 位高速 A/D 框图第 21 页(共 60 页) 系统的硬件设计图 11 给出了 12 位 A/D 的框图。12 位 A/D 转换器最多可以有 16 个模拟输入 引脚,指定为 AN0-AN15。在基于 MODBUS 协议通用控制器的研究中我们采用 AN1-AN5、AN8-AN10 为模拟输入引脚。 dsPIC30F4013 单片机中 A/D 模块有六个控制和状态寄存器, 这些寄存器为: ADCON1、 ADCON2、 ADCON3、 ADCHS、 ADPCFG、 ADCSSL。 ADCON1、 ADCON2 和 ADCON3 寄存器用来控制 A/D 模块的工作。ADCHS 寄存器用于选择连接到 S/H 放大器的输入引脚。ADPCFG 寄存器用于将模拟输入引脚配置为模拟输入或 数字 I/O。ADCSSL 寄存器用于选择要被扫描的输入顺序。A/D 转换结果缓冲器包 含一个 16 字双端口 RAM,称为 ADCBUF,用于缓存 A/D 结果。16 个缓冲器单元 分别称为 ADCBUF0、ADCBUF1、ADCBUF2、??ADCBUFE 和 ADCBUFF。在 基于 MODBUS 协议通用控制器的研究中我们将 A/D 转换结果存放在 ADCBUF0、 ADCBUF2、??ADCBUF7 中。 6) I/O 口扩展芯片进行选型 由于系统开关量输入输出点数较多,仅仅利用 dsPIC30F4013 自带的 I/O 口 是远远满足不了设计要求的,因此必须进行数据扩展。所以要对 I/O 口扩展芯片进 行选型,本课题选择的是 PCF8574 1.结构框图 图 12 为 PCF8574 的结构框图,主要由四部分组成,即 IIC 接口的输入滤 波器和 IIC 总线控制器,I/O 口的移位寄存器与并行 I/O 口中,/INT 输出的低 通滤波、中断逻辑电路和上电复位电路。其中 A0、A1、A2 为引脚地址。 当输入口 P0-P7 中任一个引脚的状态产生变化后,经过中断数据有效时间 t 后,/INT 产生一个中断请求,中断请求在随后的读或写操作后复位。图 12PCF8574 结构框图 基于 MODBUS 协议的管道监测系统8 位并行 I/O 口为准双向口、输出锁存,PCF8574 每一位的结构如图 13 所 示。输入数据由主器件通过 IIC 总线对 PCF8574 的读操作实现,而输出数据则 由主器件通过 IIC 总线的写操作实现。 PCF8574 为准双向口,作为输入时应置锁存器为高电平。在具体应用时,应 事先选用主发送方式对 PCF8574 进行写入 1 的操作,然后才可以进行读取数据 的操作。图 13PCF8574 的口结构框图2.PCF8574 信号时序 图 14 是 PCF8574 作为输出口的信号时序,从地址中前四位 0100 是其器件 地址,图 15 是 PCF8574 作为输入口的信号时序,其中还包括了 INT 中断信号的 时序。图 14 PCF8574 作为输出口的信号时序第 23 页(共 60 页) 系统的硬件设计图 15PCF8574 作为输入口的信号时3.2 系统硬件电路的设计系统的硬件电路设计主要包括模拟量采集电路,开关量输入输出电路, dsPIC30F4013 与以太网接口电路的设计 3.2.1 dsPIC30F4013的最小系统 电阻 R1、R2 分别取值 300 ? 、10K,电容 C1、C2、C3、C4 分别取值 10u、0.1u、 30P、30P,晶振 OSC 取值 11.0592MHZ,主控制芯片选择微芯公司 16 位单片机 dsPIC30F4013。 通过二位选择开关选择在线编程或者复位, 当①②连通时在线编程, ②③连通时复位。具体设计电路如图 16 所示:图 16 dsPIC30F4013 最小系统 基于 MODBUS 协议的管道监测系统3.2.2 模拟量采集电路 模拟信号采样通道结构 图 17 给出了模拟信号采样通道的结构。整个通道由现场一次表、信号隔离、信号 调理、及 dsPIC30F4013 微处理组成。其中,一次表有流量传感器、液位传感器、 压力传感器等;一次表变送的电流或电压信号经过信号隔离器(隔离配电器)转换为 4-20mA 的标准信号并与现场信号隔离;采集的电流信号经过信号调理通道处理之 后送到微处理器自带 A/D 转换器进行模数转换然后再进入微处理器处理单位。图 18模拟信号采样通道结构信号隔离端子的选用 由于一次表接线方式的差异,各信号采集通道选用的隔离端子也不相同。信号隔离 端子品种繁多,接口方式也不尽相同,如何正确选择使用是设计中的重要问题。图 4-5 标示出一个隔离端子排与外部仪表相联接图,用以说明选择方法。图中隔离端 子排表示它是由能够应对各种接口功能的隔离端子组成。图 19模拟信号隔离第 25 页(共 60 页) 系统的硬件设计图中 A 表示要通过隔离端子向数据采集通道送信号的外部仪表; 表示接收隔离端 B 子信号的仪表设备。若外部仪表为能输出 4-20mA 的 A 方式,接收信号的数据采集 通道为仅由一个取样电阻构成的 B 方式接口, 则应选用具有信号隔离功能的型号为 WS1523 的隔离端子;若外部仪表为 C 方式,信号采集通道为 B 方式接口,则要选 用能给二线制变送器配电的型号为 WS1525 的隔离式配电器,既可以供电,又可以 起隔离作用。若接收外部仪表信号的信号采集通道不止一个,则应该选用相应的信 号隔离分配器。 模拟量采样通道信号调理电路设计 AI 端输入 4~20mA 电流信号经 100 ? 取样电阻 R3 变为 0.4V~2V 输入电压;去耦 电容 C5 滤去纹波,避免由于电流的突变而使电压下降;RC 低通滤波电路,最大截 止频率fH ? 1 2? R 4 C 6 ? 1 2 ? ? 10 ? 103? 1 ? 10?6? 15 . 92 HZ(4-1)输入电压经运算放大器 AD8629 同向放大 2.5 倍,AN 端输出 1~5V 电压信号[4]。 具体设计电路如图 20 所示:图 20模拟量采样通道电路3.2.2 开关量输入输出通道设计 由于系统开关量输入输出点数较多, 仅仅利用 dsPIC30F4013 自带的 I/O 口是远远满 足不了设计要求的,因此必须进行数据扩展。PCF8574 是 Microchip 公司生产的可 编程输入输出接口芯片可用于系统的 I/O 口扩展。 21 给出了开关量输入通道的结 图 基于 MODBUS 协议的管道监测系统构图。整个通道由光隔、信号调理单元、单片机构成。单片机查询 RB11、RB12 引 脚电位和通过 IIC 协议查询 PCF 引脚的电位,便可得知开关量输入的状 态。图 21开关量输入通道开关量输入通道信号调理电路设计 开关量信号即数字信号。开关量信号的变化不是连续的,即跳跃变化。相对于 模拟信号它具有抗干扰能力强的特点,广泛应用于现代电子技术信号处理中。 光电耦合器 TLP521 最大输入电流 50mA, 限流电阻 R7、 R10、 分别取值 2K。 R1324 V 2 ? 10 ?3? 12 mA ? 50 mA(4-2)数字电路有三种状态:高电平、低电平、和高阻状态,上拉电阻 R8、R11、R14 就是将不确定的信号钳位在高电平,同时起限流作用。RC 滤波在前一小节已 详述,此处不再做解释。部分具体设计电路如图 22 所示:第 27 页(共 60 页) 系统的硬件设计图 22 开关量输入电路开关量输出通道电路设计 图 4-20 给出了开关量输出通道的结构图。整个通道由单片机、光电隔离、继电器输 出单元构成。图 23 开关量输出通道电阻R20起限流作用取值500 ? ,L3为继电器DS2Y-S-DC12V线圈,通过二位选 择开关选择常开触点S1或常闭触点S2作为无源开关量信号输出,当L3得电时改变开 关量信号的输出状态。具体设计电路如图4-21所示: 基于 MODBUS 协议的管道监测系统图24开关量输出电路3.2.3 dsPIC30F4013 与以太网的接口电路 主 CPU 模块的硬件设计中以太网接口电路的设计是其中较为重要的一部分。在 此电路设计中采用了 MicorChip 公司的 ENC28J60 带 SPI 接口的独立以太网控制器, 其与 DSPIC30F4013 接口电路如图 9 示. 采用 SPI 接口的以太网控制器使得电路设计变的较为简洁,所占用 CPU 的引脚较 少。ENC28J60 兼容 IEEE 802.3 的标准,支持一个带自动极性检测和校正的 10BASE-T 端口,支持全双工和半双工模式,可编程在发生冲突时自动重发,可编 程自动拒绝错误数据包,最高速度可达 10 Mb/s 的 SPI 接口。 ENC28J60 使用两个中断引脚的七个中断源,其中包括接收数据包待处理中断标 志位,这样在程序设计中可用中断对接收数据包进行处理,而不用查询方式,减少 对 CPU 资源的占用。在以太网控制器的接口信号中,除地址数据总线是双向的 外,TRDY 信号由以太网控制器产生,方向为从以太网控制器至 PCI 接口;其余信号都 由接口部分产生,方向是从 PCI 接口至以太网控制器。第 29 页(共 60 页) RESETaCS-ENCaSCKaMOSI-MCUaMISO-MCUaINT1aINT0a368DIODEDDIODEDDIODEDDIODED74HC08U5A74HC08U5B74HC08U5C????3.3VCC1245910R MISO-ETHa WOL-ETHaRE INT-ETHa?SRRE?SRRE? 5 VCCSRRE?SMISO-ETHaWOL-ETHaINT-ETHaGNDG GN ND D1%2K10R15 FuC16TPIN-图 25TPIN+ 1 1 1 1 1 4 3 2 1 0 为 L 钟 制 C NOTE: ENC28J60 E L RBIAS TPIN+ TPINVssrx RESET 半 D K 源 器 双 灯 。 或 引 工 的 ( 其 脚 TPOUT+ TPOUT可 他987654321UCSCKSSWOLINTCLKOUTVSSVcap3PCI 时序对以太网控制器进行操作。S I O 。 连 悬 Vddtx Vsstx Vddrx Vddpll Vsspll OSC1 Vssosc Vddosc OSC2 LEDB LEDA 接 空 器 作 V D 方 ) 件 为 D 式 的 主 1 1 1 1 1 2 2 2 2 2 2 2 2 2 时 控 5 6 7 8 9 0 1 2 3 4 5 6 7 8 TPOUTR R ? ? TPOUT+ 3 3 0 0 0 0 Y-LED G-LED G N VCC3.3 D 5 R 5 R 5 R 5 R 1 0 ? 1 1 ? ? 1 0 0 0 ? % % % % 1 2 0.01uF C ? 0.01uF C 2 Y ? G 5 1 M N G D N D 6 磁 L 1 C17 1 C18 0 ? 8 8 欧 珠 p p系统的硬件设计dsPIC30F4013 与以太网接口电路VCC3.3 GND CHS 机 壳 RDRD+ 地 TDTD+ 8 7 6 5 4 3 2 1 4 6 NOTE: RJ45-HR911103Ca 、 8 7 6 5 4 3 2 1 5 脚 连 1 1 1 9 0 1 2 至 脚 RJ45 悬 9 1 1 1 0 1 2 空 5 VCCFFGN外部存储器的时序对 PCI 接口进行读写,再由 PCI 接口将这种读写操作时序转换成 接口设计的思路是:可将 PCI 接口当作单片机的外部存储器看待,单片机以读写D 铁 壳 G-LED Y-LED 基于 MODBUS 协议的管道监测系统4 系统软件设计4.1 系统软件的功能概述过两边的传感器对实时监测检测到的压力,温度和流量的数据进行采集,采集 到的数据通过处理电路对数据进行处理,数据通过 dsPIC30F4013 微处理器从数字 量到模拟量的转化,在通过以太网的接口电路经由网线传至控制中心的 PC 机上进 行算法处理,从而完成对管道的监测。开始包含头文件,定义一些全局变 量,宏定义,定义任务堆栈, 声明任务,定义消息邮箱main函数,操作系统初始化, 创建AD转换函数任务以太网接收任务,接收消息邮 箱并将数据传送到终端显示结束图 26 系统主程序的整体框图软件设计是整个系统设计的重要组成部分,在硬件系统完成数据格式转换以及控制 信号处理等主要功能基础上,软件系统与硬件系统遵循一个标准的接口,在这个接 口之上来传递数据信号和控制信号。程序的整体框图如图 26 示4.2 下位机的软件设计下位机设计包括 AD 模块和开关量的输入输出模块。 4.2.1AD模块设计第 31 页(共 60 页) 系统的软件设计基于 MODBUS 协议通用控制器的研究设计有 8 路模拟量采集通道,采用 dsPIC30F4013 单片机片内 12 位 A/D 转换器进行 A/D 转换,在本系统中我们采用 查询方式来对模拟量通道进行数据采集,其接口初始化程序如下: void ini_ad(void) { ADPCFG=ADPCFG&0b0001; //配置 AN1-AN5、 AN8-AN10 模拟输入引脚处于模拟模式, 禁止端口读取输入, A/D 采样引脚电压 ADCON1=0x0000; // A/D 转换器关闭 ADCHS =0x0001;// 通道 0 正输入为 AN1 ADCSSL=0b1110;// 选择对 AN1-AN5、AN8-AN9 输入进行扫描 ADCON3=0x0003;// A/D 转换时钟选择 ADCON2=0x0000;// :选择参考电压 AVDD } 。。 。。 本设计中循环采集八路模拟量,通过 A/D 输入选择寄存器 ADCHS (CH0SA&3:0&)选择通道。12 位转换好的数字量存放在数据字寄存器 ADCBUF0-ADCBUF7 中,为保证采集数据的精确度我们设计了滤波程序,具体实 现是采集数据 2 次然后求平均值。A/D 采样程序流程见图 27 所示: 基于 MODBUS 协议的管道监测系统图 27 A/D 采样程序流程图4.2.2开关量的输入模块设计 基于 Modbus 协议通用控制器设计有 10 路开关量(DI)输入,2 路 DI 输 入经过光隔后输入单片机 dsPIC30F4013 RB11、RB12 引脚,8 路 DI 输入经过光 隔后接 I/O 扩展芯片 PCF 引脚,PCF8574 地址为 0。在本系统中我们采 用读 PCF 引脚电平来对开关量输入通道进行状态采集,其接口程序如下[5]: unsigned char i2c_read(unsigned char address) { unsigned char erro_count=0x00; unsigned char return_data=0x00;第 33 页(共 60 页) 系统的软件设计//start I2CCONbits.SEN=1; // Wait till Start sequence is completed while(I2CCONbits.SEN==1&&erro_count&10000){erro_count++;}; if(erro_count&=10000){return_data=0x01;} //Write Slave address and set master for transmission I2CTRN= // Wait till address is transmitted while(I2CSTATbits.TRSTAT==1&&erro_count&10000){erro_count++;}; if(erro_count&=10000){return_data=0x01;} // read string of data I2CCONbits.RCEN=1; while(I2CSTATbits.RBF==0){}; return_data=I2CRCV; // Wait till address is transmitted while(I2CSTATbits.TRSTAT==1&&erro_count&10000){erro_count++;}; if(erro_count&=10000){return_data=0x01;} I2CCONbits.PEN=1; //Wait till stop sequence is completed while(I2CCONbits.PEN==1&&erro_count&10000){erro_count++;}; if(erro_count&=10000){return_data=0x01;} return return_ 4.2.3开关量输出模块设计 基于 MODBUS 协议通用控制器利用 dsPIC30F4013 内部资源 PWM 模块,设计了 2 路模拟量输出,通过二位选择开关选择 1-5V 或 4~20mA 信号输出,其接口初始化 程序如下: void ini_ioinput(void) { TRISD= TRISD&0 //RD1,RD0 是 DO 输出,配置为 00 基于 MODBUS 协议的管道监测系统LATD=LATD|0x0003;TRISF= TRISF&0 //RF1,RF0 作为 DO 输出,配置为 00 LATF= LATF|0x0003;4.2.4ENCJ8260驱动程序设计 单片机 dspic30f4013 与 ENCJ8260 芯片用 SPI 的模式进行通信控制,dspic30f4013 为 主机 ENCJ8260 为从机驱动程序主要包括如下几个函数: 1void System_Reset(void)函数对 dspic30f4013 进行复位处理。 2 void init_SPI(void)函数主要对 dspic30f4013 与 ENCJ8260 芯片用 SPI 的模式进行通信 控制。 3void encWriteOp(unsigned char op,unsigned char addr,unsigned char outdata) 函数用 来向 ENCJ8260 芯片写入地址. 3unsigned char encReadOp(unsigned char op,unsigned char addr) 函数用来向 ENCJ8260 芯片写入数据。 4 unsigned char encReadOp(unsigned char op,unsigned char addr) 函数用来从 ENCJ8260 读数据。 5 void encSetBank(unsigned char addr). 函数用来设置 ENCJ8260 的寄存器。 6 unsigned char encRead(unsigned char addr) 函数用来读 ENCJ8260 的寄存器的数据。 7 void encReadBuffer(unsigned int temp_len,unsigned char *indata) 函数用来读 ENCJ8260 缓冲区内的数据。 8 void encWrite(unsigned char addr,unsigned char outdata)函数用来选择寄存器。 9 void encWrite(unsigned char addr,unsigned char outdata)函数用来设置 MAC 地址。 10 void encPhyWrite(unsigned char addr, unsigned int outdata)用来写 PHY 寄存器地址。 11 void encInit(void)函数对 ENCJ8260 芯片进行初始化。 12void EthdevSPI_Sendpack(void)发送数据函数。 13unsigned int EthdevSPI_read(void)读缓冲区数据。 14static void etherdev_timer0_isr(void) interrupt 1 using 1 中断服务函数。单片机 dspic30f4013 通过接口芯片 ENCJ8260 实现网口通信,其 ENCJ8260 的驱第 35 页(共 60 页) 系统的软件设计动程序主要包括以上函数。上面已经简要介绍了各个函数的主要功能,在单片机的 主程序里调用如上函数便可以实现网络通信。其具体代码将在附录里给出。4.3上位机的软件设计通过 VB 可视化编程,远端 PC 利用网线向单片机发出命令,单片机通过以太 网接口以 MODBUS 协议进行通信(串行接口作为备用通信口),并将接到的单片机 数据实时传送给远端 PC,以实现高速远程情况下 PC 与单片机通信的要求。 VB 编程人机交互界面的特点 1、设计出来的监控画面比较容易且美观; 2、对于实时采集监控系统,定要进行对实时数据的存储与历史查询,最好用 ACCESS 数据库,而 VB 与 ACCESS 有比较好的联系,比较与编程,DELPHI 其实 对 ACCESS 也较容易实现,但其语句太过于麻烦,如总是要输入 BEGIN...END 之 类的; 3、VB 与 Windows 是同一家公司的产品,控件通用,所以系统设计出来后兼容性 好。图 28上位机人机交互界面数据显示如图 28 所示,为上位机用 VB 编写的人机交互界面,界面中有对首末站压力, 流量和首站温度的监测,后面为其检测值,当管道正常时,数据值正常,运行状态 灯显示为绿色;检测值超过阈值时,表示管道泄漏,状态灯变红,报警。 基于 MODBUS 协议的管道监测系统第 37 页(共 60 页) 系统的软件设计5 系统调试及结果调试是系统设计的重要环节。整个系统调试分成两个部分:系统硬件调试和系 统软件调试。现将系统的软硬件调试单独进行简要介绍。 在对硬件平台的搭建和软件部分的设计完成以后,就可以将编译所得的最终生 成代码下载到目标系统上运行测试,这部分代码包括硬件系统的启动代码、TCP/ IP 协议栈、AD 采样电路以及应用程序部分。测试中使用 PC 机作为上位机。使用 交叉网线分别连接 PC 机和目标系统的 RJ45 接口,同时设置 IP 地址、子网掩码, 以使它们在同一网络通讯。 测试一:测试单片机是否已经与 PC 机连通。在 PC 机打开开始\运行\cmd,进入 dos 命令,然后用 ping 命令键入“192.168.1.102 ” ,运行结果如图 23 所示 。图 29对单片机 PING 的结果图在 PC 机上运行 TCP&UDP 测试软件和 UDP 通讯程序作为上位机软件进行测 试,在 UDP 通讯程序中设置远程主机(即目标系统)地址为 192.168.1.101,远程端口 号为 1025, 输入一组数据, TCP&UDP 测试软件创建连接的情况下, TCP&UDP 在 在 测试软件的接收区中接收到消息。同样发送其他信息,在接受区中收到的消息键盘 输入的信息一样。表明双方通信的成功。运行结果如图 24 所示。 根据上面两个结果,说明说明单片机与 PC 机已经连通。 基于 MODBUS 协议的管道监测系统图 30TCP&UDP 测试软件的结果图测试二:测试 AD 采样的数据是否已经传输到 PC 机上。 由图 25 可以看出,AD 采样的数据传输到 PC 机上,并能正常使用。图 31PC 机显示采样的结果第 39 页(共 60 页) 系统的调试及结果该系统是一套全自动实时监测系统。采用分布式结构,可以通过远程通讯(有线 或无线)来进行实时监测。当原油集输过程中一旦发生异常,系统会自动进行原油 是否漏失的判断,自动报警,并确定具体漏失位置,完全实现了智能监测。因此, 可使泄漏点在最短时间内得到修复,使损失降低到最最低。所以,该系统对于有效 地解决输油管道由于腐蚀穿孔或认为破坏造成的泄漏,保证原油输送,安全生产可 起到重要的作用。 系统操作简单方便,界面友好。系统为自动运行方式,无需人为设置参数, 启机既进入系统运行画面(首末站显示各自界面) ,显示管道当前运行状态,沿线 地图及其各重要参数和趋势曲线。当管道发生泄漏时,系统自动发出声光报警,显 示泄漏点距离及泄漏时刻,在地图上用闪烁的 X 标记泄漏位置,对各要参数进行记 录并伴有急促的报警声, 来提示工作人员。 记录查询功能强大, 可对历史报警记录, 历史参数曲线进行查阅,打印输出等。报表功能全面,可记录首、末站原油输送情 况,及时核对流量,早发现泄漏及其他异常情况。图 32 系统人机交互界面系统曲线功能完善,分为历史曲线和及时曲线。每幅历史曲线图的坐标都是根 基于 MODBUS 协议的管道监测系统据具体情况自动选择的,以获得最佳效果,尤其是曲线上一些特殊点的坐标,更方 便用户对曲线的立体识别:即时曲线功能充分利用现有图幅来描绘泄漏过程,无论 一次泄漏量多少、时间长短,系统至少都会将过程初期完整的描绘在一张图纸上。 用户可以选定图中任意范围进行放大:首先点击“STOP”按钮,然后用鼠标点击对 应的图片,并拖动选定范围,再单击放大按钮即可。如想曲线继续运行请点击复位 按钮,具体操作见下图:图 33 系统曲线图通过实践证明,该系统从原理和数学模型方面有别并领先于在用的其它类型的 产品,其最大的技术优势在于精度高、稳定性强、功能全面,极大的方便了生产管 理,能及时、直观的掌握实时的生产运行情况,有着明显的技术先进性。 由于该系统所有装置只安装在管道的首尾两端,管线沿途部分没有任何辅助设施, 从而减少了改造和维护工作量,便于系统的管理。该系统运行后,可以及时的反映 管道生产的运行情况,提高了安全生产管理水平,减轻了劳动强度,对及时发现并 处理因管道老化和人为破坏造成的管道泄漏发挥了重要的作用,减轻了管道泄漏对 环境污染的危害,减少了因泄漏污染造成的损失,具有较强的生产实用性和良好的 经济效益、社会效益。第 41 页(共 60 页) 系统的调试及结果参考文献[1] 张奇兴.我国管道运输的现状和发展.中国石化[J].1998,8 ,37―39 [2] 廉小亲,苏维均,田黎明. 基于负压波法的输油管道泄漏检测定位系统[J]. 计算机工程与设 计,) : [3] 陈文明,何辅云,陈琨,杨良军. 石油管道检测中缺陷类型判别方法的研究[J]. 合肥工业大 学学报(自然科学版),) : [4] 魏庆福.现场总线技术的发展与工业以太网综述[J].工业控制计算机,-5 [5] 黄志勇,陶俊卫,李志宏.基于工业以太网技术的测控实验室方案[J]. 仪器仪表学 报.2006(6):584-585. [6] 任海兵,陈照章.工业以太网技术及改进方案.微计算机信息[J].,2007(12):130-132 [7] Jay Hendrix.Modbus protocol:Diligence in the detail is key to Success,Air Conditioning Engineering .):32-33 [8] Adam D. Design and Implementation of the LwIP TCP/1P Stack. Swedish Institue of Computer Science,2001 [9] W. Richard Stevens. TCP/IP 详解卷 1:协议[M]. 北京:机械工业出版社, 2000 [10] Kenneth D. Reed. TCP/IP 基础[M]. 3Com 公司. 北京:电子工业出版社,2002 [11] 方安平,武永谊. 基于 MDKRTX 的 Cortex-M3 多任务应用设计[J]. 技术纵横,2008,12: 30-33 参考文献致 谢经过几个月的查阅资料、整理材料、方案设计、论文写作,今天终于顺利完成 了设计和论文。首先,我要衷心地感谢我的指导老师肖老师,在这段时间准备毕业 设计的学习中我取得的每一点进步都无不倾注了他的心血。感谢肖老师在百忙之中 仍抽出时间和我研究、讨论设计中所遇到的疑点问题,直到找到解决问题的途径。 肖老师不仅在学业上给予我悉心的指导,在生活上也给予了我无微不至的关怀。他 渊博的知识、严谨的治学态度以及对学生、对教学认真负责的工作态度将对我今后 的学习和工作产生深刻影响,成为我人生宝贵的精神财富。 另外,在这期间,我还得到了很多老师和同学的热情帮助,在此也向他们表示由衷 的感谢。 最后,对评审论文的各位领导和老师表示衷心的感谢!第 43 页(共 60 页) 致谢附录附录一 4ENCJ8260 驱动程序代码void init_SPI(void){P1M0 =0xb8; P1M1 =0x40; SS=1; SPSTAT=0xC0; SPCTL = SPTCL_SPEN | SPTCL_MSTR; //选择为主机模式,SPI 使能,SPI 口只能工作在 00 模式下 }void System_Reset(void) { CS = 0;// write data SPDAT = ENC28J60_SOFT_RESET; while(!(SPSTAT & SPSTAT_SPIF)); //SPSTAT&=~SPSTAT_SPIF; SPSTAT=0xC0; CS = 1; }/*========================================================== // function: write data to addr==========================================================*/ void encWriteOp(unsigned char op,unsigned char addr,unsigned char outdata) { CS = 0; 附录// send write command SPDAT = op | (addr & ADDR_MASK); while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT=0xC0; // write data SPDAT = while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT=0xC0; CS = 1; } //写 1 的时候进行清零操作/*========================================================== // function: read data from addr==========================================================*/ unsigned char encReadOp(unsigned char op,unsigned char addr) { CS = 0;// send read command SPDAT = op | (addr & ADDR_MASK); while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT=0xC0; // read data SPDAT = 0x00; while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT=0xC0;第 45 页(共 60 页) 基于 MODBUS 协议的管道监测系统// do dummy read if needed if(addr & 0x80) { SPDAT = 0x00; while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT=0xC0; } indata = SPDAT;CS = 1;return (indata); }/*========================================================== // function: set enc28j60 register bank==========================================================*/ void encSetBank(unsigned char addr) { // set the bank (if needed) if((addr & BANK_MASK) != Enc28j60Bank) { // clear the set encWriteOp(ENC28J60_BIT_FIELD_CLR, ECON1, (ECON1_BSEL1|ECON1_BSEL0)); // set the bank encWriteOp(ENC28J60_BIT_FIELD_SET, ECON1, (addr & BANK_MASK)&&5); 附录Enc28j60Bank = (addr & BANK_MASK); } }/*========================================================== // function: read regsiter==========================================================*/ unsigned char encRead(unsigned char addr) { // set the bank encSetBank(addr); // do the read return encReadOp(ENC28J60_READ_CTRL_REG, addr); } /*========================================================== // function: read data buffer form enc28j60==========================================================*/ void encReadBuffer(unsigned int temp_len,unsigned char *indata) { CS = 0; // send read command SPDAT = ENC28J60_READ_BUF_MEM; while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT = 0xC0; while(temp_len--) { // read data SPDAT = 0x00; while(!(SPSTAT & SPSTAT_SPIF));第 47 页(共 60 页) 基于 MODBUS 协议的管道监测系统*indata++ = SPDAT; SPSTAT = 0xC0; } CS = 1; } /*========================================================== // function: write regsiter==========================================================*/ void encWrite(unsigned char addr,unsigned char outdata) { // set the bank encSetBank(addr); // do the write encWriteOp(ENC28J60_WRITE_CTRL_REG, addr, outdata); }/*========================================================== // function: set MAC address==========================================================*/ void nicSetMacAddress(void) { // write MAC address // NOTE: MAC address in ENC28J60 is byte-backward encWrite(MAADR0, UIP_ETHADDR5); encWrite(MAADR1, UIP_ETHADDR4); encWrite(MAADR2, UIP_ETHADDR3); encWrite(MAADR3, UIP_ETHADDR2); encWrite(MAADR4, UIP_ETHADDR1); encWrite(MAADR5, UIP_ETHADDR0); 附录} /*========================================================== // function: write PHY regsiter==========================================================*/ void encPhyWrite(unsigned char addr, unsigned int outdata) { // set the PHY register address encWrite(MIREGADR, addr);// write the PHY data encWrite(MIWRL, outdata); encWrite(MIWRH, outdata&&8); // wait until the PHY write completes while(encRead(MISTAT) & MISTAT_BUSY);} /*========================================================== // function: chip init==========================================================*/ void encInit(void) { // initialize I/Oinit_SPI();// perform system reset System_Reset(); // check CLKRDY bit to see if reset is complete第 49 页(共 60 页) 基于 MODBUS 协议的管道监测系统delay_ms(NUM);while(!(encRead(ESTAT) & ESTAT_CLKRDY));// do bank 0 stuff // initialize receive buffer // 16-bit transfers, must write low byte first // set receive buffer start address encWrite(ERXSTL, RXSTART_INIT&0xFF); encWrite(ERXSTH, RXSTART_INIT&&8); // set receive pointer address encWrite(ERXRDPTL, RXSTART_INIT&0xFF); encWrite(ERXRDPTH, RXSTART_INIT&&8); // set receive buffer end // ERXND defaults to 0x1FFF (end of ram) encWrite(ERXNDL, RXSTOP_INIT&0xFF); encWrite(ERXNDH, RXSTOP_INIT&&8);//set send buffer end encWrite(ETXNDL,RXSTART_INIT&0xFF); encWrite(ETXNDH,RXSTART_INIT&&8);if(encRead(ERXNDL)==0xff) { P11=0; }//add1//bank 1滤波器的设置 //1:and,0:or the second bitencWrite(ERXFCON,0x60); 附录// do bank 2 stuff // enable MAC receive encWrite(MACON1, MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS); // bring MAC out of reset encWrite(MACON2, 0x00);if((encRead(MACON1)==(MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXP AUS))&&(encRead(MACON2)==0x00)) { } P12=0; //add1// enable automatic padding and CRC operations 位操作//改,只能对 ETH 类进行encWrite(MACON3,MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FR MLNEN|MACON3_FULDPX);// set inter-frame gap (non-back-to-back) encWrite(MAIPGL, 0x12); encWrite(MAIPGH, 0x0C); // set inter-frame gap (back-to-back) encWrite(MABBIPG, 0x12); // Set the maximum packet size which the controller will accept encWrite(MAMXFLL, MAX_FRAMELEN&0xFF); encWrite(MAMXFLH, MAX_FRAMELEN&&8);// do bank 3 stuff第 51 页(共 60 页) 基于 MODBUS 协议的管道监测系统// write MAC address // NOTE: MAC address in ENC28J60 is byte-backward nicSetMacAddress();// no loopback of transmitted frames encPhyWrite(PHCON2, PHCON2_HDLDIS);encPhyWrite(PHCON1, PHCON1_PDPXMD);encPhyWrite(PHLCON,0x07b0);// switch to bank 0 encSetBank(ECON1); encWrite(EIE,0x00); encWrite(EIR,0x00); // enable packet reception encWriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); // Stop timer/ counter 0. Timer0off();// Set timer/ counter 0 as mode 1 16 bit timer. // TMOD &= 0xF0; TMOD |= 0x11;// Preload for 0.5s periodic interrupt. TH0 = ETH_T0_RELOAD && 8; TL0 = ETH_T0_RELOAD;TH1 = ETH_T1_RELOAD && 8; 附录TL1 = ETH_T1_RELOAD;AUXR=0x00; //UART initialize AUXR=AUXR|0x05; BRT=RELOAD; SCON=0x50; PCON=0x00; AUXR=AUXR|0x10; ES=1; add7//设置为 12 个时钟周期//启动计数// Enable timer/ counter 0 overflow interrupt. ET0 = 1; ET1 = 1; EA = 1; }/***********************发送接受函数********************/ void EthdevSPI_Sendpack(void) { INT8U len, INT8U * EA=0;ptr = uip_//将指针指向发送数据的首地址//是否要判断接受忙,发送未完成,DMA 操作? //写发送缓冲区首地址 encWrite(ETXSTL, TXSTART_INIT&0xFF); encWrite(ETXSTH, TXSTART_INIT&&8);第 53 页(共 60 页) 基于 MODBUS 协议的管道监测系统// Set the write pointer to start of transmit buffer area encWrite(EWRPTL, TXSTART_INIT); encWrite(EWRPTH, TXSTART_INIT&&8);len = UIP_TCPIP_HLEN + UIP_LLH_LEN; UIP_TCPIP_HLEN=40//UIP_LLH_LEN=14,leno=uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN;CS = 0;SPDAT = ENC28J60_WRITE_BUF_MEM; while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT = 0xc0;SPDAT = 0x0e; uip_buf 中//包发送方式控制量,该控制量不存放在while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT = 0xC0; MACON3 中设置 // 发送一个包控制字 0e, 确定发送方式为/****** 通过 SPI 口写进 ENC28J60 的缓冲区 UIP_LLH_LEN=14, UIP_TCPIP_HLEN=40 while(len--) { // write data SPDAT = *ptr++; while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT = 0xC0; *****/ 附录}ptr = (unsigned char *)uip_//指向应用数据区while(leno--) { // write data SPDAT = *ptr++; while(!(SPSTAT & SPSTAT_SPIF)); SPSTAT = 0xC0; } CS = 1;// Set the TXND pointer to correspond to the packet size given encWrite(ETXNDL, (TXSTART_INIT+uip_len)); encWrite(ETXNDH, (TXSTART_INIT+uip_len)&&8);encWriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS); //ECON1.TXRTS=1,开发送请求位EA=1; } /************************读缓冲器中数据****************************/unsigned int EthdevSPI_read(void) { INT8U i=0,* INT16U tlen,// check if a packet has been received and buffered第 55 页(共 60 页) 基于 MODBUS 协议的管道监测系统(encReadOp(ENC28J60_READ_CTRL_REG, EIR) & EIR_PKTIF)!=0)|| ||(encRead(EPKTCNT)==0) if(encRead(EPKTCNT)&0) { // EA=0; //清 0encWriteOp(ENC28J60_BIT_FIELD_CLR, EIR, EIR_PKTIF);// Set the read pointer to the start of the received packet encWrite(ERDPTL, (NextPacketPtr)); encWrite(ERDPTH, (NextPacketPtr)&&8);// read the next packet pointer NextPacketPtr = encReadOp(ENC28J60_READ_BUF_MEM, 0); NextPacketPtr |= encReadOp(ENC28J60_READ_BUF_MEM, 0)&&8;// read the packet length接受状态字的内容 //有tlen = encReadOp(ENC28J60_READ_BUF_MEM, 0); 效数据+填充+CRC tlen |= encReadOp(ENC28J60_READ_BUF_MEM, 0)&&8;tlen=tlen-4; // read the receive status rxstat = encReadOp(ENC28J60_READ_BUF_MEM, 0); rxstat |= encReadOp(ENC28J60_READ_BUF_MEM, 0)&&8;ptr = uip_if(tlen&UIP_BUFSIZE) 弃 {//此包太大,将丢 附录P1=P1&0 tlen = 0; } else{ encReadBuffer(tlen,ptr); } // Move the RX read pointer to the start of the next received packet // This frees the memory we just read out ERXRDPT encWrite(ERXRDPTL, (NextPacketPtr)); encWrite(ERXRDPTH, (NextPacketPtr)&&8); // decrement the packet counter indicate we are done with this packet //encWrite(EPKTCNT,(encread(EPKTCNT)-1)); //return 0; 错误//add1前移接收缓冲器读指针encWriteOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PKTDEC);EA=1; } else{ tlen=0; }}static void etherdev_timer0_isr(void) interrupt 1 using 1 { struct uip_conn xdata *uip_connr_temp= uip_ u第 57 页(共 60 页) 基于 MODBUS 协议的管道监测系统Timer0off(); // Reload timer/ counter 0 for 0.1s periodic interrupt. TH0 = ETH_T0_RELOAD && 8; TL0 = ETH_T0_RELOAD; k++; if(k&=40) { k=0; uip_connr_temp-&timer--; if(uip_connr_temp-&timer==0) } } Timer0on(); } { Timer0off();static void etherdev_timer1_isr(void) interrupt 3 using 3 { struct datatrans_state *u ts = (struct datatrans_state xdata *)(uip_conn-&appstate); Timer1off(); TH1 = ETH_T1_RELOAD && 8; TL1 = ETH_T1_RELOAD; k++; if(k&=50) { k=0; // UARTtimer++; //更新 ARP 表的 //和 k 形成 1s 的延时tick_count++; if(STAT_AB==1){ 附录ts-&count++; if(ts-&count==ab_count) } } Timer1on(); }//连接时间计数 //不同 s 时延附录二 TCP 通信服务器端和客户机端通信函数应用过程图。第 59 页(共 60 页) 基于 MODBUS 协议的管道监测系统服务器端SOCKET()创建套接字客户机端SOCKET()创建套接字bind()本地IP和端口 与套接字相连bind()本地IP和端口 与套接字相连listen()设定监听的连接数accept()等待客户的连接, 连接成功返回连接序号connect()与远程服务器连 接, 连接成功返回连接序号rec()、send()根据上面得到的 序号进行读/写操作rec()、send()根据上面得到的 序号进行读/写操作Close()关闭连接Close()关闭连接Closesocket() 删除套接字Closesocket() 删除套接字结束结束}

我要回帖

更多关于 sacred seven ost 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信