Salut à tous
Apres quelques heures pour trouver comment integrer la libmodbus je commence à me rendre compte de mon faible niveau pour integrer des libs à XE3(j'en ai dejà galerer pour d'autre dont Tcomport et modbustcp)
vous me direz que j'ai déjà modbus , or il est TCP et j'ai besoin du RTU pour mon projet, au départ je voulais forcer avec comport les trames mais c'est pas si simple et ça fais un peu bricolage
tentative dans l'ordre et constat:
1. j'ai mis tous les fichier(libmodbus-3.0.3\src .c et .h) dans le repertoire (de de mon application fiche VCL C++ builder)
2. par sureté j'ai validé le chemin d'inclusion dans option du projet
3.première compilation Erreur au niveau "#include <sys/time.h>" je l'ai remplacé par <time.h> ok
4.j'ai du mettre #include <unistd.h> en commentaire dans unit.h, j'ai beau chercher sur le net mais pas grand chose pour le remplacer
5.à ce niveau quand je rentre une fonction à la première parenthèse le compliateur propose bien le type de paramètre à rentrer j'en deduis que le modbus.h est reconnus
6.à ce stade ça compile
7. dès que j'essaye avec avec une fonction (voir unit.ccp) j'ai l'erreur
-[ilink32 Erreur] Error: '_modbus_write_registers' externe non résolu, référencé depuis G:\C & C++ (EMBARCADERO)\RAD STUDIO\PROJETS\RAD_TP_EMBARCADERO\TEST_LIB_MODBUS\WIN32\DEBUG\UNIT1.OBJ
Il me semble avoir déjà eu ce probleme sur d'autre lib qui etait causé par l'oublie de la dll dans le repertoire ...\Win32\Debug.
je suis étonné de ne pas avoir trouvé de .lib et de .dll à ajouter au projet
Si quelqu'un pourrait me confirmé si la demarche est bonne ou si c'est possible sur XE3 , ou encore mieux tester ça serait sympa 1000 Merci d'avance.
Nicolas
Bon week-end!
lien libmodbus 3.0.3
unit.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <System.Classes.hpp> #include <Vcl.Controls.hpp> #include <Vcl.StdCtrls.hpp> #include <Vcl.Forms.hpp> #include <stdio.h> //#include <unistd.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <modbus.h> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Composants gérés par l'EDI TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // Déclarations utilisateur public: // Déclarations utilisateur __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
unit.ccp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { unsigned int short *tab_rp_registers; modbus_t *ctx; int adr=0x6B,nbr= 2; //modbus_connect(ctx); //modbus_write_registers(ctx,adr,nbr,tab_rp_registers); } //---------------------------------------------------------------------------
Partager