使用E-Form++可视化图形组件库开发工控与仿真方法探讨?

 

开发高质量工控与仿真应用软件是一项非常艰巨的工作,该领域需要非常苛刻的快速实时响应性、稳定性和可靠性。 作为全球领先的VC++可视化图形 源码组件库,E-Form++在国内国外数百家企业得到了广泛的使用,为那些想要创建工业监管应用用户界面的开发者们提供了包含设计工具和软件开发工具包(SDK Source Code)的一整套服务。这些显示功能提供了高度可自定义的且与潜在实际数据相连接的图表对象。其产品基础架构完全采用VC++开发而成,无论在产品稳定性或者扩展性上都处于 全球领先地位,是开发高性能的业务流程、矢量图形处理、工业控制、仿真、监控、可变打印、电子表单等软件产品的首选。 经过多年在该领域的实践,为企业节省了超过50%-80%的开发时间,产生了巨大的经济效益:

 

一、为什么要选用E-Form++来构建基础工控与仿真平台?

     选择E-Form++可视化图形组件库来开发工控和仿真平台的原因很多,最基本的还是UCanCode的高品质和源码彻底开放原则,在全球很难找到第二家。其他如下:

  1. 高性能与高可靠性:
    E-Form++是完全基于C++开发而成的基础架构库,得益于C++在处理系统级应用的高效性, 使用E-Form++可视化组件库能最大限度的发挥C++的高性能,能够满足最苛刻的性能要求。
     

  2. 完全可扩展以及极大的灵活性:
    E-Form++完全采用VC++开发,所有功能从设计之初就将其能自由定制作为第一要务。通过系统提供的广泛的虚函数,所有功能均可以进行定制。除了符号和控制面板编辑器之外,E-Form++还提供一整套装配、自定义和支持用户界面的组件和源代码开发包。使用健壮的模型-视图-控制(MVC)结构,数据和屏幕显示之间的明确分界得以维持。数据模型是完全开放可扩展的,可以和其他应用组件相联系。通知是自动透明的。当数据模型变化时,显示随即自动更新,并且当用户作用于显示时,它的的模型响应地作出变更。
     

  3. 核心全公开,无黑匣子:
    E-Form++可视化图形组件库的全部设计源代码(100%)附随正式版本提供,您无需担心任何自己使用功能的源代码,无需担心开发商预留任何黑匣子。所有的核心完全掌控。
     

  4. 为所需的应用提供丰富的、个性化的图形用户接口(GUI):

    为所需求的应用程序提供高度个性化及丰富图元化的用户接口。E-Form++可视化图形组件库帮您构建更快更好的图形化演示:

    • 高性能2D图形
    • 强力图形用户接口(GUI)构造器
    • 更短的开发周期
    • 更低的维护开支
    • 可以自定义的业务图形部件、图表和仪表元件
    • 与顶尖数据库连接——Oracle,Micrsoft SQL Server, IBM DB2及其它数据库
    • 在不同平台上开发与部署——Windows,Web上部署。
       
  5. 现成的编辑器(附带源代码):

    E-Form++合成了两种完全图形化编辑工具:元件设计器ShapeDesigner、画面编辑器DiagramEditor,它们使开发人员轻松建立应用所需要的元件和监控与仿真画面。

    所有这些工具都是完全功能化的,它们可以被开发人员和终端用户使用,来创建高质量的元件和监控与仿真画面。它们也可以作为更复杂、更自由的建模工具的起点。它们由形式化的源代码构成,并且可以自由增删,最终发送给终端用户。
     

  6. 为您至少节省50%-80%的开发时间。
     
  7. 可视化的领导者
    UCanCode E-Form++是世界领先的C++可视化图形组件。因其难以置信的丰富图元而闻名,E-Form++帮助开发人员构建可以提供非并行功能的应用程序。出色的生产力降低了项目风险,并且解决了令人头痛的维护开支问题。经过近10年的不懈研究和开发,UCanCode终于站在了可视化技术市场的最前沿,并向客户提供最杰出的服务支持。

 

二、工控与仿真元件的设计?

