Tutorial WinCC OA. Bagian 4. Penggunaan kembali objek. $ -parameters

Di bagian sebelumnya, kami menyelesaikan visualisasi katup dan membuat skrip sederhana untuk mensimulasikan perilakunya.





Kami memiliki satu panel bernama Flap, yang menampilkan dan mengirimkan perintah untuk satu katup - Flap1. Titik data ini ditentukan di semua skrip di panel ini. Muncul pertanyaan wajar - apa yang harus dilakukan jika ada lebih dari satu katup? Dan bahkan tidak dua. Dan beberapa puluh, ratusan bahkan ribuan (untuk sistem terdistribusi, WinCC OA dan beberapa juta sinyal bukanlah halangan, kami melihat Large Hadron Collider, di mana sistem ini digunakan, dan kami iri).





Opsi yang jelas adalah membuat beberapa puluh, ratusan dan ribuan panel, di mana setiap titik data diberikan secara eksplisit, kami mengesampingkannya - itu panjang, merepotkan dan mengancam dengan biaya tenaga kerja yang besar jika terjadi perubahan sekecil apa pun yang tidak dapat dihindari selama NDP.





Pilihan lain, tetapi bukan satu-satunya, adalah membuat template berdasarkan panel yang ada. Mari buat salinan dari panel Flap yang ada dengan memilih item menu Panel β†’ Save Panel As. Mari kita atur nama Panel_ref.pnl (akhiran _ref menyiratkan referensi, yaitu tautan, atau, jika Anda suka, templat)





Mari buka panel Flap_ref (itu harus tetap terbuka setelah disimpan). Mari edit skrip panel dengan memilih Edit β†’ Edit Panel Scripts dari menu. Sebuah jendela akan terbuka berisi semua skrip dari semua grafik primitif panel ini.





, , . , .. : Flap1, Flap2 Flap3 . , , Flap1 , $- ( Β«-Β»). Find&Replace . .





────────────────────────────────────────────────────────────────────────────────────────────────────
─// [RECTANGLE3] [3] - [Initialize]
// SimpleCtrlScriptStart {invalid}
main()
{
  EP_setRotation();
}

void EP_setRotation()
{
  dyn_errClass err;

  if( !dpExists( "System1:" + $dp + ".Inputs.Position:_online.._value") )
  {
    setValue("", "color", "_dpdoesnotexist");
    return;
  }

  dpConnect("EP_setRotationCB",
            "System1:" + $dp + ".Inputs.Position:_online.._value");
  err = getLastError();
  if (dynlen(err) > 0)
    setValue("", "color", "_dpdoesnotexist");

}


void EP_setRotationCB(string dp1, int iNewValue)
{
  float MIN_VALUE = 0;
  float MAX_VALUE = 90;
  float MIN_ROTATION = 0;
  float MAX_ROTATION = 90;

  float fRotation;
  fRotation = ( 1.0 * (MAX_ROTATION - MIN_ROTATION) / (MAX_VALUE - MIN_VALUE)) *
              (iNewValue - MIN_VALUE) + MIN_ROTATION;
  if (fRotation > MAX_ROTATION) fRotation = MAX_ROTATION;
  else if (fRotation < MIN_ROTATION) fRotation = MIN_ROTATION;

  setValue("", "rotation", fRotation);
}

// SimpleCtrlScript {EP_setRotation}
// DP {System1:" + $dp + ".Inputs.Position}
// DPConfig {:_online.._value}
// DPType {int}
// PVSSRange {0}
// Min {0}
// Max {90}
// MinRotation {0}
// MaxRotation {90}
// SimpleCtrlScriptEnd {EP_setRotation}
════════════════════════════════════════════════════════════════════════════════════════════════════
─// [PUSH_BUTTON1] [4] - [Clicked]
main(mapping event)
{
  dpSet("System1:" + $dp + ".Commands.Open", 1, "System1:" + $dp + ".Commands.Close", 0);
}
════════════════════════════════════════════════════════════════════════════════════════════════════
─// [PUSH_BUTTON2] [5] - [Clicked]
main(mapping event)
{
  dpSet("System1:" + $dp + ".Commands.Open", 0, "System1:" + $dp + ".Commands.Close", 1);
}
════════════════════════════════════════════════════════════════════════════════════════════════════

      
      



:





System1:Flap1.Inputs.Position:online..value





:





System1:" + $dp + ".Inputs.Position:online..value





, , (System1), $dp, , , .. β€” . + . . , , . $dp (Flap2, ) .





, $- . , , .





. Flaps. .





Flap_ref Flaps. $- β€” .





Drag'n'drop
Drag'n'drop

, $dp Flap1. Β«Save and Run in QuickTest ModeΒ» , 1 Open Close β€” , . , -, , ( , , , , ).





Semuanya bekerja

Flap2





. (), - . ? , ( ) Flap1. .





Katup kedua tidak berfungsi

, . , , -. dpConnect callback-, callback-. .





Control Manager (, Β«-num 2Β»). , .





Karena fakta bahwa kami memiliki konfigurasi dengan fungsi yang ditetapkan pada Posisi DPE, katup ketiga belum ditampilkan di layar (sebenarnya, saya dengan sia-sia menambahkannya ke model).








All Articles