4.4 基于Active控件的组态王条件查询
为了完成如此复杂的查询,使用了Active控件,因为组态王支持第三方控件,将所有的条件罗列出来进行排列组合,将每一种情况都考虑在内。然后通过程序来实现选择条件转换成SQLSELECT()函数工作的条件。
(1)任意查询任意生产线在任意时段的产量。因为工艺要求能够任意查询任意生产线在任意时段的产量,为了能够实现该功能,新建\\本站点\CX_Hour,\CX_Minute1变量。在以时间段进行查询时,先将以前两个变量输入的时间做为条件进行查询,将查询出记录的数据赋给在过程中自定义的中间变量。然后再以后两个变量输入的时间为条件进行查询,将查询出的结果同样赋给自定义的中间变量。将两次查询的结果求差然后,将日期,时间,车间,生产线,产量通过报表的组态添到表格当中。
(2)对于月产量的查询。需要判断输入的月份有几天,然后从该月的第一天开始到最后一天进行查询,查询的时刻为每一天的23:59分时各生产线的产量。然后对查询出的数据进行累加,直到该月的最后一天,然后按照特定的格式将数据填写到报表当中。在该过程中需要灵活的运用循环语句:While{}以及深刻的体会组态王的变量与数据库进行数据交换的过程。
查询的条件比较复杂,有些条件不能同时成立,因此在选择条件时,应该要互相限制,以避免出现混乱的现象。具体的程序在应用程序命令语言运行时写如下程序:
//String Systime=StrFromInt(\\本站点\$时,10 )+":"+StrFromInt(\\本站点\$分,10 );
//===================判断 早班,中班,晚班和查询的时段===================================
String Timestr=StrFromInt( \\本站点\$时, 10 )+StrFromInt( \\本站点\$分, 10 );
Long Timereal=StrToInt( Timestr );
if(Timereal>=730)
{ if(Timereal<=1530)
\\本站点\班次1="早班"; }
if(Timereal>1530)
{ if(Timereal<=2330)
\\本站点\班次1="中班"; }
if(Timereal>2330)
{ if(Timereal<=2359)
\\本站点\班次1="晚班"; }
if(Timereal>=0)
{ if(Timereal<730)
\\本站点\班次1="晚班"; }
\\本站点\日期=\\本站点\$日期;
\\本站点\时间=StrFromReal( \\本站点\$时, 0, "f" )+":"+StrFromReal( \\本站点\$分, 0, "f" );
if(CommFine1)
{ CommText1="通讯失败!";}
else
{ CommText1="通讯正常!";}
if(CommFine2)
{ CommText2="通讯失败!";}
else
{ CommText2="通讯正常!";}
//===================统计月产量时,查询报表的个数计算====================
if(\\本站点\MonthInput==1){ \\本站点\DayNumber=31;}
if(\\本站点\MonthInput==2){ \\本站点\DayNumber=28;}
if(\\本站点\MonthInput==3){ \\本站点\DayNumber=31;}
if(\\本站点\MonthInput==4){ \\本站点\DayNumber=30;}
if(\\本站点\MonthInput==5){ \\本站点\DayNumber=31;}
if(\\本站点\MonthInput==6){ \\本站点\DayNumber=30;}
if(\\本站点\MonthInput==7){ \\本站点\DayNumber=31;}
if(\\本站点\MonthInput==8){ \\本站点\DayNumber=31;}
if(\\本站点\MonthInput==9){ \\本站点\DayNumber=30;}
if(\\本站点\MonthInput==10){ \\本站点\DayNumber=31;}
if(\\本站点\MonthInput==11){ \\本站点\DayNumber=30;}
if(\\本站点\MonthInput==12){ \\本站点\DayNumber=31;}
//=================月产量查询的条件限定===================
if(Check6)
{ Check1=0;Check2=0;Check3=0;Check4=0;Check5=0;}
//==================查询时间和时间段不能同时有效===================
if(\\本站点\Check2)
{\\本站点\Check3=0;Check1=1;}
if(\\本站点\Check3)
{\\本站点\Check2=0;Check1=1;Check6=0;}
//====================插入表格的名称======================
NameTable="A"+StrFromInt( \\本站点\$年, 10)+StrFromInt( \\本站点\$月, 10)+StrFromInt( \\本站点\$日, 10);
<7>.工艺要求能够查询任意生产线每分钟的产量,所以通过事件发生命令语言实现。每当系统时间的秒等于59时,触发执行如下程序。该部分的程序如下:
//==========================向数据库插入数据============================
long ih=1;
车间=1;
//SQLInsertPrepare( DeviceID, NameTable, "bind", SQLHandle);
while(ih<=16)
{ if(ih==1) {产量=Fir_NO1;生产线="1-1";} if(ih==2) {产量=Fir_NO2;生产线="1-2";} if(ih==3){产量=Fir_NO3;生产线="2-1";} if(ih==4) {产量=Fir_NO4;生产线="2-2";} if(ih==5) {产量=Fir_NO5;生产线="3-1";} if(ih==6){产量=Fir_NO6;生产线="3-2";}
if(ih==7) {产量=Fir_NO7;生产线="4-1";} if(ih==8) {产量=Fir_NO8;生产线="4-2";} if(ih==9){产量=Fir_NO9;生产线="5-1";} if(ih==10) {产量=Fir_NO10;生产线="5-2";} if(ih==11) {产量=Fir_NO11;生产线="6-1";} if(ih==12){产量=Fir_NO12;生产线="6-2";}
if(ih==13) {产量=Fir_NO13;生产线="7-1";} if(ih==14) {产量=Fir_NO14;生产线="7-2";} if(ih==15){产量=Fir_NO15;生产线="8-1";} if(ih==16) {产量=Fir_NO16;生产线="8-2";}
// \\本站点\序号=\\本站点\序号+1;
SQLInsert( DeviceID,NameTable, "bind" );
//SQLInsertExecute( DeviceID, "bind", SQLHandle);
ih=ih+1;
long jh=1;
车间=2;
while(jh<=10)
{
if(jh==1) {产量=Sec_NO1;生产线="1-1";} if(jh==2) {产量=Sec_NO2;生产线="1-2";} if(jh==3){产量=Sec_NO3;生产线="2-1";} if(jh==4) {产量=Sec_NO4;生产线="2-2";} if(jh==5) {产量=Sec_NO5;生产线="3-1";} if(jh==6){产量=Sec_NO6;生产线="3-2";}
本文关键字:监控 台达plc应用,plc技术 - plc应用 - 台达plc应用
上一篇:台达应用于线缆切割机