在构建工控与仿真程序中,往往需要大量图形元件,同时要能够对图形元件的细节进行精确的控制,当外部数据采集进来后,元件要 能够根据外部数据的要求进行快速的响应,例如开关的打开与闭合,线路的通与断,等等。

       E-Form++可视化图形组件库企业版本提供了专业的元件设计程序ShapeDesigner (此元件设计器源代码附随正式版本一并提供),既可通过ShapeDesigner提供的广泛的高品质绘图工具来设计外观优美的专业元件,同时ShapeDesigner本身 也提供了大量的工控和仿真专用元件,但这些对于如此广泛的工控应用仍然非常有限。下面探讨一下如何构建自己的元件库:

  1. 创建属于自己的专用元件文件夹:
     

    ShapeDesigner提供了同Microsoft Visio完全一致的元件文件夹用于分类管理各种元件,通过如下步骤你可以创建属于自己的新元件夹:

          1)、单击菜单“工具盒 | 创建新的工具盒页面”子菜单。

          2)、选择菜单“工具盒 | 保存当前工具盒页面”子菜单,在如下弹出对话框中可以为此元件夹设置一个新的名称。名称以好记为准。

          3)、接下来就可以在通过E-Form++提供的大量绘图工具在画布上绘制各种元件,然后通过复制粘贴的方式将元件放入左边的工具盒文件夹中。
     

  2. 如何为元件中的子元件设置以后可以控制的Key值?
     

    如果在以后使用设计好的元件的时候需要控制子元件的状态,则一个能识别该子元件的Key值非常重要,缺省情况下,E-Form++可视化组件库为画布上的任何一个图形保留了3个Key值,分别是Key Value1, Key Value 2, Key Value 3。通过任何一个属性值均可以标识该子元件。设置Key值的操作如下:

            1)、选中该需要设置Key值的子图形。

    2)、单击鼠标右键,选择“属性 | 特定值”子菜单。或者直接单击该选中图形上面的快捷菜单选择“Key Data”子菜单。

    3)、在弹出的对话框中即可设置该Key值。如下图:


     

  3. 如何使用E-Form++缺省提供的元件?
    缺省情况下,E-Form++提供了大量的元件,通过选择"工具盒 | 打开工具盒页面"子菜单就可以打开系统提供的元件夹。打开后,可以直接在工具盒中单击鼠标右键选择复制,然后移动到新设置的元件夹单击鼠标右键选择“粘贴”来直接将元件复制进去。
     

  4. 如何编辑E-Form++提供的缺省元件?
     

    很多时候,我们需要对元件的细节进行重新修改以满足需求,操作如下:

    1)、在右边的工具盒中,选择需要修改的元件。然后单击鼠标右键选择“改变类型和名称”。

    2)、在弹出的对话框中取消掉“作为一个整体复合组件拖放到画布”选项。并确定退出该对话框。

    3)、以后再次拖拉该元件到画布上时,系统就允许编辑任何子元件的细节。

    4)、编辑完成后,选中所有需要组成新的元件的图形,将其复制粘贴到左边的工具盒中即可。

    此操作适用于工具盒中的所有复合图形元件,编辑完成后请记住要重复1),2)的步骤恢复该选项。如下图:



     

  5. 如何导入SVG外部设计的SVG文件?
     

    SVG已经成为矢量图形文件交换的事实上的标准,非常多的矢量图形编辑程序均支持导出SVG文件。通过E-Form++提供的SVG导入功能,可以直接将任何SVG文件直接导入到画布中,这样做的一个巨大的好处是:可以使用其他更加专业的矢量图形编辑器例如CoreDraw来设计元件。导入SVG的基本操作步骤如下:

     

    1)、确定导入SVG的文件的缩放比例:
    很多时候,外部程序设计的SVG图形可能过大或者过小,很难直接满足实际需求。这个时候,设定一个固定的缩放比例非常重要。在ShapeDesigner中,请选择“文件 |  SVG导入选项”子菜单来打开设置对话框,其中的缩放比例将按照缩小比例来确定。

     

    2)、选择“文件 | 导入SVG文件”子菜单就可以将任何SVG文件导入到画布中。

三、工控与仿真运行界面的设计:


