Skip to main content

Chiamare una funzione esterna

Questo meccanismo può essere utilizzato per chiamare una funzione esterna in un'applicazione IEC tramite un socket di dominio Unix. Ciò ti consente di creare le tue funzionalità. Allo stesso tempo, si ottiene la separazione del processo. Come interfaccia in IEC, il EXTAPI.UDSExternalFunction il blocco funzione è fornito in ExtensionAPI libreria.In Python, il ExternalFunctionBase class viene utilizzata per questo scopo, fornito nell'esempio fornito.

Questo esempio spiega anche come utilizzare il meccanismo. L'esempio contiene un progetto IEC con richiamo implementato di una funzione esterna. Inoltre, l'esempio contiene l'implementazione della funzione chiamata myExternalFunction in Python.

Dopo CODESYS Control Extension Package l'installazione, è possibile trovare l'esempio UDSExternalCallExample.project e lo script Python uds_external_function.py nella seguente directory: C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall.

Esempio, applicazione IEC

Nel UDSExternalCallExample.project progetto di esempio, un nuovo myExternalFunction viene creato il blocco funzione. Ciò estende il EXTAPI.UDSExternalFunction FB con ingressi e uscite di tipo DINT.Sono possibili anche altri tipi di dati. All'inizio è necessario passare il nome della funzione da chiamare in Python. Questo indirizzo deve essere univoco.

Il codice seguente viene utilizzato per aggiungere gli ingressi della funzione esterna dell'interfaccia:

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

Il codice seguente viene quindi utilizzato per chiamare la funzione esterna:

Result := THIS^.Call();

Il codice seguente viene utilizzato per interrogare il valore di ritorno della funzione implementata in Python:

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

I parametri sono di tipo string. Di conseguenza, deve essere eseguito il cast del tipo di dati desiderato.

Esempio, script Python

Importante

Gli esempi Python forniti per l'API di estensione richiedono Python 3.0.

L'incluso uds_external_function.py campione fornisce il ExternalFunctionBase class, che fornisce la comunicazione Unix Domain Socket con il sistema di runtime per questa funzionalità.

Il myExternalFunction classe implementata nell'esempio estende il ExternalFunctionBase classe.Il Call() è necessaria la funzione, che viene chiamata dal meccanismo da IEC. I parametri di input e output vengono passati sotto forma di tuple di stringhe.

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

Nell'esempio, il Call()La funzione implementa una semplice aggiunta dei due parametri di input:

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

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

    return dictRetParams
  1. Copiare lo script uds_external_function.py (situato nella directory C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall dopo l'installazione di CODESYS Control Extension Package) sul dispositivo di destinazione.

  2. Esegui lo script uds_external_function.py.

  3. Quindi avviare il UDSExternalCallExample.project esempio di progetto in CODESYS.

    Puoi vedere che il progetto chiama il file myExternalFunction() funzione dello script Python e vengono sommati i due parametri di input.

Utilizzo dell'interfaccia solo come membro di Linux codesysuser gruppo di utenti

Separazione del processo