SlimLine Himbeerbibliothek eCDSSystem8Core

Nach unserem ersten Projekt in CODESYS (Siehe Artikel) können wir die Bibliothek benutzen eCDSS8CoreMng. Diese Bibliothek enthält alle Funktionsobjekte und FBs zur Verwaltung der Erweiterungsmodule von SlimLine, Bibliothek herunterladen, das Programm SimpleStartUp in diesem Artikel beschriebenen finden Sie in der PTP161 (Herunterladen).

Bibliotheksinstallation

Um die Bibliothek zu verwenden, installieren Sie sie im Bibliotheksrepository auf Ihrem PC. Laden Sie die Bibliothek aus dem Menü herunter Gestore libreria selezionare Repository librerie und wählen Sie Installa es wird möglich sein, die Platte zu durchsuchen und nach der Bibliotheksdatei zu suchen, die auf die "C:\ProgramData\CODESYS\Managed Libraries\Elsist Srl\".

Bibliotheksnutzung

Erstellen Sie ein neues Projekt wie in angegeben dieser Artikel, fügen Sie die Bibliothek zum Projekt hinzu.

I2C-Management von Erweiterungsmodulen

Das CPU-Modul verwaltet die Erweiterungsmodule mit einer Verbindung in I2C, daher muss der Verwaltungstreiber installiert werden. Mit der rechten Maustaste am Gerät I2C wähle den Gegenstand Aggiungi dispositivound wählen Sie das Gerät aus I2C master. Der am Gerät einzustellende Wert ist /dev/i2c-4.

Das Gerät wird dem Projektbaum hinzugefügt, und wie auf dem Foto zu sehen ist, wird die Variable erstellt I2C_master vom Typ i2cMaster. Der Name der Variablen ist wichtig, da er dem Systemverwaltungs-FB mitgeteilt wird.

Beispiele

Verwendung der Beispiele.

Alle für den Zugriff auf die verschiedenen Module nützlichen Objekte (Funktionen und FB) sind in der Bibliothek verfügbar. Eine Liste finden Sie in der Dokumentation der Bibliothek. Jetzt können Sie das Programm schreiben, in "PLC_PRG" müssen wir den Funktionsbaustein instanziieren und ausführen SysCoreManager (Systemmanager), an den wir die Adresse des I2C-Busmanagers übergeben müssen. Durch Aktivieren des FB wird das Bereit-Signal auf dem Erweiterungsbus und der Hardware-Watchdog-Schaltung aktiviert und alle an den Erweiterungsbus angeschlossenen Module werden initialisiert.

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]
War dieser Artikel hilfreich?