ich habe ein kleines Verständigungsproblem.
Ich komme eigentlich aus der Mikrocontroller Ecke und kann diese Dinger auch mit C programmieren.
Aus Interesse arbeite ich mich in C++ inkl. QT und Boos ein.
Ich habe ein Messgerät, welches ich per serieller Schnittstelle per RS232 anspreche. Die Kommunikation sowie das Zurücklesen und verarbeiten der Daten funktioniert dank QT und Boos auch schon sehr gut.
Jetzt würde ich gerne hierfür eine Windows-DLL für Matlab erstellen. Einfache DLLs kann ich auch schon mittels "Extern _C" erstellen.
Ich habe jetzt aber ein kleines C++ Projekt mittels Klassen in denen die
(1). RS232 konfiguriert wird (settings.cpp)
(2). Die RS232 geöffnet wird (serial.cpp)
(3). Eine Abfrage generiert wird und an das Messgerät gesendet wird (console.cpp)
(4). Die empfangenen Daten in einem Ringpuffer mittels Boost gespeichert und sortiert werden (console.cpp)
(5). Die Daten nach seinem Protokoll zerschnitten werden
Über meine Main Funktion (main.c) kann ich auch via Matlab die Kommunikation mit RS232 aufbauen (prüfe ich mit Portmon.exe) und empfange Daten.
Nun meine Frage,
wie kann ich in der main.c auf die Messdaten die in der Klasse "Protocol" gespeichert sind zugreifen?
Ein Rückgabewert bekomme ich nicht, da die RS232 mittels Signal/Slots die empfangenen Daten verarbeitet?
Über die Rückgabe nach Matlab habe ich mir noch nicht wirklich Gedanken gemacht, aber mittels Callib und Pointer habe ich schon ein Array zurücklesen können. Ich denke die Messwerte müsste ich auf ähnliche Weise zurücklesen können.
Gruß
protocol.h
Code: Alles auswählen
class Protocol
{
public:
....
struct Messwerte {
int status_x;
int status_y;
QString d_x;
QString d_y;
};
// Memberfunction
Messwerte localmw() const;
Protocol *protocol;
private:
Messwerte currentMW;
void updateMesswerte(QString dx, QString dy, int status_x, int status_y);
};
main.cpp
Code: Alles auswählen
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int i;
Seriel messgeraet;
int status_x=0;
int status_y=0;
i = messgeraet.AskHardware();
//i = fb.AskHardware(status_x, status_y);
a.exec();
qDebug() << "zurück zu Main";
// wie komme ich an die Werte aus der Klasse
// protocol.h??
return i;
}