基于C#实现PC机与AI调节器串口通信的实时监控系统

原文:http://www.autooo.net/classid119-id57828.html(博客园怎么不自持本地上传照片更不支持图片粘贴?)

摘要:

  本文采用C#实现了PC机与AI调解器的串口通信,将其成功地应用于过程控制试验装置的实时监控系统中。应用表明运行可靠,操作方便,极大地扩展了AI调解器的功能,具有一定的实际应用价值。


1前言   

  AI-808型人工智能工业调节器是厦门宇电公司生产的具有高性价比的一种智能仪表,具有先进的人工智能调节及参数自整定、自学习功能,无超调和无欠调的优良控制特性,适合温度、压力、流量、液位及湿度等物理量的精确控制。它的人工智能调节方式,是采用模糊规则进行PID调节的一种新型算法:在误差大时,运用模糊算法进行调节,以消除PID饱和积分现象;当误差趋小时,采用改进后的PID算法进行调节,并能在调节中自动学习和记忆被控对象的部分特征以使效果最优化。该AI调节器还提供了方便、简洁、开放的通信功能,使用户很容易地进行组网。C# 是目前比较好的编程工具,在现代的各种实时监控和通信系统中,利用C# 对PC机串口进行编程是非常实用的手段。本文利用C#2005实现了PC机与AI调节器的串口通信,成功地应用到过程控制实验装置的实时监控系统中。


2 AI调节器的通信协议   

  AI 系列调节器使用异步串行通信接口。PC机与AI调节器的连接通过RS232/RS485转换器,当无RS485中继器时,一个串口最多可直接连接64台AI调节器;当加RS485中继器后,最多可连接101台调节器。 该调节器通信的数据格式为:1个起始位,8 位数据,1个或2个停止位,无校验位。数据采用16位求和校验,可确保通信数据的正确可靠。通信传输数据的波特率可设置为1200-19200 bit/S(波特率为19200时,需配置高速光耦的通信模块)。   

  PC机与AI调节器的通信常采用主从问答方式,PC机始终具有初始传送优先权,所有的通信均由PC机来启动。每次通信都是由PC机通过发送(读/写)命令启动通信,AI调节器在接到计算机发送的命令后,首先检查命令中的起始标志,然后检查命令中的站地址是否与自己的站地址相符,如果不一致,说明计算机是与其他AI调节器进行通信,从而忽略该命令;如果一致,就响应该命令,并将执行结果回送到PC机,一次通信过程结束。   

  AI 调节器采用16 进制数据格式来表示各种指令代码及数据。AI 调节器软件通信指令经过优化设计后,只有两条,一条为读指令,一条为写指令,两条指令使得PC机软件编写非常方便。
读/写指令格式分别如下:

①读: 调节器地址代号+52H+要读参数的代号+0+0+CRC 校验码

②写: 调节器地址代号+43H+要写参数的代号+写入数低字节+写入数高字节+CRC 校验码
无论是读指令还是写指令,调节器都返回以下数据:   

测量值PV+给定值SV+输出值MV及报警状态+所读/写参数值+CRC 校验码,其中PV、SV 及所读参数值均为整数格式,各占2个字节,MV占1个字节,数值范围0-220,报警状态占一个字节,CRC校验码占2个字节,共10个字节。


3 C# 实现PC机与AI调节器的串口通信   

在C# 中实现串口通信,通常有四种方法:

(1)通过MSCOMM控件这是最简单的、最方便的方法,可功能上很难做到控制自如;

(2)微软在.NET中新推出了一个串口控件,基于.NET的P/Invoke调用方法实现;

(3)用第三方控件;

(4)用API编写串口通信,难度较高,但可以方便实现需要的各种功能。

  本文采用第四种方法来实现串口通信。
  通信步骤: (1) 设置通信端口号码,即CommPort属性; (2) 设置通信交握协议(默认值为没有交握协议); (3) 设置通信参数; (4) 打开通信端口。即设置Opened=true; (5) 送出字符串或读入字符串。使用Write及Read属性; (6) 数据传送完毕后,将通信端口关闭。即调用Close 方法。


