From d84f4325b628712d928b6c39441d6e2d0a65b590 Mon Sep 17 00:00:00 2001 From: liuwuhao Date: Thu, 1 Jul 2021 17:47:03 +0200 Subject: [PATCH] feat: export data --- CMakeLists.txt | 2 +- docs_and_specs/Keysight_InfiniiVision3000.pdf | Bin 11587965 -> 12077314 bytes src/device.cpp | 8 +- src/device.h | 2 +- src/kst3000.cpp | 110 ++++++++++++++++-- src/kst3000.h | 2 + test/main.cpp | 21 ++-- 7 files changed, 126 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0dc14ba..3ce7eb77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,4 +25,4 @@ install(DIRECTORY src/ FILES_MATCHING PATTERN "*.h" ) -# gadd_subdirectory(test) +#add_subdirectory(test) diff --git a/docs_and_specs/Keysight_InfiniiVision3000.pdf b/docs_and_specs/Keysight_InfiniiVision3000.pdf index 0fca8fc806c1199d5a26643777c38227bdfa6825..3aecb705ffa9449c7ce7c1f9048cfdf6a8ac2051 100644 GIT binary patch delta 39822 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 V^wl>*z8m(#Prv;3=kG}4*nh{to%jF% diff --git a/src/device.cpp b/src/device.cpp index a62b23cb..0c2f7c0a 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -63,7 +63,7 @@ int Device::connect() { * KST3000 k.exec("RSTater?", buffer); * @endcode * */ -int Device::exec(string message, char* result, bool br) { +int Device::exec(string message, char* result, bool br, int size) { if (br) { message += '\n'; } @@ -73,7 +73,7 @@ int Device::exec(string message, char* result, bool br) { // testcase: KST3000 k.exec("STATus? CHANnel2", buffer); send(sockfd, command, strlen(command), 0); if (result) { - read(sockfd, result, 1024); + read(sockfd, result, size); } cout << "Executed Successfully.\n"; return 0; @@ -105,6 +105,10 @@ void Device::cli() { cout << "Input a command: "; string commands = ""; getline(cin, commands); + if (commands.compare("f") == 0) { + cout << "CLI finished.\n"; + break; + } bool is_query = commands.find("?") != string::npos; if (is_query) { memset(buffer, 0, sizeof(buffer)); diff --git a/src/device.h b/src/device.h index 38f0ac50..eae03c95 100644 --- a/src/device.h +++ b/src/device.h @@ -18,7 +18,7 @@ class Device { int test(); int connect(); - int exec(string message, char *result = nullptr, bool = true); + int exec(string message, char *result = nullptr, bool = true, int size = 1024); int exec_commands(string commands); void what_am_i(); void cli(); diff --git a/src/kst3000.cpp b/src/kst3000.cpp index eca39caf..db602ba3 100644 --- a/src/kst3000.cpp +++ b/src/kst3000.cpp @@ -2,6 +2,10 @@ // Created by liuwuhao on 17.06.21. // #include +#include +#include +#include +#include #include "kst3000.h" #include @@ -145,6 +149,36 @@ int KST3000::set_channel_display(int on, int channel) { return exec(command); } +vector split (string s, string delimiter) { + size_t pos_start = 0, pos_end, delim_len = delimiter.length(); + string token; + vector res; + + while ((pos_end = s.find (delimiter, pos_start)) != string::npos) { + token = s.substr (pos_start, pos_end - pos_start); + pos_start = pos_end + delim_len; + res.push_back (token); + } + + res.push_back (s.substr (pos_start)); + return res; +} + +/** + * @brief Query the preamble of waveform data + * @return a array containing preamble + * [Waveform format, Acquire type, Waveform points desired, Waveform average count, + * Waveform X increment, Waveform X origin, Waveform X reference, + * Waveform Y increment, Waveform Y origin, Waveform Y reference] + * */ +char* KST3000::get_waveform_preamble() { + string command = "WAVeform:PREamble?"; + char buffer[1024] = {0}; + exec(command, buffer); + // vector substrs = split(buffer, ","); + return buffer; +} + /** * @brief Query the number of waveform points to be transferred * @return the number of waveform points to be transferred @@ -156,17 +190,79 @@ int KST3000::get_waveform_points() { return stoi(buffer); } +int write_to_file(string data, string file_path) { + string buffer(data); + ofstream file; + file.open(file_path); + file << buffer; + file.close(); + return 0; +} + char* KST3000::get_waveform_data() { string command = "WAVeform:DATA?"; int num = get_waveform_points(); - char buffer[num]; - memset(buffer, 0, num); - exec(command, buffer); - cout << sizeof(buffer) << endl; - cout << 1123 << endl; + char buffer[num + 10]; + memset(buffer, 1, num); + cout << strlen(buffer) << endl; + exec(command, buffer, true, num); + char data[num]; + memcpy(data, buffer + 10, num); for (int i = 0; i < num; i++) { - cout << hex << (int)buffer[i]; + cout << (int) (unsigned char)data[i]; + cout << " "; } + cout << endl; +// string s_buffer(buffer); +// s_buffer = s_buffer.substr(10); +// cout << buffer; +// write_to_file(buffer, "/tmp/buffer"); + return data; +} + +int KST3000::save_waveform_data(string file_path) { + char *preamble = get_waveform_preamble(); + vector v_preamble = split(preamble, ","); + int points = stoi(v_preamble[2]); + double x_increment = stod(v_preamble[4]); + double x_origin = stod(v_preamble[5]); + double x_reference = stod(v_preamble[6]); + double y_increment = stod(v_preamble[7]); + double y_origin = stod(v_preamble[8]); + double y_reference = stod(v_preamble[9]); + + char *data = get_waveform_data(); + for (int i = 0; i < points; i++) { + cout << (int) (unsigned char)data[i]; + cout << " "; + } + cout << endl; + +// string command = "WAVeform:DATA?"; +// int num = get_waveform_points(); +// char buffer[num + 10]; +// memset(buffer, 1, num); +// cout << strlen(buffer) << endl; +// exec(command, buffer, true, num); +// char data[num]; +// memcpy(data, buffer + 10, num); + + cout << endl; + stringstream stream; + for (int i = 0; i < points; i++) { + double time = ((i - x_reference) * x_increment) + x_origin; + int voltage_data = (int) (unsigned char) data[i]; + if (voltage_data == 0) { + continue; + } + double voltage = ((voltage_data - y_reference) * y_increment) + y_origin; + cout << voltage_data; + cout << " " ; + stream << time << "," << voltage << endl; + } + + write_to_file(stream.str(), file_path); + return 0; } /** @@ -181,4 +277,4 @@ int KST3000::digitize() { * */ int KST3000::get_system_setup(char *buffer) { return exec("SYSTem:SETup?", buffer); -} \ No newline at end of file +} diff --git a/src/kst3000.h b/src/kst3000.h index 56d7bd75..8defa700 100644 --- a/src/kst3000.h +++ b/src/kst3000.h @@ -24,8 +24,10 @@ class KST3000 : public Device { int set_channel_range(double, int channel = 1, bool is_v = true); int set_channel_offset(double offset, int channel = 1); int set_channel_display(int on, int channel = 1); + char *get_waveform_preamble(); int get_waveform_points(); char *get_waveform_data(); + int save_waveform_data(string file_path = "./buffer"); int digitize(); int get_system_setup(char *buffer); }; diff --git a/test/main.cpp b/test/main.cpp index caf6b1fe..ee72d43e 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -10,34 +10,39 @@ using namespace std; -string cap_commands = "ACQuire:TYPE AVERage\n" +string cap_commands = "ACQuire:TYPE NORMal\n" "ACQuire:COMPlete 100\n" "ACQuire:COUNt 8\n" - "DIGitize CHANnel1\n" +// "DIGitize CHANnel1\n"; "WAVeform:SOURce CHANnel1\n" "WAVeform:FORMat BYTE\n" - "WAVeform:POINts 1000\n"; + "WAVeform:POINts 1000"; int run_kst3000() { KST3000 k = KST3000("132.231.14.172"); k.connect(); -// k.set_time_range(1); +// k.set_time_range(0.05); // k.set_channel_scale(3.3); // k.set_channel_range(40); // k.set_channel_offset(-2); // k.set_channel_display(1); // k.set_time_delay(0.003); // k.set_trigger_edge("NEG"); + // k.set_trigger_source(); -// k.single(); - k.cli(); +// k.run(); // char buffer[2048]; // k.get_system_setup(buffer); // cout << buffer; -// k.exec_commands(cap_commands); + k.exec_commands(cap_commands); +// k.single(); +// k.get_waveform_preamble(); // int num = k.get_waveform_points(); // cout << num; // k.get_waveform_data(); +// k.cli(); + k.save_waveform_data("/tmp/buffer"); + k.cli(); // cout << k.get_waveform_points(); // char buffer[1024] = {0}; // k.exec("RUN"); @@ -49,7 +54,7 @@ int run_kst33500() { k.connect(); k.what_am_i(); // k.display_connection(); - k.cli(); +// k.cli(); // k.function("SIN"); // k.frequency("+1.0E+05"); // k.voltage("+2.0", "HIGH");