WinCCOAチュートリアル。パート9。制御スクリプト。速くはありませんが、正しいです。フルUIローンチ

バルブ動作モデルを作成するプロセスで、モデルスクリプトを作成(および最後の部分で変更)しました。このスクリプトには、いくつかのdpConnect呼び出しといくつかのコールバック関数がありました。それから私はこれが「速いが間違った方法」であると書いた。この一時停止は、dpQuery関数に慣れるのに必要でした。少し戻って、dpQueryConnectファミリの関数を使用して、モデルをゆっくりと非常に退屈に 正しく実装することを提案し ます。スクリプトモデルを開いてみましょう。





// $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