应用

技术

物联网世界 >> 解决方案 >> 物联网方案
企业注册个人注册登录

基于CAN总线结构的污水处理在线控制系统设计

  当今世界的水环境面临两大问题:水资源短缺和水污染加重。造成水污染的主要原因是工业废水、农田排水及城乡生活污水向江河湖海大量排放,造成地面水和地下水水质受到污染,严重制约了经济的发展并危害着人类的健康,因此,近年来各国对控制水污染越来越引起重视,全球都在加大和加快水污染治理的力度和速度。

  我国污水处理设备的制造水平和科技含量都比较低,本文对污水处理设备在线监测系统设计方案进行分析,并对其软件开发提供了一定的指导作用[1-2]。

  1 污水处理系统现状

  目前,对污水处理系统运行状况进行在线监测已成为发展趋势,国外已开发出一些污水处理在线监测系统,并设计了一些基于神经网络、小波变化、专家系统等技术的诊断软件。现有的污水处理在线监测系统设计方案大多采用传统的上下位机结构。下位机完成现场设备运行状况和污水处理状态信号的在线监测,大多采用工控机和单片机来实现。上位机负责污水处理状态参数的监测显示、报警、故障诊断及识别等。

  这种结构对少量设备的几个状态参数的检测,实时处理效率较高,当需要对多个设备进行监测时,上下位机通信成为系统实时性和可靠性的瓶颈。另外,这些系统的在线监测和故障诊断相对脱离,即各成一套系统,即使有些系统将两者合在一起,当多个设备对多种诊断功能提出诊断请求时,整个系统的工作效率会明显降低,造成系统集成性差,不便于软件升级和扩充[2-3]。

  2 污水处理软件开发

  为了便于用户监控和管理整个污水处理厂处理情况,本文开发了中控室通信与应用控制程序,提供了良好的人机操作界面。ADAM5000系列CAN模块与许多软件兼容,DeviceNet和CANopen可用来配置系统,建立在这两个协议上的动态链接库DLL可用于Windows程序设计。

  PCL-841附带软件包提供了7个函数,分别为初始化模块CanInitHW()、退出模块CanExitHW()、复位模块CanReset()、配置模块CanConfig()、设置正常运行状态模块CanNormRun()、发送帧模块CanSendMsg()及接收帧模块CanReceiveMsg()。其源文件在Can841.h中,运用这几个函数和DeviceNet指令集就可构成系统应用软件各个功能子程序,实现各个节点模块间数据传送数据采集和控制输出。PC机与CAN适配卡的联络采用命令的通信协议,即“命令+参数”形式和“多主竞争的总线仲裁”方式实现。适配卡设备驱动程序、动态连接库和所要开发的Ring3层应用程序的关系如图1所示。 


  Ring3应用层对CAN适配卡的访问全部通过动态链接库实现,这种访问主要包括对CAN卡的初始化、发送报文、接收报文以及其他操作。CAN卡初始化除了对CAN适配卡本身的初始化外,还包括虚拟设备驱动程序的动态加载和初始化(设置中断号和I/O地址)。

  污水处理自控软件的设计如图2所示。


  2.1 对CAN串口的操作

  适配卡PCL-841上提供了两个独立的CAN串口,对该串口的操作有几种方法可以使用,如直接使用Windows AP对该串口进行操作,使用包装好的控件(例如MSComm),也可以先把涉及到串口操作的WindowsAPI都封装到一个类里面供开发使用。在本系统中,使用一个封装好的串口类来对串口进行操作。该类能支持多串口、多线程,并能在所有主流Windows系统下使用。serialPortEx类的用户只需熟悉少数几个公共成员函数,就能轻易在自己的程序中加入串口的支持。

  必须注意的是该类并不支持串口通信协议,因为不同应用场合下可能需要使用不同的协议,在本系统中使用的是DeviceNet协议。

  2.2 实时运行数据的读取

  监控软件中设备实时运行状态的显示通过对设备实时运行数据的读取来实现。实时数据的读取通过定时发送状态请求(STATUS REQUEST)信号来实现,定时器的间隔足够小(例如1 s),那么每隔1 s监控软件都能够将其系统运行状态显示和现场设备的运行状态同步,这就保证了监控软件中系统状态显示的实时性。如果定时器的精度要求不高、定时器的间隔不是太小,使用Windows定时器就可以了,一般用SetTimer()函数来启动一个定时器,用KillTimer()函数来结束一个定时器。

  对于污水处理系统,通常每隔1 s左右读取一次系统状态信息就可以满足系统实时性的要求,因此使用Windows定时器完全可以满足要求。实时数据的读取步骤是:在监控软件启动时打开定时器,每次定时器被触发后,发送一条状态请求信号;接收到回应的状态信号后,再更新系统运行状态的显示,在下一次定时器被触发之后,再发送一条状态请求信号。不断循环,直到监控软件退出为止[2-7]。 

  3 编写程序代码

  (1)使用Visual C++6.0的应用程序向导新创建一个基于文档时间的“COMMSewageDlg”,修改标题为“污水处理自动控制系统”,其他设置全部接受默认选项。

  (2)为了使用DLL,必须将DLL驱动函数库的头文件加入工程中。方法是:从Visual C++主菜单中选择Project-Add to Project-Filesw…,在弹出的对话框中选择driver.H,单击确定即可。加入完该文件后,就可以看见DA&C常量定义、参数声明和DLL函数定义等。这些函数都可以用在将要开发的应用程序中。

  (3)选择Build菜单,选中Settings选项,在弹出的对话框中选中Link页,接着在类型栏选中Input,输入adsapi32.lib于Object/library模块中,然后单击OK按钮即可。

  (4)将SerialPort.h、SerialPort.cpp两个类文件复制到工程文件夹中,用Project-Add to Project-Files命令将上述两个文件加入工程,并在COMMSewageView.h中将头文件SerialPort.h说明:#include "SerialPort.h"。

  (5) 人工添加消息响应函数

  首先在CCOMMsewageView. h中添加串口字符接收消息WM COMM RXCHAR(串口接收缓冲区内有一个字符)的响应函数声明:

  //{{AFXes MSG(COMMSewageView)

  afx_msgLONG onCommunication(WPARAM ch,LPARAM port);

  //}}AFXes MSG

  然后在S CPortTestView.cpp文件中进行WM_ COMM- RXCHAR消息映射:

  BEGIN_MESSAGE_MAP(COMMSewageView,CView)

  //{{AFX_ MSG MAP(COMMSewageView)

  ON_MESSAGE(WM_COMM_RXCHAR, On Communication)

  //}}AFX_ MSG MAP

  END_ MESSAGE_ MAP()

  接着在S CPortTestView. cpp中加入函数的实现:

  LONG

  COMMSewageView::OnCommunication(WPARAM ch, LPARAM port){…};

  (6)在视创建时初始化串口,首先利用C1assWizardr生成OnInitialUpdate()函数;

  (7)利用C1assWizard成COMMSewageView的时间消息WM_TIMER响应函数;

  (8)在OnCommunication(WPARAM ch,LPARAM port)函数中进行数据处理。

  本文详细分析了污水处理的总体设计方案,介绍了CAN总线能实时处理上位机与下位机的数据通信,对CAN串口操作、数据的读取以及编写程序代码的步骤都进行详细的分析和介绍。

  本文的思想对我国的污水处理在线监测系统的实时显示和监控起到一定的指导作用。

  参考文献

  [1] 黄大贵.微机数控系统[M].成都:电子科技大学出版社,1996.

  [2] 蒲旺.污水处理在线监测系统及关键设备设计[D].成都:电子科技大学,2004.

  [3] 饶运涛,邹继军.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.

  [4] 邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,2002.

  [5] 金以慧.过程控制[M].北京:清华大学出版社,2002.

  [6] 李现勇.Visual c++串口通信技术与工程实践[M].北京:人民邮电出版社,2003.

  [7] 卢鸿权,黄大贵等.基十CAN总线的一体化氧化沟DCS系统方案研究[J].电子科技大学学报,2001,30(3).

  [8] 邬宽明.CAN总线系统设计中的几个问题[J].电子技术应用,1998,24(9).