SlimLine Biblioteca de zmeură eCDSSystem8Core

După realizarea primului nostru proiect în CODESYS (Vezi articolul) putem să folosim biblioteca eCDSS8CoreMng. Această bibliotecă conține toate obiectele funcționale și FB-uri pentru gestionarea modulelor de extensie din SlimLine, descărcare bibliotecă, programul SimpleStartUp descrise în acest articol pot fi găsite în PTP161 (Descarcă).

Instalarea de biblioteci

Pentru a utiliza biblioteca, instalați-o în depozitul de bibliotecă de pe PC. Descărcați biblioteca din meniu Gestore libreria selecta Repository librerie și alegeți Installa va fi posibil să răsfoiți discul și să căutați fișierul de bibliotecă care va fi transferat la "C:\ProgramData\CODESYS\Managed Libraries\Elsist Srl\".

Utilizarea bibliotecii

Creați un nou proiect așa cum este indicat în acest articoladăugați biblioteca la proiect.

Managementul I2C al modulelor de expansiune

Modulul CPU gestionează modulele de extensie cu o conexiune în I2C, astfel încât driverul de gestionare trebuie instalat. Cu butonul drept al mouse-ului de pe dispozitiv I2C alegeți elementul Aggiungi dispositivoși selectați dispozitivul I2C master. Valoarea setată pe dispozitiv este /dev/i2c-4.

Dispozitivul va fi adăugat în arborele de proiect și după cum se vede din fotografie, va fi creată variabila I2C_master de tip i2cMaster. Numele variabilei este important, deoarece va fi comunicat FB-ului de administrare a sistemului.

Exemple

Cum se utilizează exemplele.

Toate obiectele (Funcții și FB) utile pentru accesarea diferitelor module sunt disponibile în bibliotecă, consultați documentația bibliotecii pentru o listă. Acum puteți scrie programul, în interiorul „PLC_PRG” trebuie să instantanăm și să executăm blocul funcțional SysCoreManager (Manager de sistem) la care trebuie să trecem adresa managerului de autobuz I2C. Prin activarea FB, semnalul gata este activat pe magistrala de extensie și circuitul hardware pentru câine de veghe și toate modulele conectate la magistrala de extensie sunt inițializate.

LogicLab (Ptp161)
PROGRAM PLC_PRG
VAR
  DInp: ARRAY[ 0..2 ] OF DWORD; //Digital input value
  DOut: ARRAY[ 0..2 ] OF DWORD; //Digital output value
  LpTime: ARRAY[ 0..1 ] OF UDINT; //Loop time (uS)
  TimeBf: ARRAY[ 0..3 ] OF UDINT; //Time buffer (uS)
  S8Core: eS8Core.SysCoreManager; //System 8 core manager
  AnInp: ARRAY[ 0..1 ] OF eS8Core.SysGetAnInp; //Analog input acquisition
  AnOut:  ARRAY[ 0..1 ] OF eS8Core.SysSetAnOut; //Analog output management
END_VAR

// -------------------------------------------------------------------------
// EXECUTION TIME CALCULATION AUSILIARES
// -------------------------------------------------------------------------
// Here the reference time is saved.

LpTime[0]:=eS8Core.SysGetSysTime(TRUE); //Loop time (uS)

// -------------------------------------------------------------------------
// SYSTEM 8 CORE MANAGEMENT
// -------------------------------------------------------------------------
// PConsole defines TCP port to which it's possible to connect by telnet
// HWDogTm defines watch dog refresh time.
// pI2CManager defines the I2C driver used to manage the extension bus.

S8Core(Enable:=TRUE, PConsole:=10000, HWDogTm:=0, pI2CManager:=ADR(I2C_master));
IF NOT(S8Core.Ready) THEN RETURN; END_IF;

// Put here some initializations if needed.

// IF (S8Core.Init) THEN END_IF;

// -------------------------------------------------------------------------
// DIGITAL I/O MODULES MANAGEMENT
// -------------------------------------------------------------------------
// Here are managed all the digital I/O modules. The function reads digital
// inputs and writes digital outputs.

SysDIOModule(0, ADR(DInp[0]), ADR(DOut[0])); //Modulo "0"

// -------------------------------------------------------------------------
// BLINK OUTPUTS
// -------------------------------------------------------------------------
// Here outputs 0 and 1 of module 0 are blinking.

IF ((eS8Core.SysGetSysTime(TRUE)-TimeBf[0]) > 100000) THEN
  TimeBf[0]:=eS8Core.SysGetSysTime(TRUE); DOut[0].0:=NOT(DOut[0].0);
END_IF;

IF ((eS8Core.SysGetSysTime(TRUE)-TimeBf[1]) > 200000) THEN
  TimeBf[1]:=eS8Core.SysGetSysTime(TRUE); DOut[0].1:=NOT(DOut[0].1);
END_IF;

// -------------------------------------------------------------------------
// ANALOG I/O MODULES MANAGEMENT
// -------------------------------------------------------------------------
// Here are managed some analog I/Os on the module 0.

AnOut[0](Address:=0, Channel:=0, Mode:=AO_MODE.DA_VOLT_0_10);
AnInp[0](Address:=0, Channel:=0, Mode:=AI_MODE.AD_VOLT_0_10_COMMON);
 
AnOut[1](Address:=0, Channel:=1, Mode:=AO_MODE.DA_VOLT_0_10);
AnInp[1](Address:=0, Channel:=1, Mode:=AI_MODE.AD_VOLT_0_10_COMMON);

// Every 5 Secs a random voltage (Range 0.0 to 10.0) is set on outputs.

IF ((eS8Core.SysGetSysTime(TRUE)-TimeBf[3]) > 5000000) THEN
  TimeBf[3]:=eS8Core.SysGetSysTime(TRUE); //Time buffer (uS)
  AnOut[0].Value:=SysGetRandom(TRUE)*10.0; //Analog output value (Volt)
  AnOut[1].Value:=SysGetRandom(TRUE)*10.0; //Analog output value (Volt)
END_IF;

// -------------------------------------------------------------------------
// CALCULATES THE EXECUTION TIME
// -------------------------------------------------------------------------
// Here is calculated the time needed to execute the program. The value in
// uS is stored in LpTime[1] variable.

LpTime[1]:=eS8Core.SysGetSysTime(TRUE)-LpTime[0]; //Loop time (uS)

// [End of file]
A fost util acest articol?