SlimLine Biblioteca de frambuesas eCDSSystem8Core

Después de realizar nuestro primer proyecto en CODESYS (Ver artículo) podemos usar la biblioteca eCDSS8CoreMng. Esta biblioteca contiene todos los objetos de función y FB para administrar los módulos de extensión de SlimLine, descarga de la biblioteca, el programa SimpleStartUp descrito en este artículo se puede encontrar en el PTP161 (Descargar).

Instalación de la biblioteca

Para usar la biblioteca, instálela en el repositorio de la biblioteca en su PC. Descarga la biblioteca desde el menú. Gestore libreria selezionare Repository librerie y seleccione Installa será posible explorar el disco y buscar el archivo de la biblioteca que se transferirá a "C:\ProgramData\CODESYS\Managed Libraries\Elsist Srl\".

Uso de la biblioteca

Crea un nuevo proyecto como se indica en este artículo, agregue la biblioteca al proyecto.

Gestión I2C de módulos de expansión.

El módulo de la CPU administra los módulos de extensión con una conexión en I2C, por lo que el controlador de administración debe estar instalado. Con el botón derecho del ratón en el dispositivo. I2C elige el artículo Aggiungi dispositivo, y selecciona el dispositivo I2C master. El valor a configurar en el dispositivo es /dev/i2c-4.

El dispositivo se agregará al árbol del proyecto y, como se ve en la foto, se creará la variable I2C_master de tipo i2cMaster. El nombre de la variable es importante porque se comunicará al FB de gestión del sistema.

Ejemplos

Cómo utilizar los ejemplos..

Todos los objetos (Funciones y FB) útiles para acceder a los distintos módulos están disponibles en la biblioteca, consulte la documentación de la biblioteca para obtener una lista. Ahora puedes escribir el programa, dentro de "PLC_PRG" tenemos que instanciar y ejecutar el bloque de funciones SysCoreManager (Administrador del sistema) al que debemos pasar la dirección del administrador del bus I2C. Al habilitar el FB, la señal de listo se activa en el bus de extensión y el circuito de vigilancia del hardware y todos los módulos conectados al bus de extensión se inicializan.

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]
¿Le resultó útil este artículo?