4 工程实例――过程控制中AI调节器的实时监控系统   

  过程控制实验装置由上PC机、PLC、AI调节器、电动调节阀、交流变频器、交流电机、三相水泵、液位变送器、流量变送器、温度变送器、压力变送器、加热器和双容贮水装置组成。目前,该实验装置在原来的基础上增加了对温度和压力两物理量的控制,而且还配备了AI调节器。因而,用此装置做过程控制实验时,可选择PLC或者AI调节器作为控制器。

  当选择AI调节器作控制器时,可完成单回路控制、双回路控制、串级控制和比值控制等。此外,该调节器除了可以手动调节PID参数(即AI调节器中的M5、P、t等)外,还具有先进的自整定(AT)功能,从而实现高精度的控制,如在本实验装置中液位输出范围为0-400.0mm,经自整定后,其误差能够保证在±3mm.以内(见图3的实时曲线显示)。


4.1 控制过程描述  

  控制对象为由两个串联的液体贮灌组成,如图1所示通过调节流入灌1的流量Qi来实现对灌2液位的控制,从而形成双容液位单回路控制系统,其控制方块图如图2所示。

                       

图1 双容液位单回路控制系统简图(细线为水流,粗线为控制线)

 

图2 双容液位单回路控制方块图

在该控制系统中,AI调节器根据液位2的反馈信号和设定值的偏差,由其X模块输出 的电流信号作为电动调节阀的输入,通过调整电动调节阀的开度来调节输入液体流量 ,最终实现对液位2的控制。


4.2 实时监控系统的功能及实现。

 AI调节器实时监控系统PC机的主要功能有:

(1) 工艺流程的动态显示,使用户能够直观地了解控制过程和数据的实际来源;

(2) AI调节器参数的设置和显示;

(3) 实时数据的采集和存储,以及实时曲线的显示;

(4) 历史数据的显示和查询,以及历史曲线的显示;

(5) 报警事件的产生、处理、保存及查询。

 不失一般性,这里只给出部分窗体和程序设计,即利用C# 实现PC机与AI调节器的串口通信进行实时数据采集,并绘出其实时变化曲线。以下为C# 的部分程序源代码,并进行了详细标注。 编写的代码已经封装好类库,在整个终端的操作过程中,与串口的通信,只用到了四个功能:打开、写、读、关闭串口。下面结合本文给出了类库的四个功能定义:
打开串口:

函数原型:public void Open() //打开事先设置好的端口

Using JustinIO;

 

Static JustinIO.CommPort ss_port=new JustinIO.CommPort();

ss_port.PortNum=COM1;

ss_port.BaudRate=9600;

ss_port.ByteSize=8;

ss_port.Parity=0;

ss_port.StopBits=1;

ss_port.ReadTimeout=1000;

try

{

    if(ss_port.Opened)

    {

         ss_port.Close();

         ss_port.Open();//打䨰开a串ä?口¨²

    }

    else

    {

        ss_port.Open();//打䨰开a串ä?口¨²

    }

    return true;

}

catch (Exception e)

{

     MessageBoxShow(“¡ã出?现?错䨪误¨®”¡À+e.Message);

     return false

}

写串口:

函数原型:public void Write(byte[] WriteBytes) //WriteBytes 就是要写入的字节,

//注意,字符串要转换成字节数组才能进行通信

ss_portWrite(Encoding.ASCII.GetBytes(“AT+CGMI/r”));//获取数据
读串口:

函数原型:public byte[] Read(int NumBytes)//NumByte 读入缓存数,注意读取来的是字

//节数组,要实际应用中进行字节转换

string response=Encoding.ASCII.GetString(ss_port.Read(512));//读取512个字节缓存
关闭串口: 函数原型:ss_port.Close() ss_port.Close();
此程序的运行界面如图3所示

 

图3 双容液位单回路控制实时曲线及参数显示

4结束语   

  本文实现了PC机 与AI调节器的串口通信,并在过程控制实验装置中得到了成功应用。应用表明,基于C# 的PC机与AI调节器的串口通信的过程控制实时监控系统,运行可靠,操作方便,极大地扩展了AI调节器的功能。此外,本文还给出了详细的方法介绍和程序设计,对类似的系统有一定的借鉴意义。

作者简介: 王安敏 (1980-)男(汉族),山东莱州,博士研究生,研究方向为机电系统计算机控制; 刘国建(1980-),男(汉族),山东菏泽人,硕士研究生,研究方向为机电系统计算机控制; 李新(1981-),女(汉族),山东菏泽人,硕士研究生,研究方向为预测控制、自适应控制;
联系方式: 信箱:青岛科技大学704信箱(刘国建收),266061 电话:13791994671 E-mail:guojianaixin@163.com

 

posted on 2012-04-30 19:10  fyhui  阅读(648)  评论(0编辑  收藏  举报