SlimLine Bibliothèque Raspberry eCDSSystem8Core

Après avoir réalisé notre premier projet dans CODESYS (Voir l'article) nous pouvons utiliser la bibliothèque eCDSS8CoreMng. Cette bibliothèque contient tous les objets fonction et les FB nécessaires à la gestion des modules d’extension de SlimLine, téléchargement de la bibliothèque, le programme SimpleStartUp décrit dans cet article peut être trouvé dans le PTP161 (Télécharger).

Installation de la bibliothèque

Pour utiliser la bibliothèque, installez-la dans le référentiel de bibliothèques sur votre PC. Téléchargez la bibliothèque à partir du menu Gestore libreria selezionare Repository librerie et choisissez Installa il sera possible de parcourir le disque et de rechercher le fichier de bibliothèque qui sera transféré dans le "C:\ProgramData\CODESYS\Managed Libraries\Elsist Srl\".

Utilisation de la bibliothèque

Créer un nouveau projet comme indiqué dans cet article, ajoutez la bibliothèque au projet.

Gestion I2C des modules d'extension

Le module de la CPU gère les modules d'extension avec une connexion dans I2C. Le pilote de gestion doit donc être installé. Avec le bouton droit de la souris sur l'appareil I2C choisissez l'article Aggiungi dispositivoet sélectionnez le périphérique I2C master. La valeur à définir sur le périphérique est /dev/i2c-4.

L'appareil sera ajouté à l'arborescence du projet et comme le montre la photo, la variable sera créée I2C_master de type i2cMaster. Le nom de la variable est important car il sera communiqué au FB de gestion du système.

Exemples

Comment utiliser les exemples.

Tous les objets (Fonctions et FB) utiles pour accéder aux différents modules sont disponibles dans la bibliothèque, consultez la documentation de la bibliothèque pour une liste. Vous pouvez maintenant écrire le programme, dans "PLC_PRG" nous devons instancier et exécuter le bloc fonction SysCoreManager (System manager) auquel il faut transmettre l'adresse du gestionnaire de bus I2C. En activant le FB, le signal prêt est activé sur le bus d'extension et le circuit du chien de garde matériel et tous les modules connectés au bus d'extension sont initialisés.

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]
Cet article a-t-il été utile?