Korty123 SW Mosaic 12. 6. 2024 12:01 31. 3. 2023 8:44

Vážené TECO.

Lze nějak ovlivnit alokaci dat v zápisníku %X nebo %Y ze vstupních/výstupních modulů pro Foxtrot 2?

Potřeboval bych to z důvodu komunikace dvou PLC přes Epsnet. Za prvé vstupní moduly(IB-1301) mají rezervy pro krátké pulzy a čítače. A za druhé pokud přidám v hardwarové konfiguraci nějaký komunikační modul tak se alokace IO modulů v zápisníku %X posune. A to není žádoucí jelikož pak v druhém automatu nebude komunikace na správném místě.

Předem děkuji za odpověď.

S pozdravem Kortánek Matěj, Microcomp spol. s r.o. Milevsko 

Odpovědi 2

M.B. 28. 3. 2023 14:49

U řady Foxtrot přidělována pamět pro vstupní a výstupní moduly automaticky. Je možné vyhradit začátek zóny X a Y volbou překladače v Manažeru projektu > Rezervace absolutních zón. V těchto rezervovaných prostorech může uživatel založit svoje struktury nad kterými má plnou kontrolu. V případě vstupů se pak do těcho struktur stavy vstupů kopírují z dat vracených moduly. V případě výstupů se z těchto struktur kopírují data do dat spracovávaných moduly.

Např.:

VAR_GLOBAL
  X_B AT %X0.0 : ARRAY [0..99] OF BOOL;  //binarni vstupy
  X_A AT %X100 : ARRAY [0..19] OF REAL;  //analogove vstupy
  Y_B AT %Y0.0 : ARRAY [0..99] OF BOOL;  //binarni vystupy
  Y_A AT %Y100 : ARRAY [0..19] OF REAL;  //analogove vystupy
END_VAR

PROGRAM prgMain
  VAR

  END_VAR
  //prirazeni vstupu
  X_B[0] := CP2007_IO_IN.DIS.DI0;
  X_B[1] := CP2007_IO_IN.DIS.DI1;
  X_B[2] := CP2007_IO_IN.DIS.DI2;
  X_B[3] := CP2007_IO_IN.DIS.DI3;
  X_B[4] := CP2007_IO_IN.DIS.DI4;
  X_B[5] := CP2007_IO_IN.DIS.DI5;
  X_B[6] := CP2007_IO_IN.DIS.DI6;
  X_B[7] := CP2007_IO_IN.DIS.DI7;
  X_B[8] := CP2007_IO_IN.DIS.DI8;
  X_B[9] := CP2007_IO_IN.DIS.DI9;
  X_B[10] := _0_IB_1301_IN.DIS.DI0;
  X_B[11] := _0_IB_1301_IN.DIS.DI1;
  X_B[12] := _0_IB_1301_IN.DIS.DI2;
  X_B[13] := _0_IB_1301_IN.DIS.DI3;
  X_B[14] := _0_IB_1301_IN.DIS.DI4;
  X_B[15] := _0_IB_1301_IN.DIS.DI5;
  X_B[16] := _0_IB_1301_IN.DIS.DI6;
  X_B[17] := _0_IB_1301_IN.DIS.DI7;
  //--
  X_B[20] := _1_IR_1501_IN.DIS.DI0;
  X_B[21] := _1_IR_1501_IN.DIS.DI1;
  X_B[22] := _1_IR_1501_IN.DIS.DI2;
  X_B[23] := _1_IR_1501_IN.DIS.DI3;
  //analog
  X_A[0] := CP2007_IO_IN.AI0.ENG;
  X_A[1] := CP2007_IO_IN.AI1.ENG;
  X_A[2] := CP2007_IO_IN.AI2.ENG;
  X_A[3] := CP2007_IO_IN.AI3.ENG;
  X_A[4] := CP2007_IO_IN.AI4.ENG;
  X_A[5] := CP2007_IO_IN.AI5.ENG;
  X_A[6] := CP2007_IO_IN.AI6.ENG;
  
  //vykonny program...
  //...pouziva X_B, X_A, Y_B, Y_A
  ///...
  
  //prirazeni vystupu
  CP2007_IO_OUT.DOS.DO0  := Y_B[0];
  CP2007_IO_OUT.DOS.DO1  := Y_B[1];
  CP2007_IO_OUT.DOS.DO2  := Y_B[2];
  CP2007_IO_OUT.DOS.DO3  := Y_B[3];
  CP2007_IO_OUT.DOS.DO4  := Y_B[4];
  CP2007_IO_OUT.DOS.DO5  := Y_B[5];
  CP2007_IO_OUT.DOS.DO6  := Y_B[6];
  CP2007_IO_OUT.DOS.DO7  := Y_B[7];
  CP2007_IO_OUT.DOS.DO8  := Y_B[8];
  CP2007_IO_OUT.DOS.DO9  := Y_B[9];
  CP2007_IO_OUT.DOS.DO10 := Y_B[10];
  CP2007_IO_OUT.DOS.DO11 := Y_B[11];
  //---
  _1_IR_1501_OUT.DOS.DO0 := Y_B[20];
  _1_IR_1501_OUT.DOS.DO1 := Y_B[21];
  _1_IR_1501_OUT.DOS.DO2 := Y_B[22];
  _1_IR_1501_OUT.DOS.DO3 := Y_B[23];
  _1_IR_1501_OUT.DOS.DO4 := Y_B[24];
  _1_IR_1501_OUT.DOS.DO5 := Y_B[25];
  _1_IR_1501_OUT.DOS.DO6 := Y_B[26];
  _1_IR_1501_OUT.DOS.DO7 := Y_B[27];
  //analogy
  CP2007_IO_OUT.AO0.ENG := Y_A[0];
  CP2007_IO_OUT.AO1.ENG := Y_A[1];
  CP2007_IO_OUT.AO2.ENG := Y_A[2];
  CP2007_IO_OUT.AO3.ENG := Y_A[3];

