c. 变送器校准检验模块主要是为了完成对变送器校准检验的具体操作,包含了针对不同变送器校验检验的步骤,并向数据打印及入库模块提供数据源。这个模块还根据管理员子系统中功能设置模块对系统需要自动完成的操作的定义,自动将数据采集和发送模块的方法进行组装,以实现对校验系统的自定义功能。
d. 数据打印及入库模块主要是完成校验结果的打印和进入数据库,是操作员子系统的所要完成的最后一个功能,主要是将校验过程中采集的数据、运算的结果、产品的出厂编号等信息以打印报表和进入数据库的两种方式进行处理。
打印报表可以利用对并口读写的封装,直接将格式化的字符串输出到连接在并口上的打印机就可以了。
与SQL Server数据库的连接采用ADO的方式,这样可以满足本地和远程访问数据库的需要,这里主要是将校验得到的数据和产品信息等存储到SQL Server的数据库中去。
2) 管理员子系统主要面向校验系统的管理员,他们使用管理员的账号登陆系统,管理员的权限大于操作员,可以完成系统功能设置和数据库管理的功能。
功能设置模块主要是通过弹出得对话框,使得系统的管理员可以定制系统的操作步骤、选择需要完成的校验内容,以及可以自动写入变送器的一些信息,功能设置完成后,在操作员模式,当系统检测到有变送器接入时候,可以自动完成设置好检验项目等内容。功能的可定制使得自动校验系统能够适应多种场合的需求。
数据库管理模块主要是完成对操作员子系统进入数据库的数据进行管理,可以对产品的信息进行检索,还可以方便对各个时期产品的性能指标进行评测比较,来研判企业的生产水平。
3) 人机界面子系统的功能主要完成系统和用户的界面,由于适用了Visual C++作为开发工具,大量MFC类库作为基础,所以比较容易开发出很友好的Windows图形界面。
由于变送器的校验过程要占用系统很多的时间,存在着比较多得延时,而用户界面需要实时接受用户的操作和实时显示对用户输入面板的监控,为此采用了多线程的技术解决了这一问题,主线程主要完成校验功能的实现,由辅助线程来实时更新用户的界面,对I/O端口进行轮询。
4) 异常处理子系统主要是为了解决系统中使用得设备比较多,由于每一个设备出现问题都会引起系统的异常问题。 为了保证校验系统的可靠性,在对各种可能出现的人为的误操作和各个设备可能出现的情况进行了分析以后,编写了大量的异常处理的方法,使得这个模块的内容覆盖了整个系统,当系统使用过程中出现异常情况,会立即转入到这个模块进行处理, 使得校验系统可以对异常情况进行保护和报错,使得系统的智能化和可靠性得到很大的提高。
4.3 软件的工作过程
软件开始执行后,首先初始化及系统自检工作, 主要是初始化GPIB接口卡,并将GPIB接口卡上的设备设成远程工作方式,初始化 48回路I/O卡,将I/O设置为40路输出,8路输入,打开并配置计算机串口和并口。
完成了系统自检后, 将开启一个辅助线程用于监控I/O 操作,做为软件工作过程的主要部分,下面将比较详细的介绍一些这部分内容。
为了实现多线程之间的同步控制关系,创建一个手工的事件对象(手工的事件对象显式得使用ResetEvent来改变信号量的状态)。
m_hEvent=CreateEvent(NULL,TRUE,TRUE,NULL)
然后创建并开启一个辅助线程,
m_pThread=AfxBeginThread(MyThreadFunction,GetSafeHwnd(), THREAD_PRIORITY_NORMAL,0, CREATE_SUSPENDED, NULL);
if(m_pThread!=NULL)
{ m_pThread->ResumeThread(); }
辅助线程是以函数的形式出现在程序中,它的代码是整个进程代码的一部分,并可以共享进程的全局变量等。
UINT MyThreadFunction( LPVOID pParam )
{
while(1){
m_Test.SCANDin();/// 读取I/O卡的状态
WaitForSingleObject(m_hEvent,200);///等待并检查事件对象的状态
ResetEvent(m_Test.m_hEvent);
PostMessage((HWND)pParam, WM_MYMESSAGE,0, 0);
//发送自定义消息给主线程通报I/O状态
continue;
}
return 0;
}
这样就由辅助线程完成了读取I/O口状态,判断用户在操作面板的动作,实现了对I/O端口的监视,
在主线程中定义消息映射机制, 在头文件中添加对自定义消息及消息处理函数的定义,
#define WM_MYMESSAGE (WM_USER+100)
afx_msg LONG OnMyMessage(WPARAM w,LPARAM l);
DECLARE_MESSAGE_MAP()
在CPP文件中添加消息处理函数的实现
BEGIN_MESSAGE_MAP( )
….
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
….
END_MESSAGE_MAP()
LONG CMyApp::OnMyMessage(WPARAM w,LPARAM l)
{
/////对辅助线程中检测到的端口数据进行处理,判断并进入变送器校验操作。
SetEvent(m_hEvent);////通过设置事件信号,表示数据处理完毕,辅助线程得到事件信号的状态后就可以继续了
return 0l;
}
通过事件对象对多线程的同步控制,就可以使得耗时的I/O操作与程序的主线程分开,既保证了I/O监视的实时性,又可以使主线程可以自由的处理其他的事情,充分利用了CPU的处理能力,使得各操作可以并行进行。
5、结束语
HART协议在仪表中的应用为仪表的自动化校准检验及信息管理提供了基础,本文阐述了较为通用的HART智能变送器校验检验系统的设计思想和实现方法,针对不同厂家的HART变送器,只要添加数据发送及采集模块中关于变送器校准的HART协议的特殊指令,就可以完成,具有一定的通用性,较好的实现了HART协议智能变送器的出厂校准检验及产品信息管理。产品已经在现场实际运行,使用效果良好。
上一篇:虚拟仪器技术多轴步进电机控制系统