1 引言
工业自动化通用组态软件——组态王软件系统与最终工程人员使用的具体的变频器或现场部件无关。对于不同的硬件设施,只需为组态王配置相应的通讯驱动程序即可。组态王支持的硬件设备包括:可编程控制器plc、智能模块、板卡、智能仪表、变频器等。工程人员可以把每一台下位机看作一种设备,而不必关心具体的通讯协议,使用时只需要在组态王的设备库中选择设备的类型完成安装即可,使驱动程序的配置更加方便。
窑炉监控系统是为满足生产需要,减少能耗,提高效率而设计的,它的实现必须要借助一定的软件及硬件条件,通过变频器控制风机从而控制窑内多个点的温度及通风量,保质保量的完成出砖要求。因此,对变频器的监控就显得十分重要。
窑炉实时监控系统以组态王画面为主要运行画面,首先在组态王界面上对被监控系统的参数。进行设置,然后起动,在组态王的界面上可以动态。显示下位机的运行状态、测量参数、作业位置以及完成对多个变频器具体性能指标的测试等。由于组态王只提供这类变频器的驱动程序,没有提供其通讯协议,因此在功能并不很强大的组态王内部直接开发变频器的通讯协议是有较大难度的。
2 c++ builder作为后台间接实现组态王与变频器的通讯
本文采取的方法是:利用c++ builder 提供的串行通讯功能,实现与变频器的通讯,再利用bcb的dde功能完成组态王与c++builder之间的动态数据交换。这样就把从变频器采集到的外部信号通过c++builder间接动态地显示在组态王界面上。其系统的结构图如图1所示。
3 c++ builder与变频器之间串行通信的实现
串行通讯 (serial communication)指的是两个欲交换信息者的信息流动,其信息流动的方式是一个位接一个位,有顺序的由一端向另一端流动。带异步通讯适配器的pc机与变频器只有满足如下条件,才能互联通信:带有异步通讯接口的变频器与带异步通讯适配器的pc机互联;双方采用的总线标准一致,否则要通过“总线标准变换单元”变换之后才能互联;双方的初始化、波特率、数据位数、停止位数、奇偶校验都相同;要对变频器的通讯协议分析清楚,严格的按照协议的规定及帧格式编写pc机的通讯程序。变频器中配有通讯机制,一般不需要用户编程。pc机与艾默生变频器不能直接连接,要通过电缆进行rs232、rs485的变换。
3.1 c++ builder与变频器的通讯协议
协议是一系列的定义了计算机应该怎样管理通信的规则。协议可以规定数据应该以什么格式进行传递和每个节点在什么时间以及以什么方式进行传递。除了数据通道以外,一个连接可以使用其它线线路来表示什么时候一个发送者有数据要发送,什么时候一个接收者能够接收新数据或者其它控制或状态信息。
3.2艾默生变频器的通讯协议
变频器通讯协议为modbus协议,除了支持常用的寄存器的读写外,还扩充了部分命令对变频器功能码进行管理。modbus协议同时支持rtu模式和ascii模式,本文采用rtu模式。对应的帧格式如图2所示。
3.3 c++ builder中通讯协议的实现
在c++builder中mscomm控件可以采用轮询或事件驱动的方法从端口获取数据。这里采用的是事件驱动的方法。就是在一个事件发生的时候,让程序自动的跳到一段程序。该控件的oncomm事件执行这个功能。oncomm程序负责对诸如在串口的硬件中断或者一个软件缓存的计数器到达了一个触发值这样的事件时做出反应。在bcb的classwizard中为新创建的通信控件定义成员对象,通过该对象可以对串口属性进行设置。通过设定其settings、commport、inputmode、handshaking、portopen属性来实现设定bcb的通讯协议。这里设定settings属性为:9600,n,8,1,即该协议的波特率为9600,无奇偶校验,每个字符的数据位为8位。
4 bcb与组态王软件数据交换的实现
“组态王”之间通讯的实现主要是通过“组态王”提供的动态数据交换 (dde)来完成的。dde是windows平台上的一个完整的通信协议,它使应用程序能彼此交换数据和发送指令。dde过程可以比喻为两个人的对话。提问的一方称为“顾客”(client),回答的一方称为“服务器”server)。一个应用程序可以同时是“顾客”、“服务器”:当它向其他程序中请求数据和时,它充当的是“顾客”若有其他程序需要它提供数据,它又成了“服务器”这里关键要实现的是。“组态王”作为顾客程序从bcb得到数据。使bcb成为“服务器”很简单,只需在“组态王”中设置服务器程序的三个标识名(应用程序名、主题名、项目名),并把vb应用程序中提供数据的窗体的linkmode属性设置为1,不必在vb中增加任何程序。值得注意的是,将vb窗口的属性设定成和在组态王中定义dde设备时的“话题名”一样;在组态王定义要显示的变量时,选择“项目名”为要显示bcb的textbox控件名。这样组态王界面上可以显示出指定的bcb可执行文件中指定的textbox控件的值。
5 一种通过用bcb做控件实现组态王监控变频器的方法
利用bcb中能生成activex控件的项目编写器new-》other-》activex-》activeform,编写相关程序实现控制变频器的功能,并通过bcb自带的view工具栏中的typelibrary工具来编译生成控件,此控件经打包可生成在组态王中认始的ocx控件,此控件同样可设置是否具有可读可写的属性,此属性是在typeliabrary工具中设置编译后得到的,需要几个参数,其各是什么属性,完全可以自由添加,非常简单方便。并可通过bcb相关程序,设置相关属性对内对外的具体连接功能。实际上,此过程实现的就是变频器与bcb控件的通信,控件与组态王的通信,此方式弥补了组态王中不提供的相关变频器等的驱动程序,而无法利用组态王的缺陷,可通过bcb方便实现相关功能的驱动,而又间接实现了组态王控制变频器等的驱动。实际bcb与变频器等的通信也非常简便,只要确定了通信协议,就可利用mscomm控件,方便的编写通信程序,实现变频器等的控制。用bcb制作通用控件嵌入组态王从而实现组态王与变频器的通讯,其运行画面如图3所示。
6 结束语
当用bcb作为后台时,当系统开始运行前,要求首先运行c++builder的可执行文件作为后台运行程序,然后才能运行组态王系统。当变频器发送数据的时候,由bcb接受到此数据,再通过组态王提供的dde功能,将该数据显示到组态王界面上。这样就把从变频器采集到的外部信号通过bcb间接动态的显示在组态王界面上。该方法实现了组态王对变频器的实时监控。经过测试可知,系统的实时响应速度能达到ms级,并且这种实现系统实时监控的方法可移植性强,对于监控其他类型可编程控制器plc或单片机也适用。
当用bcb制作控件时,只要用bcb制作完相应功能的控件就可实现脱离bcb环境,作为普通的ocx控件应用于组态王,非常简便。此方法弥补了组态王没有相关驱动程序,而无法实现应用组态王的缺陷,值得推广应用。在兖矿鲍店砖窑监控系统中,我们利用了bcb作为后台间接实现组态王对变频器的控制。其窑炉一鼓风机变频控制监控画面如图4所示。经现场调试运行后,所得反馈效果良好。