END_PROGRAM

Uživatelské zóny nemusí být jako pole, ale je možné použít i struktury modulů a pak s výhodou přiřazovat celé struktury najednou.

Např.:

VAR_GLOBAL
  CP2007_BIN AT %X0 : TBIN_15DI;
  IB1301_BIN AT %X3 : TBIN_12DI;
  IR1501_BIN AT %X5 : TBIN_4DI;
  CP2007_AIN AT %X10 : ARRAY [0..13] OF TAI;
  
  CP2007_BOUT AT %Y0 : TBIN_13DO;
  IR1501_BOUT AT %Y2 : TBIN_8DOW;
  CP2007_AOUT AT %X10 : ARRAY [0..3] OF TAO;
END_VAR

PROGRAM prgMain2

  //prirazeni vstupu

  CP2007_BIN := CP2007_IO_IN.DIS;
  IB1301_BIN := _0_IB_1301_IN.DIS;
  IR1501_BIN := _1_IR_1501_IN.DIS;
  CP2007_AIN[0] := CP2007_IO_IN.AI0;
  CP2007_AIN[1] := CP2007_IO_IN.AI1;
  CP2007_AIN[2] := CP2007_IO_IN.AI2;
  CP2007_AIN[3] := CP2007_IO_IN.AI3;
  CP2007_AIN[4] := CP2007_IO_IN.AI4;
  CP2007_AIN[5] := CP2007_IO_IN.AI5;
  CP2007_AIN[6] := CP2007_IO_IN.AI6;
  CP2007_AIN[7] := CP2007_IO_IN.AI7;
  CP2007_AIN[8] := CP2007_IO_IN.AI8;
  CP2007_AIN[9] := CP2007_IO_IN.AI9;
  CP2007_AIN[10] := CP2007_IO_IN.AI10;
  CP2007_AIN[11] := CP2007_IO_IN.AI11;
  CP2007_AIN[12] := CP2007_IO_IN.AI12;
  CP2007_AIN[13] := CP2007_IO_IN.AI13;

  //vykonny program...
  //...pouziva CP2007_BIN, IB1301_BIN, IR1501_BIN,...
  ///...

  //prirazeni vystupu
  CP2007_IO_OUT.DOS := CP2007_BOUT;
  _1_IR_1501_OUT.DOS := IR1501_BOUT;
  CP2007_AOUT[0] := CP2007_IO_OUT.AO0;
  CP2007_AOUT[1] := CP2007_IO_OUT.AO1;
  CP2007_AOUT[2] := CP2007_IO_OUT.AO2;
  CP2007_AOUT[3] := CP2007_IO_OUT.AO3;
  

END_PROGRAM

 

 

M.B. 31. 3. 2023 8:44

Upozornění, verze firmware 5.6 a 5.7 pro Foxtrot 2 a TC800 obsahují chybu, kdy je do prostoru %X0 a až %X128 mapována diagnostika IO i v případě, že je uživatelsky přesunuta rezervací absolutní zóny.

Tento dotaz je vyřešený.