Créer un plugin en C ou C++ pour 4D?

Bonjour,

je récupère en temps réel des données qui arrivent d’un autre appareil grâce à un code de communication python, mais maintenant je dois récupérer ces données dans 4D pour les utiliser.
J’ai donc pensé à créer un plugin en C ou C++ afin d’intégrer mon code python de réception (qui est un exécutable) afin de récupérer ces valeurs mais je ne sais pas comment faire.

Donc si quelqu’un pourrait m’expliquer comment on fait :smiley:

Voila pour la problématique.

Détails du contexte : Apple n’a pas ouvert de port pour un appareil de mesure particulier et je suis donc passé par une RPI0W comme “relais de mesure”. J’utilise 4D pour voir les résultats après différents calculs, etc…

Le problème : Les mesures arrivent sur le MAC après être passées par la RPI. Je les reçois en Bash d’un exécutable python. Je dois les récupérer sur 4D.

PS : je n’y connait rien en plugin malgré mes recherches sur le sujet.

Cordialement,

Nicolas

Bonjour,

Si tu maitrise python, il y a peut-être d’autres approches (mais on a pas assez d’infos pour te donner la meilleure solution) :

La mise au point d’un plugin en C/C++ n’est pas le plus simple (stabilité, maintenance, cross plateforme, etc…).

  1. lancer ton exécutable avec LANCER PROCESS EXTERNE et récupérer le résultat dans stdout

  2. si le communication est en “port série”, tu peux utiliser les commandes natives de 4D

  3. si le communication est en “tcp”, tu peux utiliser les commandes 4D Internet Commands

  4. coder un api (http/rest par exemple) dans 4D et utiliser python pour envoyer les données dans 4D via l’api rest.

  5. utiliser une base de données intermédiaire (mysql, etc…)
    python alimente directement la base de données mysql
    4D lit dans mysql et supprime ce qui a été lu.
    Comme ça 4D peut-être arrêté sans perdre de données (découplage)…

  6. utiliser ODBC

  7. utiliser un outil de type RabbitMQ

Bonjour,

Merci beaucoup pour ta réponse !
Je pense donc abandonner l’idée du plugin et me concentrer sur le SQL, le TCP ou le port série.
Ces trois solutions me semblaient les plus simples.

Je voudrais donc avoir ton avis sur la méthode la plus rapide et la plus simple à mettre en place (je suis à court de temps).

Précisions : La valeur en question arrive depuis la RPI par le stream. Je passe par le réseau et je choisis l’adresse sur laquelle je veux envoyer la valeur pendant que le programme de réception attend cette valeur en regardant le port que j’ai ouvert (et où la valeur est envoyée). Puis elle est simplement stockée dans une variable (le contenu de cette variable est écrasé à chaque nouvelle valeur).

J’avoue avoir une préférence pour le SQL puisqu’il serait possible d’acquérir en temps réel. Devrais-je me lancer sur cette solution ?

Passez une bonne journée !

Nicolas

Juste un warning sur Python et macOS 10.15:

https://www.macg.co/macos/2019/06/macos-catalina-zsh-par-defaut-python-et-ruby-deprecies-106398la future version 10.15 n’aura plus de version d’installée par défaut.>

Si j’ai bien compris, ton “appareil” peut se connecter en TCP (sur une adresse ip + port).

Dans le cas, regarde TCP_Listen et TCP_receive dans le plugin 4D IC… Ce sera ce qu’il y a de plus simple à coder…

En gros tu lance une méthode dans 4D qui va écrouter sur un port TCP et dès que tu as une connexion, tu vas lire ce qu’on t’envoie (TCP_receive)…

Ca devrait faire l’affaire

Ensuite si le device coupe sa connexion une fois qu’il a fini son envoi il faut que tu fasse un boucle pour revenir à TCP_Listen