控与仿真界面的设计对于开发该类应用具有非常重要的意义,往往一个较为复杂的工控与仿真应用均包含多个画面。E-Form++可视化图形组件库提供了全功能的专业界面设计器DiagramEditor (正式版本提供该编辑器的全部源代码)。该编辑器提供了业界最时髦的编辑和操作功能,可以构建任何复杂的工控或者仿真界面。同时该编辑器能够充分同元件编辑器ShapeDesigner协同工作,能够打开任何元件设计器设计的各种元件。

 

  1. 如何创建一个新的画面?
    创建新的界面非常简单,单击“文件 | 新建”菜单即可。
     

  2. 设定新建画面的风格?
     

    1)、设定新画面的大小:

    选择“文件 | 页面设置”子菜单,在页面设置对话框中的“画布大小”对话框页面中设定。

     

    2)、是否显示边框?

    如果不希望显示边框,请选择“查看 | 显示页面阴影边界”子菜单。

     

    3)、是否显示标尺?

    如果不希望显示标尺,请选择“查看 | 标尺”子菜单来关闭标尺。

     

    4)、将画布边界和画布的颜色设置为一致?

    如果希望将画布边界和画布的颜色设置为一致,请选择“查看 | 页面属性”,在弹出的对话框中将“页面颜色‘和”页面背景颜色“设置为一致即可。

     

  3. 如何为元件设定可以识别的Key值?

    当在执行采集数据等操作的时候,一个能识别画面上元件的Key值非常重要。E-Form++可视化图形组件库为画布上的任何一个元件均预设了3个Key值。要设定Key值,请在选择的元件上单击鼠标右键,然后选择”属性 | 特定值“来设置。


     

  4. 如何编辑画面上的元件的任何属性值?
     

    E-Form++为画布上的不同元件预置了不同的属性值,对于有些属性值,E-Form++提供了相应的修改对话框来对其进行修改,但绝大多数属性值没有提供相应的对话框来进行可视化的修改。为此DiagramEditor中,提供了一个可以修改任何属性值的”属性编辑器“,在该属性编辑器中,只要输入需要修改的属性值的ID,即可修改其属性值。

    在操作上,可通过鼠标单击上面属性值列表中的某一个属性来进行属性值修改,也可以通过参阅右边的属性值列表的ID值,然后直接在属性ID值编辑框中输入ID值来修改该属性值。
     

  5. 如何为元件增加新的自定义属性值?

     

    画面上的任何元件在实际使用的时候均可以包含任意多个自定义属性值,要为任何元件增加自定义属性值非常简单,操作如下:

    1)、选中需要增加新的属性值的元件。

    2)、选择”格式 | 自定义属性“子菜单。

    3)、在弹出的对话框中,就可以任意增加任意属性值。在增加新的属性值的时候,ID值非常重要,以后在使用的时候,要查询或者修改该属性值,均是通过该ID值来进行。如下图:


     

  6. 保存工控与仿真画面?
     

    设计好的工控或者仿真画面,可直接保存为xdg文件。单击”文件 | 保存“子菜单即可保存该文件。

 

四、工控与仿真程序的构建 :

     构建工控与仿真应用需要考虑当前的程序需要运行的环境,如果是在桌面应用程序中运行,最佳的方式是直接使用E-Form++可视化开发环境提供的集成在VC++开发环境中的AppWizard来进行。如果要在Web中运行,则需要使用附随E-Form++可是开发包提供的UCCDraw ActiveX Control。不管哪种方式均要使用上面画面编辑器设计的画面:
 

     1、构建基于E-Form++的桌面工控与仿真应用:

     桌面应用的最佳构建平台是VC++开发环境,这样可以最充分的发挥E-Form++可视化组件库的最佳性能,具体操作步骤如下:

 

      1)、在VC++ IDE中选择“新建”,然后选择"E-Form++ AppWizard",然后根据提示创建适当的应用基本程序代码,这个过程产生的代码是自动的,不需要手工录入任何代码。

 

      2)、要装载任何工控画面,只需要先将上面设计好的XDG工控界面文件导入到应用程序中形成XDGRES资源文件,然后调用如下函数即可:
LoadXdgFromResource(IDR_MAIN, _T("XdgRes"), FALSE); 其中IDR_MAIN是画面的资源ID
。当然,如果是需要装载新的工控界面,也同样再次可以调用这个函数即可。这里必须注意的是"XdgRes"类型名称不能变。

 

       3)、要切换新的画面:
操作同2)一样,再次调用LoadXdgFromResource(..);函数,系统会自动的释放掉原来装载的数据和资源,然后显示新的画面。

 

4)、如果要查找画面中的任何元件,可直接调用CFODataModel的如下三个函数:

FindShapeWithKey1(_T("..."));

FindShapeWithKey2(_T("..."));

FindShapeWithKey3(_T("..."));

这些函数返回一个CFODrawShape的指针,根据这个指针可以修改该图形的任何属性值或者显示状态,当然也可以对元件进行移动、旋转、缩放、变形等等操作。

 

5)、修改元件的状态?

     要修改画布上元件的状态,例如填充颜色,线宽,字体等等,甚至包括所有自定义属性值,在CFODrawShape类中均定义了大量的函数来完成这些操作。

 

6)、刷新元件?

     我们不建议随意的对单个元件进行独立的刷新,这样做非常不高效。事实上,一个好的工控或者仿真应用,应该尽可能的减少刷新次数。一个好的方法是将所有需要刷新的元件集中起来,在必须刷新时,调用CFOPCanvasCore的UpdateShapes来一起刷新。如果同时刷新的图形非常多,就干脆直接调用FOPInvalidate(..)来刷新整个画布即可。

如果刷新单个元件,可调用CFODrawShape的UpdateControl(..)。

 

7)、事件的响应?

     如果要响应鼠标的单击事件,双击事件以及按钮等事件,E-Form++均提供了大量的虚函数来进行,例如鼠标单击某图形完成画面跳转,需要覆盖View的OnLButtonUp事件,示范代码如下:


