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