动态图形与实时系统解决方案示例, 如下图:
下面的示例程序是一个非常典型的使用E-Form++可视化图形组件库构建高性能的组态,HMI的应用案例,下面是使用E-Form++产品开发该应用的步骤:
一、准备组态,HMI所需的各种元件:
使用E-Form++提供的高品质复合图形设计程序ShapeDesigner设计需要的组态元件,您可以使用E-Form++本身提供大量基础图形来完成复杂元件的设计,如下图:
在右边画布中设计好的各种组态复合图形元件可以直接通过鼠标复制粘贴的方式放置到左边的工具盒中,以后再使用的时候直接拖拉出来即可。
二、设计组态,HMI画面:
通过附随E-Form++产品提供的DiagramEditor,可以为指定的组态,HMI设计相应的画面,DiagramEditor提供了非常完善而强大的功能,保证能够正确高效的完成各种高品质的
组态画面的设计,在设计画面的时候,我们只需要通过鼠标拖拉的方式将步骤一中设计好的现成元件拖入画布中搭建即可,如下图:
当我们在采集数据的时候,我们往往需要刷新画布上的各种图元的状态,在DiagramEditor特别为每个元件提供了5个关键字,通过任何一个关键字即可查询到指定元件。如下图的设定:
该设定中我们将最上面的元件的Key Value 1设定为K2。
三、搭建需要的组态程序:
通过E-Form++提供的AppWizard
(应用程序创建向导),可以自动产生基于VC++的组态应用程序框架,要装载任何组态画面,只需要先将上面设计好的XDG组态界面文件导入到应用程序中形成XDGRES资源文件,然后调用如下函数即可:
LoadXdgFromResource(IDR_MAIN,
_T("XdgRes"), FALSE);
当然,如果是需要装载新的组态界面,也同样可以调用这个函数。
四、实时数据的采集:
可以通过View类的定时器功能,定时采集数据,如果需要更新画面的元件,调用控件本身的UpdateControl即可,当需要同时更新一系列元件的时候,可直接加入到CFODrawShapeList列表中,然后调用UpdateShapes即可。示范代码如下:
void CAutoDemoView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent == ID_TIMER_ID)
{
CFODrawShapeList lstUpdate;
int xx0 = rand() % 20;
int xx1 = rand() % 18;
int xx2 = rand() % 25;
int xx3 = rand() % 16;
int xx4 = rand() % 12;
int xx5 = rand() % 21;
if(pK1 != NULL)
{
CString strText;
strText.Format(_T("%u mcA"), xx0 * xx1);
pK1->SetLabelText(strText);
lstUpdate.AddTail(pK1);
}
if(pK2 != NULL)
{
CString strText;
strText.Format(_T("%u C"), xx0 * xx2);
pK2->SetLabelText(strText);
lstUpdate.AddTail(pK2);
}
if(pK3 != NULL)
{
CString strText;
strText.Format(_T("%u Nm/h"), xx0 * xx3);
pK3->SetLabelText(strText);
lstUpdate.AddTail(pK3);
}
if(pX1 != NULL)
{
CString strText;
strText.Format(_T("%u"), xx0 * xx4);
pX1->SetLabelText(strText);
lstUpdate.AddTail(pX1);
int nValue = xx0 * xx4;
if(nValue > 200)
{
pX1->SetBkColor(RGB(255,0,0));
}
else if(nValue > 100)
{
pX1->SetBkColor(RGB(255,255,0));
}
else
{
pX1->SetBkColor(RGB(0,0,0));
}
}
if(pX2 != NULL)
{
CString strText;
strText.Format(_T("%u"), xx0 * xx5);
pX2->SetLabelText(strText);
lstUpdate.AddTail(pX2);
int nValue = xx0 * xx5;
if(nValue > 200)
{
pX2->SetBkColor(RGB(255,0,0));
}
else if(nValue > 100)
{
pX2->SetBkColor(RGB(255,255,0));
}
else
{
pX2->SetBkColor(RGB(0,0,0));
}
}
if(pX3 != NULL)
{
CString strText;
strText.Format(_T("-%u"), xx1 * xx5);
pX3->SetLabelText(strText);
lstUpdate.AddTail(pX3);
int nValue = xx1 * xx5;
if(nValue > 200)
{
pX3->SetBkColor(RGB(255,0,0));
}
else if(nValue > 100)
{
pX3->SetBkColor(RGB(255,255,0));
}
else
{
pX3->SetBkColor(RGB(0,0,0));
}
}
if(pX4 != NULL)
{
CString strText;
strText.Format(_T("%u"), xx2 * xx3);
pX4->SetLabelText(strText);
lstUpdate.AddTail(pX4);
int nValue = xx2 * xx3;
if(nValue > 200)
{
pX4->SetBkColor(RGB(255,0,0));
}
else if(nValue > 100)
{
pX4->SetBkColor(RGB(255,255,0));
}
else
{
pX4->SetBkColor(RGB(0,0,0));
}
}
if(pX5 != NULL)
{
CString strText;
strText.Format(_T("%u"), xx2 * xx4);
pX5->SetLabelText(strText);
lstUpdate.AddTail(pX5);
int nValue = xx2 * xx4;
if(nValue > 200)
{
pX5->SetBkColor(RGB(255,0,0));
}
else if(nValue > 100)
{
pX5->SetBkColor(RGB(255,255,0));
}
else
{
pX5->SetBkColor(RGB(0,0,0));
}
}
if(pX6 != NULL)
{
CString strText;
strText.Format(_T("%u"), xx3 * xx5);
pX6->SetLabelText(strText);
lstUpdate.AddTail(pX6);
int nValue = xx3 * xx5;
if(nValue > 200)
{
pX6->SetBkColor(RGB(255,0,0));
}
else if(nValue > 100)
{
pX6->SetBkColor(RGB(255,255,0));
}
else
{
pX5->SetBkColor(RGB(0,0,0));
}
}
if(pChartShape != NULL)
{
pChartShape->UpdateData(xx0 * xx1, xx0 * xx2, xx0 * xx3);
lstUpdate.AddTail(pChartShape);
}
if(lstUpdate.GetCount() > 0)
{
UpdateShapes(&lstUpdate);
}
}
else
{
CFODrawView::OnTimer(nIDEvent);
}
}
该示范应用程序最终运行界面如下:
当然,E-Form++可视化图形组件库提供了两种风格的画布,一种是基于View,另外一种是基于CWnd,这有助于您构建不同风格的应用(例如运行时隐藏滚动条等)。
E-Form++高品质的可视化组件库完全采用VC++开发而成,具有极佳的运行性能和效率,已经在包括阿尔斯通等众多全球顶级客户所验证。
如下这个示例展示了如何使用E-Form++可视化图形组件库创建复杂的控制流程图,简单而快捷,画布上的图形可以根据需要增加自定义属性数据或者同数据库连接,如下图:
1.
支持复杂的渐变色填充,图像填充等填充模式,为创建各种组态、工业监控、组态图形提供了最便捷的手段。
2. 所有图形均内置定时器功能,可随时启动,随意控制运动频率。
3.
可将任何图形通过粘贴复制的方式放入左边的工具盒窗口中,可直接通过拖拉方式将图形放入画布。
4.
内置设计模式与运行模式,在设计模式下只允许进行图形的编辑,而在运行模式下,只能让图形处理运动功能或者交互事件,您也可以同时开发两个程序,一个只工作在设计模式下,另一个只工作在运行模式下。
5. 提供专业的XML处理类,方便同信息发布或者数据的交换。
6. 画布大小自由定义。
7.
系统内置完善的打印控制功能,不用编写任何一行代码即可选择打印机,设定打印纸张,控制打印方向,设置页面边界等等。
8. 支持多图层显示。
9. 支持绘图辅助线。
10.
每个图形均设定了单独的键盘和鼠标控制虚函数,可处理任何鼠标单击、双击、移动等交互事件.
11. 支持任意角度旋转文本,以及文本的所见即所得录入。
12.
采用共享GDI设备,将性能扩展到极致,可在同一画布中容纳上万个图元同时完成编辑。
13.
系统预设页面跳转、文件装载、发送邮件、打开网页等交互事件,通过覆盖相应的虚函数,可轻松增加新的交互事件。
14.
全面支持复合图形的创建,可将任何简单图形进行组合为复杂的复合图形。
15.
支持任意复杂的多边形运算,包括相交,想并,取余,联合等等操作。
16.
每个图形系统内设5个额外参数控制点,通过这些额外控制点,可调节图形的状态参数。
17.
支持直线与弧线混合编辑,可直接操作某一段图形,可将其在直线和弧线等自由转换。
18. 全面支持Undo / Redo,可设定任何多级Undo /
Redo操作。
19.
可为画布上的任何图形增加即插即用的新属性值,并且新增加的属性值在修改时自动支持UNDO / REDO.
20. 支持复合文本RTF的直接编辑和直接打印输出。
21.
可对画布上的任何图形进行移动,旋转,缩放,变形,扭曲,排布等等高级的操作。
22. 支持画布大比例缩放。
23. 可通过鼠标平推画布。
24. 支持厘米,毫米,英尺,英寸等多种刻度标尺。
25. 可直接导入bmp, wmf, emf, jpeg, gif,
tga, pcx, png, mng等图像文件。
26. 全面支持剪贴版,可自由复制,粘贴图形。
27. 可自由调整画布中图形的排布层次。
28.
提供小图预视功能,并可通过预视图像的矩形框,调整当前画布的显示位置。
29. 提供功能一致的ocx控件,方便
web部署或者其他语言平台开发人员进行同样功能的调用。
30.
最重要的是我们将所有这些的经过严格测试的高品质VC++源代码提供给您,此源代码还包括ocx控件的设计源代码。
d
全部超过50万行精心设计并严格测试的源代码提供无任何保留!
提供超过400个C++扩展类,50万行有效VC++/MFC源代码,70多个示例或者解决方案源代码,完整的而细致的用户在线帮助系统和文档,精心设计的辅助开发工具!
强大,灵活和易于使用的可视化图型源码库。
功能强大,灵活地创建各种各样的满足您的需求的图表。产品设计规范,很容易使用,在短短的几天就能根据您的需求设计出产品。
我们提供完整的支持产品下载试用。
功能丰富。
超多功能,如自动布局,多层次,可折叠子图,单元连接点中,XML,DXF, SHP, SVG等等,能够协助您快速灵活的创建复杂的图表。支持大量事件:如单击,双击,悬停,选择,橡皮筋选择,复制,删除,调整大小和移动的支持。支持最复杂的操作:如拖和拖放,无限次的撤销/重做和剪贴板操作等等。
节省时间和金钱,获得可靠性。
一张图胜过千言万语,E-Form++提供超过50万行精心设计和良好测试的C++源代码!开发耗时十年,全球上千家客户验证,能够为您节省大量的开发时间和金钱!
现在就来试试!
不要光听我们的说, 试试吧! 我们的免费试用版包括所有你需要你的应用程序原型。免费技术支持。
|