Skip to main content

Appel d'une fonction externe

Ce mécanisme permet d'appeler une fonction externe dans une application IEC via un Unix Domain Socket. Cela vous permet de créer vos propres fonctionnalités. Dans le même temps, la séparation des processus est réalisée. En tant qu'interface dans CEI, le EXTAPI.UDSExternalFunction bloc de fonction est fourni dans le ExtensionAPI bibliothèque.En Python, la ExternalFunctionBase class est utilisé à cette fin, ce qui est fourni dans l'exemple fourni.

Cet exemple explique également comment utiliser le mécanisme. L'exemple contient un projet CEI avec appel implémenté d'une fonction externe. De plus, l'exemple contient l'implémentation de la fonction appelée myExternalFunction en Python.

Après CODESYS Control Extension Package l'installation, vous trouverez l'exemple UDSExternalCallExample.project et le script Python uds_external_function.py dans le répertoire suivant : C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall.

Exemple, application CEI

Dans le UDSExternalCallExample.project exemple de projet, un nouveau myExternalFunction bloc fonction est créé. Cela étend la EXTAPI.UDSExternalFunction FB avec entrées et sorties de type DINT.D'autres types de données sont également possibles.Au début, il faut passer le nom de la fonction à appeler en Python.Cette adresse doit être unique.

Le code suivant permet d'ajouter les entrées de la fonction externe de l'interface :

Result := THIS^.AddParameter('parameterIn1', 'DINT', TO_STRING(diIn1));

Le code suivant est ensuite utilisé pour appeler la fonction externe :

Result := THIS^.Call();

Le code suivant est utilisé pour interroger la valeur de retour de la fonction implémentée en Python :

Result := THIS^.GetParameter('parameterOut', 'DINT', ADR(sValue));

Les paramètres sont de type string. En conséquence, il doit être transtypé dans le type de données souhaité.

Exemple, script Python

Important

Les exemples Python fournis pour l'API d'extension nécessitent Python 3.0.

Le inclus uds_external_function.py l'échantillon fournit le ExternalFunctionBase classe, qui fournit la communication Unix Domain Socket avec le système d'exécution pour cette fonctionnalité.

le myExternalFunction la classe implémentée dans l'exemple étend la ExternalFunctionBase classe.La Call() fonction est nécessaire, qui est appelée à partir du mécanisme d'IEC. Les paramètres d'entrée et de sortie sont passés sous la forme de tuples de chaînes.

Exemple: {'parameterIn1': ('DINT', '11'), 'parameterIn2': ('DINT', '22')}

Dans l'exemple, le Call()La fonction implémente une simple addition des deux paramètres d'entrée :

def Call(self, dictParams):
    in1 = int(dictParams['parameterIn1'][1])
    in2 = int(dictParams['parameterIn2'][1])

    dictRetParams = {}
    dictRetParams['parameterOut'] = 'DINT', in1 + in2

    return dictRetParams
  1. Copiez le script uds_external_function.py (situé dans le répertoire C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall après l'installation du CODESYS Control Extension Package) sur le dispositif cible.

  2. Exécutez le script uds_external_function.py.

  3. Lancez ensuite le UDSExternalCallExample.project exemple de projet dans CODESYS.

    Vous pouvez voir que le projet appelle le myExternalFunction() fonction du script Python et les deux paramètres d'entrée sont ajoutés.

Utilisation de l'interface uniquement en tant que membre de Linux codesysuser groupe d'utilisateurs

Oui

Séparation de processus

Oui