Tutorial WinCC OA. Bagian 9. Skrip kontrol. Tidak cepat, tapi benar. Peluncuran ui penuh

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.












All Articles