void CHMIDemoView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	CFODrawView::OnLButtonUp(nFlags, point);

	CPoint local = point;
	FODPtoLP(&local);
	CFODrawShape *pShape = (CFODrawShape *)GetCurrentModel()->HitTest(local);
	CString str;
	if(pShape != NULL)
	{
		// Add your code below
		m_pCurRunModelHitShape = NULL;
		m_pCurRunModelMoveInShape = NULL;
		// Override this method to handle your own click event.
		CString str = pShape->GetKeyId1();
		if(str == _T("C1"))
		{
			LoadXdgFromResource(IDR_INPUT_CONTROL, _T("XdgRes"), FALSE);
		}
		else if(str == _T("C2"))
		{
			LoadXdgFromResource(IDR_GAUGE_CONTROL, _T("XdgRes"), FALSE);
		}
		else if (str == _T("C3"))
		{
			LoadXdgFromResource(IDR_SWITCH_CONTROL, _T("XdgRes"), FALSE);
		}
		else if (str == _T("C4"))
		{
			LoadXdgFromResource(IDR_REAL_CHART, _T("XdgRes"), FALSE);
		}
		else if (str == _T("C5"))
		{
			LoadXdgFromResource(IDR_OTHER_CONTROL, _T("XdgRes"), FALSE);
		}
		m_pCurRunModelHitShape = NULL;
		m_pCurRunModelMoveInShape = NULL;
		GetCurrentModel()->SetDesignMode(FALSE);
	}
}
2、构建支持Web的工控与仿真应用?

      利用E-Form++可视化图形组件库提供的UCCDraw ActiveX Control,可以同样的方式开发基于Web的应用,正式版本的E-Form++可视化图形组件库提供了UCCDraw控件的全部100%设计源代码,可根据需要对该控件的功能进行任意的定制。

 

1)、装载画面请调用:LoadXdgFromFile(..);

 

2)、查找需要的图元可调用:FindShapeWithKey1, FindShapeWithKey2, FindShapeWithKey3

 

3)、修改属性值调用:

void ChangeShapeBoolWithoutUndo(long shape, long nPropID, BOOL bValue);
	void ChangeShapeStringWithoutUndo(long shape, long nPropID, LPCTSTR strValue);
	void ChangeShapeIntWithoutUndo(long shape, long nPropID, long nValue);
	void ChangeShapeFloatWithoutUndo(long shape, long nPropID, float fValue);
	void ChangeShapeDoubleWithoutUndo(long shape, long nPropID, double dValue);
	void ChangeShapeDWordWithoutUndo(long shape, long nPropID, long dwValue);
	void ChangeShapeColorWithoutUndo(long shape, long nPropID, long crColor);
	void ChangeShapeDateWithoutUndo(long shape, long nPropID, DATE dtValue);

 

4)、刷新画面调用:

UpdateAllShapes()或者UpdateCanvas()。

 

5)、响应事件请覆盖:

OnClickOnShape以及OnDblClickOnShape等等。

 

3、脚本支持

最新版本E-Form++可视化图形组件库提供了脚本支持,我们将会有专门的文章来介绍。

 

4、仪器仪表元件

E-Form++为开发工控与仿真应用提供了大量可灵活扩展的仪器仪表元件,我们在以后的文章中会陆续介绍。

 

五、 数据的采集与画面的刷新

    E-Form++本身没有提供专门的数据采集模块代码,在实际使用中可以通过定时器,多线程等方式。处理时,尽可能将所有需要同时刷新的元件集中在一起,然后调用一次刷新画布函数来完成刷新。

    如果非要刷新单一元件,调用元件基类CFODrawShape提供的UpdateControl函数即可,当需要同时更新一系列元件的时候,可直接将所有元件加入到CFODrawShapeList列表中,然后调用CFOPCanvasCore的UpdateShapes函数即可。

 

、 其他

 

     开发工控与仿真应用是E-Form++源码库功能的重要组成部分,E-Form++从设计之初就将其作为整体进行了全面的设计。事实证明,使用E-Form++可视化图形组件库能够大大的节省开发和测试时间,为企业产生巨大的经济效益。开发者之所以偏爱E-Form++可视化图形组件库的工控与仿真解决方案,是因为E-Form++的产品使用便利,彻底源代码公开,完全可自定义,并且能够对桌面和Web进行部署。本文只是在一些基本层面对E-Form++的使用进行了剖析,后面我们还会有专门的文章针对如何创建高级的控制元件以及如何创建多态元件进行介绍。

 

E-Form++可视化图形组件库企业版本全功能免费评估版本(附带大量示例VC++源代码)下载地址:http://www.ucancode.com

联系 UCanCode

购买源代码或了解更多的简单方法

  • 产品询价

  • E-mail 给我们(sales@ucancode.com)