编辑整理:整理来源:爱奇艺,浏览量:58,时间:2022-06-23 04:00:01
scada数据采集分析,scada应用案例,scada应用案例
B板块属于电气应用板块,下面分有:B0(西门子系列PLC)B2(施耐德系列PLC)B3(A-B系列PLC)B4(自动化系统相关知识)B5(工业仪表相关)B6(低压电气部分)B8(中高压电气部分)B9(电气自动化其他)
本回答被网友采纳一、准备工业控制所需的各种元件:
使用E-Form++提供的高品质复合图形设计程序ShapeDesigner设计需要的工控元件,您可以使用E-Form++本身提供大量基础图形来完成复杂元件的设计
在右边画布中设计好的各种工控复合图形元件可以直接通过鼠标复制粘贴的方式放置到左边的工具盒中,以后再使用的时候直接拖拉出来即可。
二、设计工业控制画面:
通过附随E-Form++产品提供的DiagramEditor,可以为指定的工业控制设计相应的画面,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);
内存(内部储存器)又分为ROM和RAM,即只读存储器和随机存储器。事实上ROM也可以视作一种硬盘,尤其是在探讨智能手机的内部构造时,但是由于RAM具有掉电失忆的特性,一次断电就会丢失所有数据,所以只有ROM。ROM在断电后能够随机保存之前没有备份的文件(只丢失部分而不会丢失全部,有备份当然相提并论)。但是请记牢,ROM中的数据可以通过光擦除(照射光)或者电擦除(通电后立即断电)的方式进行删除。因此如果需要使用ROM存储数据,不但涉及到的技术十分麻烦,而且还要保证不被强光照射。