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
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.
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]