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
Copiare lo script
uds_external_function.py
(situato nella directoryC:\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.Esegui lo script
uds_external_function.py
.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 | sì |
Separazione del processo | sì |