Bonjour à tous,
Je cherche un moyen de récupérer les données d'un pont bascule à la pesé et ainsi pouvoir les traiter
Bonjour à tous,
Je cherche un moyen de récupérer les données d'un pont bascule à la pesé et ainsi pouvoir les traiter
Bonsoir,
C'est juste une balance géante, contactez le constructeur de l'appareil pour les protocoles de communication et les spécifications des données.
Lorsque vous aurez cette information (ex: API en DLL, un mini Serveur Web embarqué, un protocol binaire spécifique, ...), nous pourrons vous aider à partir d'un début de code que vous aurez tenté.
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Bonjour,
Justement c'est ce que je veut éviter. En fait, je voudrais créer un code qui peut communiquer avec n'importe quelle balance.
Peut-être qu'il existe une norme mais pourquoi poser la question sur un forum Delphi et non pas sur un forum spécialisé dans ce type de matériel ?
Contactez les constructeurs dont vous savez qu'il faudra interfacer, renseignez-vous si ils utilisent des connectiques et protocoles similaires, voire unifiés, un peu à la façon d'un ModBus, un beau travail d'étude qui semble très intéressant.
Pour ma part, j'ai travaillé avec du matériel, c'est passionnant, j'ai programmé avec plusieurs protocoles, plusieurs API ou différentes connectiques, pour en faire en sorte ensuite que cela soit transparent comme si tout était sur le même système.
C'est le concept de Wrapper, d'abstraction du matériel (c'était Caméra, DVR, Centrale Incendie, Détecteur de Mouvement ...), j'ai mis en place une floppée de DLL, chacune implémentant la couche Hardware commune (système d'exploration) et la couche Entity\Purpose pour les éléments spécifiques à chaque catégorie de matériel, depuis le programme principal, c'était totalement transparent, un code générique et un jeu d'interface cachant les différentes techniques de connexion.
A vous d'unifier les protocoles de chaque constructeur pour ensuite les utiliser dans votre application via abstraction et drivers.
Une norme, une méthode commune n’apparaît pas par hasard, c'est parce que les industriels se concertent pour faciliter l'utilisation (ou parce que ne pas le faire serait un obstacle à la vente)
A vous de trouvez si il existe une telle norme pour les Pont-Bascule
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
salut
pour cela il faut tout de même avoir des donnée constructeur
pas 1 constructeur mais tous
dans l'industrie chacun y vas de son protocole prioritaire meme si la tendance
est a normaliser
exemple de protocole modbus tcp/ip,profinet ... chacun vas de son fonctionnement
il existe souvent des passerelles entre chaque protocole mais rien n'est simple
c'est pour cela qu'il est important de connaitre la technologie employé afin
de pouvoir déterminer la meilleur des solution
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
merci pour vos réponses, cependant j'ai essayé de commencer du commencement avec les Tcomport dont j'ai aucune notion, j'ai installé les bibliothèque nécessaires et j'ai essayé de faire un test rapide avec le composant Tcomport qui en principe doit afficher les ports existants, mais chez moi il affiche rien!!!.
Procédons par étape.
Quel est le branchement entre la bascule et l'ordinateur ? RS232, RJ45, USB ou autre ?
Bonjour,
j'ai testé une imprimante avec un cable usb et ensuite avec rs232 mais aucun port n'est affiché dans Tcomport.
Affiché ?
TComport n'affiche rien, vous confondez avec la Démo qui fourni un tas de composant visuel pour faire une petite console.
USB, vous avez monté un pont entre USB et COM ?
Généralement c'est l'option "USB-to-Serial" sur les ports COM\LPT dans la Gestionnaire de périphériques Windows.
De plus c'est parfois un Driver de périphérique qui ajoute un "Virtual COM Port" qui n'est pas configuré par défaut
Sinon, tout le monde vous répète de vérifier la cible, de faire une étude, de voir avec votre client quel est son matériel et pas vous lancer en aveugle.
Savez-vous si vous serez connecté directement sur la Hardware ou en réalité sur un PC équipé d'un logiciel d'exploitation du Pont-Bascule qui lui vous offrira une abstraction, voir tout simplement, un envoie de fichier sur un FTP, un WebService, ...
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
bonjour,
mais alors pourquoi il m'affiche pas les port com?
Bonjour,
vous vous y prenez mal.
La première chose à faire, avant même de penser Delphi, est de vérifier votre système windows.
Avant même de communiquer, je ferais aussi une vérification des données fournies par WMI ce qui permettrait certainement de récupérer des informations utiles.
C'est seulement ensuite que je me pencherai sur les diverses connexions possibles
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
bonjour sergio,
J'ai pas compris votre raisonnement, j'ai pris des exples ici sur ce forum et j'ai suivi toutes les instructions mais j'ai pas le même résultat.
Il est amusant que vous posiez la question alors que nous vous avions indiqué de vérifier votre Gestionnaire de périphériques Windows.
Vous lisez nos réponses ?
Vous continuez sur votre idée d'une connexion COM via USB sans savoir si cela ne sera pas une connexion Ethernet RJ45 ou même Wifi (sur un ordinateur intermédiaire) !
N'ayant pas installé le package mais juste récupéré comport411f, je fais une instanciation dynamique et cela fonctionne parfaitement pour le port COM physique.
Et cela affiche le port visible dans le gestionnaire, avez-vous étudier les WMI pour lister les ports ?
Je n'ai pas le poste sous les yeux car à distance, le Port COM1 est il me semble physique au dos de l'appareil
Il n'y a pas de port COM virtuel pour mapper pour les USB, comme je le sais, il faut que le Driver face le boulot !
à la place du SQL, une autre variante
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 unit SerialListPortCOM_MainForm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Déclarations privées } procedure ShowCOM(); public { Déclarations publiques } end; var Form1: TForm1; implementation uses CPortCtl, ActiveX, ComObj; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin ShowCOM(); with TComComboBox.Create(Self) do begin Parent := Self; Align := alTop; ComProperty := cpPort; end; end; function VarArrayToStr(const vArray: variant): string; function _VarToStr(const V: variant): string; var Vt: integer; begin Vt := VarType(V); case Vt of varSmallint, varInteger : Result := IntToStr(integer(V)); varSingle, varDouble, varCurrency : Result := FloatToStr(Double(V)); varDate : Result := VarToStr(V); varOleStr : Result := WideString(V); varBoolean : Result := VarToStr(V); varVariant : Result := VarToStr(Variant(V)); varByte : Result := char(byte(V)); varString : Result := String(V); varArray : Result := VarArrayToStr(Variant(V)); end; end; var i : integer; begin Result := '['; if (VarType(vArray) and VarArray)=0 then Result := _VarToStr(vArray) else for i := VarArrayLowBound(vArray, 1) to VarArrayHighBound(vArray, 1) do if i=VarArrayLowBound(vArray, 1) then Result := Result+_VarToStr(vArray[i]) else Result := Result+'|'+_VarToStr(vArray[i]); Result:=Result+']'; end; function VarStrNull(const V:OleVariant):string; //avoid problems with null strings begin Result:='Null'; if not VarIsNull(V) then begin if VarIsArray(V) then Result:=VarArrayToStr(V) else Result:=VarToStr(V); end; end; function GetWMIObject(const objectName: String): IDispatch; //create the Wmi instance var chEaten: Integer; BindCtx: IBindCtx; Moniker: IMoniker; begin OleCheck(CreateBindCtx(0, bindCtx)); OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker)); OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result)); end; // procedure TForm1.ShowCOM(); var objWMIService : OLEVariant; colItems : OLEVariant; colItem : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; Memo1.Lines.Clear(); objWMIService := GetWMIObject('winmgmts:\\localhost\root\CIMV2'); colItems := objWMIService.ExecQuery('SELECT * FROM Win32_PnPEntity WHERE PNPClass = ''Ports''','WQL',0); oEnum := IUnknown(colItems._NewEnum) as IEnumVariant; while oEnum.Next(1, colItem, iValue) = 0 do Memo1.Lines.Add(VarStrNull(colItem.Caption)); end; end.
Sur mon PC Local, pas de port physique, la liste COM est vide, c'est normal.
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 procedure TForm1.ShowCOM(); var objWMIService : OLEVariant; colItems : OLEVariant; colItem : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; Memo1.Lines.Clear(); objWMIService := GetWMIObject('winmgmts:\\localhost\root\CIMV2'); // colItems := objWMIService.ExecQuery('SELECT * FROM Win32_PnPEntity WHERE PNPClass = ''Ports''','WQL',0); // colItems := objWMIService.ExecQuery('SELECT * FROM Win32_PnPEntity','WQL',0); // oEnum := IUnknown(colItems._NewEnum) as IEnumVariant; Memo1.Lines.Add('COM:'); colItems := objWMIService.InstancesOf('Win32_SerialPort', 1, Null); oEnum := IUnknown(colItems._NewEnum) as IEnumVariant; while oEnum.Next(1, colItem, iValue) = S_OK do Memo1.Lines.Add(VarStrNull(colItem.Caption)); Memo1.Lines.Add('USB:'); colItems := objWMIService.InstancesOf('Win32_USBController', 1, Null); oEnum := IUnknown(colItems._NewEnum) as IEnumVariant; while oEnum.Next(1, colItem, iValue) = S_OK do Memo1.Lines.Add(VarStrNull(colItem.Caption)); end;
N'ayant pas de périphérique USB Serial, je n'ai pas de port virtuel COM monté par-dessus un USB
Et j'ai les USB bien présent
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Bonjour shailetroll,
C'est vrai j'ai pas de port com, par contre comment détecter les ports usb et les ports reseau ac TComport?
salut
tcomport ne sert pas a detecter mais a comuniquer
il faut avant tout savoir si le port existe pour cela les wmi sont tres utile
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
Bonjour anapurna,
Je suis pas vraiment un expert dans ce domaine, j'ai passé 2 jours à lire des documents qui parle des systèmes de connexion et franchement j'ai rien compris. Je voudrais seulement pouvoir communiquer avec un périphérique (pont bascule) qui est connecté soit en cable usb ou cable reseau.
Je vous invite encore à relire ceci
https://www.developpez.net/forums/d1...t-com-virtuel/
https://sourceforge.net/projects/com0com/files/
Certains périphériques USB contiennent le driver à installer pour émuler le port COM
Tant que vous n'avez pas le matériel (encombrant ), faut voir avec le fabricant ciblé, si il fourni un simulateur.
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Bonjour shailetroll,
Excusez mon niveau dans ce domaine mais j'ai vu les liens et j'ai téléchargé et installer le programme "com0com", mais franchement j'ai rien compris. Pour faire simple, j'ai mon imprimante connecté en usb comment puis-je communiquer avec elle. Je me rappelle d'un programme qui date maintenant ou on communiqué avec l'imprimante en port parallèle avec des ligne de commande exple:"esc P ..' et je voudrais faire la même chose avec mon périphérique connecté en usb.
Bonjour,
Quand deviendrez vous précis ?
Nous sommes partis d'un pont bascule (que l'on trouve généralement sur des parkings) à une imprimante USB qui, je présume, si on suit l'historique de vos discussions sur le forum, est plutôt une bascule de pesée (genre pesée légume) qui imprime (peut-être) un ticket puisque vous parlez d'imprimante maintenant
Oui, les séquences d'échappement, cela existe toujours et un simple write vers le terminal de sortie (dans ce cas une imprimante) suffit pas besoin de chercher loinJe me rappelle d'un programme qui date maintenant ou on communiqué avec l'imprimante en port parallèle avec des ligne de commande
le problème c'est que vous voulez généraliser avant même d'avoir une solution pour un terminal précis, vous mélangez allégrement USB et RS232 (port série), LPT (imprimante) et COM.
Quand on voit ce qu'il peut y avoir sur le marché en terme de balance http://www.aazpesage.com/index.html
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Voila le problème. C'est comment déterminer le terminal de sortie et comment passer la communication?.Oui, les séquences d'échappement, cela existe toujours et un simple write vers le terminal de sortie (dans ce cas une imprimante) suffit pas besoin de chercher loin
Désolé, c'est que j'ai voulu des exples simple de connexion. Mon but premier c'est toujours le pont bascule, mais j'ai donné l'exple de l'imprimante du fait que l'imprimante est comme le pont bascule et périphérique externe.le problème c'est que vous voulez généraliser avant même d'avoir une solution pour un terminal précis, vous mélangez allégrement USB et RS232 (port série), LPT (imprimante) et COM.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager