Dalam proses pembuatan model perilaku katup, kami membuat (dan memodifikasinya di bagian terakhir) skrip Model, di mana ada beberapa panggilan dpConnect dan beberapa fungsi panggilan balik. Kemudian saya menulis bahwa ini adalah "cara yang cepat tapi salah". Jeda ini diperlukan untuk membiasakan diri dengan fungsi dpQuery. Saya mengusulkan untuk kembali sedikit dan menerapkan model secara perlahan dan sangat membosankan dengan benar, sekarang menggunakan fungsi dari keluarga dpQueryConnect. Mari kita buka Model skrip kita.
// $License: NOLICENSE
//--------------------------------------------------------------------------------
/**
@file $relPath
@copyright $copyright
@author akcou
*/
//--------------------------------------------------------------------------------
// Libraries used (#uses)
//--------------------------------------------------------------------------------
// Variables and Constants
//--------------------------------------------------------------------------------
/**
*/
main()
{
dpConnect("OnOpen_CB1", "System1:Flap1.Commands.Open");
dpConnect("OnOpen_CB2", "System1:Flap2.Commands.Open");
dpConnect("OnOpen_CB3", "System1:Flap3.Commands.Open");
for (;;) {
dpSet("System1:Flap1.Inputs.Flow", rand());
dpSet("System1:Flap2.Inputs.Flow", rand());
delay(1);
}
}
void OnOpen_CB1(string dp1, bool bNewValue)
{
if (bNewValue) {
dpSet("System1:Flap1.Inputs.Position", 90);
} else {
dpSet("System1:Flap1.Inputs.Position", 0);
}
}
void OnOpen_CB2(string dp1, bool bNewValue)
{
if (bNewValue) {
dpSet("System1:Flap2.Inputs.Position", 90);
} else {
dpSet("System1:Flap2.Inputs.Position", 0);
}
}
void OnOpen_CB3(string dp1, bool bNewValue)
{
if (bNewValue) {
dpSet("System1:Flap3.Inputs.Position", 90);
} else {
dpSet("System1:Flap3.Inputs.Position", 0);
}
}
dpConnect DPE, . dpQueryConnect . , SQL-. , SQL-, : Flap1, Flap2 Flap3. — dpQueryConnectSingle dpQueryConnectAll. - . , . , , DPE . «» , .
, WinCC OA , — , . , , dpQueryConnectSingle . . , Flap4. Flap4 , . , . « ». , , . «», ( Flap1, Flap2, Flap3), ( 4 ). .
«» . SQL-query .
Model main
main()
{
dpQueryConnectSingle("OnOpenAll_CB",FALSE, "", "SELECT '_original.._value' FROM 'Flap*.Commands.Open'");
//dpConnect("OnOpen_CB1", "System1:Flap1.Commands.Open");
//dpConnect("OnOpen_CB2", "System1:Flap2.Commands.Open");
//dpConnect("OnOpen_CB3", "System1:Flap3.Commands.Open");
for (;;) {
dpSet("System1:Flap1.Inputs.Flow", rand());
dpSet("System1:Flap2.Inputs.Flow", rand());
delay(1);
}
}
dpConnect . dpQueryConnectSingle. OnOpenAll_CB.
. callback- . , , SQL-. , , , , -, , .
— . FlapX, X — . , Position FlapX. , «» . — .
sDPE — , System1:Flap2.Commands.Open
bNewValue — , true false
split — DPE , , , System1:Flap2
« » , , .
OnOpenAll_CB(string s, dyn_dyn_anytype ddaTab)
{ //ddaTab contains DPE and the changed value
int z; //
string sDPE; // ,
dyn_string split; // DPE
bool bNewValue; //
for(z=2;z<=dynlen(ddaTab);z++) // , -
{
sDPE = ddaTab[z][1]; // DPE, - DPE , System1:FlapX.Commands.Open
bNewValue = ddaTab[z][2]; // ,
split = strsplit(sDPE, "."); // DPE , , System1:FlapX
//DebugN("AGK", sDPE, bNewValue);
//DebugN("AGK", split);
if (bNewValue) { // ""
dpSet(split[1] + ".Inputs.Position", 90); // Position 90
} else {
dpSet(split[1] + ".Inputs.Position", 0); //
}
}
}
, , Main , .
, . Main QuickTest , . , . ui-.
User Interface. 2 (-num 2), ui — , . , «-p Main.pnl» — , . (always). ui.