Hallöchen mein Name ist Dave und ich habe ein Projekt vor. Und zwar möchte ich ein C++-Programm schreiben, mit dem ich über eine serielle Schnittstelle (RS-232) SCPI-Befehle an einen HP33120A Funktionsgenerator senden kann, damit dieser bestimmte Signale (Sinus, Rechteck etc. mit Frequenz, VPP und Offsetspannung) ausgibt. Dazu habe ich mir zum Testen der Schnittstelle HTerm runtergeladen, um überhaupt mal den FGen anzusprechen, jedoch klappt das noch nicht so ganz, hab da auch meines Wissens alles richtig eingestellt (also BaudRate, Databits, Parity etc.) Im Handbuch des Gerätes steht, dass die Befehle eigentlich "simple" ASCII Befehle sind, die man doch eigentlich mit einem String versenden können müsste. Da ich allerdings im Gebiet der Programmierung relativ neu bin bräuchte ich mal Eure Hilfe. :confused: Der Befehl für ein "einfaches" Signal wäre zB "APPL:SIN 5000,2 VPP,1", also sprich: mach mir nen Sinus mit 5 kHz, 2 V peak to peak und 1 V Offsetspannung, sowas in etwa will ich mit HTerm erstmal an das Gerät senden und mir ausgeben lassen... Im Voraus schonmal vielen Dank für Eure Hilfe!! MfG Dave
Hallo David, hier steht alles drin https://www.ini.uzh.ch/~ppyk/BasicsOfInstrumentation/HP_33120A_Function_Generator.pdf
Walter T. schrieb: > Antwortet das Gerät denn im Terminal auf *IDN? ? Inwiefern meinst du das? Ich habe es mal so probiert, da zeigt das Gerät aber nur einen Error (bitte nicht schimpfen, hab da noch nicht wirklich einen Plan von :-( )
Ja so ist es vom Gerät vorgegeben, bzw voreingestellt, habe ich auch am Gerät selbst nachgeschaut in der I/O Konfiguration.
Eventuell im hterm unter 'Input control'/'Send on enter' 'New line' auswählen? (Seite 214 im PDF-Manual von oben: A command string sent to the function generator must terminate with a <new line> character. )
Da gibt es kein 'New line' zum auswählen in dem drop-down menü...
New Line wird der LF sein. CR Wagenrücklauf, der Cursor spring zum Begin der Zeile LF Zeilensprung, der Cursor springt in die nächste Zeile CR, LF oder CR LF sind so die üblichen Endzeichen von seriellen Telegrammen Ansonsten kann man sich im HEX Modus ja alles mögliche selber zusammenbauen. Ich würde da eh ein zweiten PC mit einem HEX Terminal parallel zu schalten in der Probierphase. Da sieht man was auf der Leitung tatsächlich los ist.
Super, danke für den Tip, es funktioniert alles super und so wie ich es mir vorgestellt habe! Es fehlte tatsächlich nur der 'line feed'. Zusätzlich hab ich mal noch den 'carriage return' aktiviert, also sprich CR-LF im drop-down Menü ausgewählt. Läuft alles wie geschmiert. Der nächste Schritt ist nun das alles mit einem eigenem QT-Programm zu realisieren, aber da guck ich erstmal wie weit ich komme und würde mich sonst hier nochmal melden wenn ich probleme habe (hoffe das ist in dem Forum hier ok). Nochmlas danke!
Hallöchen alle zusammen! habe nun wie gesagt mit HTerm alles ans laufen bekommen, habe es auch mit einem kleinen QT Programm schon geschafft! Quelltext der main.cpp: ******************************************************************** #include "com_3.h" #include <QApplication> #include <QCoreApplication> #include <QtSerialPort/QSerialPort> #include <QTimer> #include <iostream> #include <string> #include <windows.h> int main(int argc, char *argv[]) { QApplication a(argc, argv); //Variable "serial" der Schnittstelle festlegen QSerialPort serial; //Konfigurieren der Schnittstelle serial.setPortName("COM3"); //Baudrate festlegen auf 9600 Schritte/sec. serial.setBaudRate(QSerialPort::Baud9600); //Festlegung von 8 Datenbits serial.setDataBits(QSerialPort::Data8); //Festlegung von 2 Stopbits serial.setStopBits(QSerialPort::TwoStop); //Festlegung der Paritaet auf "NONE" serial.setParity(QSerialPort::NoParity); //Festlegung der Flusskontrolle auf "NONE" serial.setFlowControl(QSerialPort::NoFlowControl); " //Oeffnen der seriellen Schnittstelle serial.open(QIODevice::ReadWrite); while (true) { //Fehlerspeicher loeschen serial.write("*CLS\r\n"); //Geraet in Werkseinstellung versetzen serial.write("*RST\r\n"); //Remote-Befehl fuer rechnergesteuerten Betrieb serial.write("SYST:REM\r\n"); //Funktionsgenerierung "Rechteckfkt., 567.458 kHz, 2 VPP,1.03V Offsetspannung\carriage return\line feed" serial.write("APPL:SQU 567458,2VPP,1.03\r\n"); //Geraet in Werkseinstellung versetzen serial.write("*RST\r\n"); //Befehle ueber die serielle Schnittstelle versenden serial.flush(); } //Schließen der seriellen Schnittstelle serial.close(); return a.exec(); } ********************************************************************** Mit dem Programm öffne ich halt die Schnittstelle und schicke die SCPI-Codes an das Gerät (es macht auch das was es soll). Nun möchte ich aber ein Programm schreiben, mit welchem ich über Buttons einzelne Befehle senden kann, also sprich nen Button für "Connect", "Disconnect", "Reset", "Clear" etc. Habe das mal angefangen, funzt aber nicht so wirklich, habe wahrscheinlich die programminternen Bezüge noch nicht so ganz verstanden. Habe die COM_2.PRO, com_2.h, main.cpp und die com_2.cpp mal angehangen, vielleicht kann mir jemand weiterhelfen :-) Bis dahin MfG Dave COM_2.pro ************************************************************ #------------------------------------------------- # # Project created by QtCreator 2016-03-31T15:29:01 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = COM_2 TEMPLATE = app SOURCES += main.cpp\ com_2.cpp #Einbindung der seriellen Schnittstelle QT+= \ serialport HEADERS += com_2.h FORMS += com_2.ui *************************************************************** com_2.h *************************************************************** #ifndef COM_2_H #define COM_2_H #include <QMainWindow> namespace Ui { class com_2; } class com_2 : public QMainWindow { Q_OBJECT public: explicit com_2(QWidget *parent = 0); ~com_2(); private slots: void on_pushButton_6_clicked(); void on_pushButton_7_clicked(); void on_pushButton_5_clicked(); void on_pushButton_4_clicked(); void on_pushButton_3_clicked(); void on_pushButton_clicked(); void on_pushButton_2_clicked(); private: Ui::com_2 *ui; }; #endif // COM_2_H *********************************************************** main.cpp *********************************************************** #include "com_2.h" #include <QApplication> #include <QCoreApplication> #include <QtSerialPort/QSerialPort> #include <QWidget> #include "ui_com_2.h" //using namespace std; int main(int argc, char *argv[]) { QApplication a(argc, argv); com_2 w; w.show(); return a.exec(); } *********************************************************** com_2.cpp *********************************************************** #include "com_2.h" #include "ui_com_2.h" #include <QtSerialPort/QSerialPort> #include <QIODevice> #include <iostream> #include <string> #include <windows.h> #include <QPushButton> com_2::com_2(QWidget *parent) : QMainWindow(parent), ui(new Ui::com_2) { ui->setupUi(this); } com_2::~com_2() { delete ui; } void com_2::on_pushButton_6_clicked() { QSerialPort serial; //Variable "serial" der Schnittstelle festlegen //Konfigurieren der Schnittstelle serial.setPortName("COM3"); //seriellen Port bestimmen serial.setBaudRate(QSerialPort::Baud9600); //Baudrate festlegen auf 9600 Schritte/sec. serial.setDataBits(QSerialPort::Data8); //Festlegung von 8 Datenbits serial.setStopBits(QSerialPort::TwoStop); //Festlegung von 2 Stopbits serial.setParity(QSerialPort::NoParity); //Festlegung der Paritaet auf "NONE" serial.setFlowControl(QSerialPort::NoFlowControl); //Festlegung der Flusskontrolle auf "NONE" serial.open(QIODevice::ReadWrite); } void com_2::on_pushButton_7_clicked() { QSerialPort serial; //Variable "serial" der Schnittstelle festlegen serial.close(); } void com_2::on_pushButton_5_clicked() { QSerialPort serial; //Variable "serial" der Schnittstelle festlegen serial.write("SYST:REM\r\n"); } void com_2::on_pushButton_4_clicked() { QSerialPort serial; //Variable "serial" der Schnittstelle festlegen serial.write("*CLS\r\n"); } void com_2::on_pushButton_3_clicked() { QSerialPort serial; //Variable "serial" der Schnittstelle festlegen serial.write("*RST\r\n"); } void com_2::on_pushButton_clicked() { QSerialPort serial; //Variable "serial" der Schnittstelle festlegen serial.write("APPL:SIN 456123,2VPP"); } void com_2::on_pushButton_2_clicked() { QSerialPort serial; //Variable "serial" der Schnittstelle festlegen serial.write("APPL:SQU 567458,2VPP,1.03\r\n"); } ***************************************************************
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.