Hallo Freunde,
also ich habe mich hier angemeldet weil ich nicht genau weiß wo ich anfangen soll.
Ich habe ein Ultraschall Gerät, welches über USB (Seriell) kommuniziert. Mit dem Gerät wird eine .dll mitgeliefert, mit welcher man mit dem Gerät interagieren soll.
(und eine kleine Anleitung mit Beispielen für C#).
Das größte was ich bisher programmiert habe war mit Robotern und SPS (also grundlegende Pascal Geschichten) (und noch etwas homeassistant und javascript aber da muss man ja nicht viel machen).
Also prinzipiell habe ich keine Ahnung wie ich mit VB.NET umgehe bzw. etwas erstelle, was dann mit meiner Sonde interagiert.
Mein Ziel ist es, mit dem Gerät zu kommunizieren (also Parameter an das Gerät und Messergebnisse laufend zurück).
Ich würde das über eine GUI Steuern. Die Messergebnisse sollen dann an eine InfluxDB gesendet werden.
Jetzt habe ich folgende relevante Ausschnitte aus der DLL Dokumentation:
RegisterCallback
If realtime data is required then pass in a call back function to the DLL that is called each time a new set of data values are received. To do this, use the
OpenSerialConnection
To begin communicating to the connected instrument call this function providing it with the COM port number that the instrument is connected to:
CloseSerialConnection
Closes the serial port.
ETherRealtimeClass
The constructor of the class. This is called on creation of the object. There are 2 versions depending on whether the DLL is to handle memory management or the calling application. The variable data_type must be one of the following values:
public const int REALTIME_DATA_RAW = 0x40;
public const int REALTIME_DATA_POSTPROCESS = 0x50;
public const int SINGLE_CHAN_POST = 0x70;
public const int CONDUCTIVITY = 0x90;
The call if the application is handling and creating memory:
WriteToInstrument
This allows commands to be sent directly to the Instrument and not interfered to by the DLL.The downside is that the command must be thoroughly understood and formatted correctly, so use at your peril!If the Port is Closed then FALSE is returned.
Versteht einer von euch den Ablauf von der Kommunikation?
Ich denke folgendes bzw am Ende nochmal ein ganzer Code von mir (aber das funktioniert nicht) :
1. Ich baue über OpenSerialConnection eine Verbindung mit dem Gerät auf.
(Ich glaube das ist geschenkt also einfach z.b. in einem Button den Befehl mit dem Com-Port in Klammern)
2. Ich erhalte irgendwie Daten von dem Gerät ?
Es gibt die Funktion RegisterDataCallback (aber das ist in der Dokumentation garnicht erwähnt sondern kann ich die nur in der DLL sehen).
Also wenn ich eine Variable deklariere als EtherRealtimeClass.DataReceived dann kann ich die als Parameter in meiner Callback Funktion verwenden.
Aber wie komme ich dann an x1 und y1 ran (das sind meine relevanten werte, die werden auch oben in der etherrealtimeclass deklariert und sind auch in der DataReceived drin)?
Außerdem müsste man laut der Dokumentation dem Gerät die Art der Daten sagen, welche es kommunizieren soll. In meinem Fall wäre das immer der Single_CHAN_POST bzw. 0x70.
Also folgendes habe ich jetzt:
Aber hier weiß ich jetzt nichtmehr weiter. Theoretisch brauche ich x1 und y1 von meiner Measurements Variable, allerdings komme ich da nicht ran.
Wenn ich Measurements als Sub definiere bekomme ich auch nur Fehlermeldungen.
Weiter besteht dann die Frage, wie ich Werte an das Gerät sende.
Theoretisch müsste das ja sein:
public bool WriteToInstrument(byte first_byte, byte second_byte, string command)
Kann ich jetzt die beiden Bytes am Anfang einfach als Wert eintragen?
Also laut einer zweiten Doku muss der first_byte immer 0x01 sein, reicht es wenn ich hier 1 schreibe? (ist das überhaupt richtig?)
und folgemäßig 0 wenn das second_byte 0x00 sein soll?
Also dann müsste folgendes funktionieren oder? (das teste ich gleich):
Das Beispiel in C# vom Entwickler ist folgendes:
Aber das ist für mich keine wirkliche hilfe, wenn ich das ding so 1:1 reinkopiere bekomme ich schon fehler.
Ich wollte jetzt die Dokumentation nicht direkt veröffentlichen (ich weiß ehrlich gesagt nicht wie der Hersteller dazu stehen würde) aber ich kann euch die natürlich per PN zur Verfügung stellen wenn Sie jemand sehen will.
also ich habe mich hier angemeldet weil ich nicht genau weiß wo ich anfangen soll.
Ich habe ein Ultraschall Gerät, welches über USB (Seriell) kommuniziert. Mit dem Gerät wird eine .dll mitgeliefert, mit welcher man mit dem Gerät interagieren soll.
(und eine kleine Anleitung mit Beispielen für C#).
Das größte was ich bisher programmiert habe war mit Robotern und SPS (also grundlegende Pascal Geschichten) (und noch etwas homeassistant und javascript aber da muss man ja nicht viel machen).
Also prinzipiell habe ich keine Ahnung wie ich mit VB.NET umgehe bzw. etwas erstelle, was dann mit meiner Sonde interagiert.
Mein Ziel ist es, mit dem Gerät zu kommunizieren (also Parameter an das Gerät und Messergebnisse laufend zurück).
Ich würde das über eine GUI Steuern. Die Messergebnisse sollen dann an eine InfluxDB gesendet werden.
Jetzt habe ich folgende relevante Ausschnitte aus der DLL Dokumentation:
RegisterCallback
If realtime data is required then pass in a call back function to the DLL that is called each time a new set of data values are received. To do this, use the
OpenSerialConnection
To begin communicating to the connected instrument call this function providing it with the COM port number that the instrument is connected to:
CloseSerialConnection
Closes the serial port.
ETherRealtimeClass
The constructor of the class. This is called on creation of the object. There are 2 versions depending on whether the DLL is to handle memory management or the calling application. The variable data_type must be one of the following values:
public const int REALTIME_DATA_RAW = 0x40;
public const int REALTIME_DATA_POSTPROCESS = 0x50;
public const int SINGLE_CHAN_POST = 0x70;
public const int CONDUCTIVITY = 0x90;
The call if the application is handling and creating memory:
WriteToInstrument
This allows commands to be sent directly to the Instrument and not interfered to by the DLL.The downside is that the command must be thoroughly understood and formatted correctly, so use at your peril!If the Port is Closed then FALSE is returned.
Versteht einer von euch den Ablauf von der Kommunikation?
Ich denke folgendes bzw am Ende nochmal ein ganzer Code von mir (aber das funktioniert nicht) :
1. Ich baue über OpenSerialConnection eine Verbindung mit dem Gerät auf.
(Ich glaube das ist geschenkt also einfach z.b. in einem Button den Befehl mit dem Com-Port in Klammern)
2. Ich erhalte irgendwie Daten von dem Gerät ?
Es gibt die Funktion RegisterDataCallback (aber das ist in der Dokumentation garnicht erwähnt sondern kann ich die nur in der DLL sehen).
Also wenn ich eine Variable deklariere als EtherRealtimeClass.DataReceived dann kann ich die als Parameter in meiner Callback Funktion verwenden.
Aber wie komme ich dann an x1 und y1 ran (das sind meine relevanten werte, die werden auch oben in der etherrealtimeclass deklariert und sind auch in der DataReceived drin)?
Außerdem müsste man laut der Dokumentation dem Gerät die Art der Daten sagen, welche es kommunizieren soll. In meinem Fall wäre das immer der Single_CHAN_POST bzw. 0x70.
Also folgendes habe ich jetzt:
VB.NET-Quellcode
- Imports ETherCheckDataAcq
- Public Class Form1
- Public Ether As ETherCheckDataAcq.ETherRealtimeClass
- Public Measurements As ETherCheckDataAcq.ETherRealtimeClass.DataReceived
- Public Sub btnConnect_Click(sender As Object, e As EventArgs) Handles btnConnect.Click
- Ether.RegisterDataCallback(Measurements)
- Ether.OpenSerialConnection(4)
- End Sub
- End Class
Aber hier weiß ich jetzt nichtmehr weiter. Theoretisch brauche ich x1 und y1 von meiner Measurements Variable, allerdings komme ich da nicht ran.
Wenn ich Measurements als Sub definiere bekomme ich auch nur Fehlermeldungen.
Weiter besteht dann die Frage, wie ich Werte an das Gerät sende.
Theoretisch müsste das ja sein:
public bool WriteToInstrument(byte first_byte, byte second_byte, string command)
Kann ich jetzt die beiden Bytes am Anfang einfach als Wert eintragen?
Also laut einer zweiten Doku muss der first_byte immer 0x01 sein, reicht es wenn ich hier 1 schreibe? (ist das überhaupt richtig?)
und folgemäßig 0 wenn das second_byte 0x00 sein soll?
Also dann müsste folgendes funktionieren oder? (das teste ich gleich):
Das Beispiel in C# vom Entwickler ist folgendes:
C#-Quellcode
- using ETherCheckDataAcq;
- namespace test_app
- {
- public partial class Form1 : Form
- {
- ETherRealtimeClass ether;
- public Form1()
- {
- ether = new ETherRealtimeClass(0, 0x70);
- InitializeComponent();
- ether.RegisterDataCallback(NewRealtimeData);
- ether.RegisterFileCallback(NewFileData);
- ether.RegisterProgressCallback(ProgressBarValue);
- bool result = ether.OpenSerialConnection(32);
- }
- public void NewRealtimeData(Int32 X1, Int32 Y1, Int32 X2, Int32 Y2, Int32 Xmix_or_percent, Int32 Ymix_or_percent, Int32 Theta_or_status_X, Int32 Radius_or_status_Y)
- {
- int ian = X1;
- }
- public void NewFileData(string full_filename)
- {
- //A new file has been received by the DLL. The provided value is the full path of
- // where this file is.
- }
- public void ProgressBarValue(double bar_percentage)
- {
- //Set the progress bar to the provided percentage, 0 to 100.
- }
- }
- }
Aber das ist für mich keine wirkliche hilfe, wenn ich das ding so 1:1 reinkopiere bekomme ich schon fehler.
Ich wollte jetzt die Dokumentation nicht direkt veröffentlichen (ich weiß ehrlich gesagt nicht wie der Hersteller dazu stehen würde) aber ich kann euch die natürlich per PN zur Verfügung stellen wenn Sie jemand sehen will.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Eddolino“ ()