Archives par mot-clé : Ada

Ada est un langage évolué pour applications critiques.

A4A : Exemple d’application app3 – Modbus RTU Maitre

Bonjour,

Le projet « Ada for Automation  » s’enrichit avec l’implémentation d’un Maitre Modbus RTU.

A cet effet, le binding de la libraire libmodbus a été étendu afin de pouvoir en utiliser les fonctions gérant la connexion sur une interface sérielle.

Sur ce binding, l’implémentation du Maitre Modbus RTU est réalisée à l’instar de celle du client Modbus TCP déjà disponible.

La tâche Maitre Modbus RTU exécute cycliquement les commandes organisées dans une table et alimente une zone mémoire protégée par un mécanisme de gestion d’accès concurrent de telle sorte que les données restent cohérentes.

Ainsi, la configuration se fait de manière très similaire en remplissant un tableau de commandes :

-----------------------------------------------------------------------
--                       Ada for Automation                          --
--                                                                   --
--              Copyright (C) 2012-2013, Stephane LOS                --
--                                                                   --
-- This library is free software; you can redistribute it and/or     --
-- modify it under the terms of the GNU General Public               --
-- License as published by the Free Software Foundation; either      --
-- version 2 of the License, or (at your option) any later version.  --
--                                                                   --
-- This library is distributed in the hope that it will be useful,   --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of    --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU --
-- General Public License for more details.                          --
--                                                                   --
-- You should have received a copy of the GNU General Public         --
-- License along with this library; if not, write to the             --
-- Free Software Foundation, Inc., 59 Temple Place - Suite 330,      --
-- Boston, MA 02111-1307, USA.                                       --
--                                                                   --
-- As a special exception, if other files instantiate generics from  --
-- this unit, or you link this unit with other files to produce an   --
-- executable, this  unit  does not  by itself cause  the resulting  --
-- executable to be covered by the GNU General Public License. This  --
-- exception does not however invalidate any other reasons why the   --
-- executable file  might be covered by the  GNU Public License.     --
-----------------------------------------------------------------------


with A4A.MBRTU_Master; use A4A.MBRTU_Master;
with A4A.Protocols; use A4A.Protocols.Device_Strings;
with A4A.Protocols.LibModbus; use A4A.Protocols.LibModbus;

package A4A.Application.MBRTU_Master_Config is

   --------------------------------------------------------------------
   -- Modbus RTU Master configuration
   --------------------------------------------------------------------

   Config : aliased Master_Configuration :=
     (Command_Number    => 11,

      Enabled           => True,
      Debug_On          => False,
      Task_Period_MS    => 10,
      Retries           => 3,
      Timeout           => 0.2,

      Device            => To_Bounded_String("COM1"),
      Baud_Rate         => BR_115200,
      Parity            => Even,
      Data_Bits         => 8,
      Stop_Bits         => 1,

      Commands =>
        (--                                                Offset Offset   Period
         --     Enabled  Slave                Action Length Remote  Local Multiple Shift
         1  => (   True,     2, Read_Input_Registers,    10,     0,     0,      10,  0),
         2  => (   True,     2,       Read_Registers,    10,     0,    10,      20,  1),
         3  => (   True,     2,      Write_Registers,    20,    20,     0,      30,  2),
         4  => (   True,     3,       Read_Registers,    10,     0,    20,      20,  3),
         5  => (   True,     4,       Read_Registers,    10,     0,    30,      20,  4),
         6  => (   True,     5,       Read_Registers,    10,     0,    40,      20,  5),
         7  => (   True,     6,       Read_Registers,    10,     0,    50,      20,  6),
         8  => (   False,    7,       Read_Registers,    10,     0,    60,      20,  3),
         9  => (   True,     8,       Read_Registers,    10,     0,    70,      20,  4),
         10 => (   False,    9,       Read_Registers,    10,     0,    80,      20,  5),
         11 => (   True,    10,       Read_Registers,    10,     0,   100,      20,  6)
        )
     );

end A4A.Application.MBRTU_Master_Config;

Pour compléter la chose, une application exemple, le sujet de cet article donc, « app3 » est également disponible afin de démontrer ces capacités nouvelles. Elle existe en version ligne de commande et aussi en version GUI.

En voici une image montrant l’état du maitre Modbus RTU en action selon la configuration ci-dessus :

A4A-APP3-GUI-MMasterStatus-Win

On y trouve :

  • l’état du chien de garde entre la tâche principale et la tâche Modbus RTU Maitre,
  • l’état de la connexion au port de communication,
  • l’état de chaque commande, en vert lorsque la communication est établie, en rouge dans le cas contraire et en rouge avec la croix lorsque la commande est désactivée, comme dans les cas 8 et 10

Bien évidemment, lorsque vous rajoutez des commandes à la table, l’interface graphique s’adapte automatiquement et l’état des commandes supplémentaires est ajouté.

Pour les tests, on a utilisé le simulateur d’automate Modbus PLC Simulator qui est bien pratique pour cela.

A4A-APP3-PLCSim

Elle n’est pas belle la vie ?

Cordialement,
Stéphane