diff --git a/.gitignore b/.gitignore index 7a6b462..bec6d71 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ display -.gdb_history \ No newline at end of file +.gdb_history + +data.txt \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f6e6cee --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,57 @@ +{ + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "ratio": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/Listen2Arduino.py b/Listen2Arduino.py index 845575c..de85896 100755 --- a/Listen2Arduino.py +++ b/Listen2Arduino.py @@ -9,28 +9,72 @@ outFile = "/home/pi02/data.txt" cmd='curl -s -XPOST "http://fsunuc.physics.fsu.edu:8086/write?db=interlock" --data-binary @/home/pi02/data.txt' +OPEN = 0 +CLOSED = 1 + +input_normal= [ + OPEN, #// Reset switch + CLOSED, #// Emergency source trip switch + CLOSED, #// Cage door contact + CLOSED, #// Fume hood flow switch + OPEN, #// Vacuum condition - gnd + CLOSED, #// Tritium monitor + OPEN, #// UNUSED + CLOSED, #// Power failure + CLOSED, #// Coolant flow - gnd + OPEN, #// Vacuum condition - mid + OPEN, #// UNUSED + CLOSED, #// Coolant flow - high + OPEN, #// Smoke detector - high + OPEN, #// UNUSED + OPEN, #// UNUSED + OPEN #// UNUSED +] + +in_txt = [ "Reset Button", + "Emergency Switch", + "Cage Door Open", + "Fume Hood Flow", + "Vacuum Gauge 2", + "Tritium Monitor", + "error: port map", + "Bldg Power Fail", + "Coolant Flow 2", + "Vacuum Gauge 1", + "error: port map", + "Coolant Flow 1", + "Smoke at Source", + "error: port map", + "error: port map", + "error: port map", + ""] + while True: if ser.in_waiting > 0: line = ser.readline().decode('utf-8').rstrip() + list = [] components = line.split(';') format_value = {} for component in components: - #print(component) parts = component.strip().split(': ') if len(parts) == 2: key, valueUnit = parts part2 = valueUnit.split(' ') if len(part2) == 2: value, unit = part2 + if value == "ovf" : + value = 99999 format_value[key] = value else: format_value[key] = valueUnit + else: + list.append(component) - #print(line) + # print(line) - #for key, value in format_value.items(): + # for key, value in format_value.items(): # print(f"{key} value={value}") with open(outFile, "w") as file: @@ -65,5 +109,9 @@ while True: file.write(f"hv value=0\n") file.write(f"boiler value=0\n") file.write(f"ion value=0\n") + + for i in range(16): + if int(list[i]) != input_normal[i]: + file.write(f"#{i}--{in_txt[i]}\n") os.system(cmd) diff --git a/interlock/interlock.ino b/interlock/interlock.ino index 9259d76..b8c4ab6 100644 --- a/interlock/interlock.ino +++ b/interlock/interlock.ino @@ -130,7 +130,13 @@ void loop() { Serial.print("SubPump: "); Serial.print(subPump); - Serial.println(" amp;"); + Serial.print(" amp;"); + + for( int i = 0; i < 16; i++ ){ + Serial.print(input[i]); + Serial.print(";"); + } + Serial.println(""); previousMillis = currentMillis; // Reset the timer } diff --git a/interlock/tasks.ino b/interlock/tasks.ino index ffa57d7..1b1e0d0 100644 --- a/interlock/tasks.ino +++ b/interlock/tasks.ino @@ -126,24 +126,24 @@ void app_Interfaces(void) { } - // Webpage function - serve_webpage(); + // // Webpage function + // serve_webpage(); - // Diagnostics -> Serial Output - if (digitalRead(SWITCH_BUILTIN) == 0){ - if ((millis()-printerPace)>3000) { - print_states(); - printerPace = millis(); - } - } + // // Diagnostics -> Serial Output + // if (digitalRead(SWITCH_BUILTIN) == 0){ + // if ((millis()-printerPace)>3000) { + // print_states(); + // printerPace = millis(); + // } + // } - // Heartbeat - if ((millis()-heartBeat)>1200) { - for (int i=0; i<4; i++){ - digitalWrite(heartbeat, !digitalRead(heartbeat)); - delay(100); - } - heartBeat = millis(); - } + // // Heartbeat + // if ((millis()-heartBeat)>1200) { + // for (int i=0; i<4; i++){ + // digitalWrite(heartbeat, !digitalRead(heartbeat)); + // delay(100); + // } + // heartBeat = millis(); + // } } diff --git a/statusDisplay/display.cpp b/statusDisplay/display.cpp index caf724b..1870228 100644 --- a/statusDisplay/display.cpp +++ b/statusDisplay/display.cpp @@ -9,6 +9,28 @@ #include #include #include +#include + + +const std::string error_txt[16] = { + "Reset Button", //0 + "Emergency Switch", //1 + "Cage Door Open", //2 + "Fume Hood Flow", //3 + "Vacuum Gauge 2", //4 + "Tritium Monitor", //5 + "error: port map", //6 + "Bldg Power Fail", //7 + "Coolant Flow 2", //8 + "Vacuum Gauge 1", //9 + "error: port map", //10 + "Coolant Flow 1", //11 + "Smoke at Source", //12 + "error: port map", //13 + "error: port map", //14 + "error: port map" //15 +}; + SDL_Window* window = nullptr; SDL_Renderer* renderer = nullptr; @@ -47,6 +69,10 @@ bool hv = true; bool boiler = true ; bool ionizer = true ; +std::vector error_code; +bool isTritiumError = false; +bool isVaccumError = false; + void readStatus(){ std::ifstream file("data.txt"); // Replace "your_file.txt" with your actual file path if (!file.is_open()) { @@ -54,6 +80,10 @@ void readStatus(){ return; } + error_code.clear(); + isTritiumError = false; + isVaccumError = false; + std::string line; while (std::getline(file, line)) { std::istringstream iss(line); @@ -80,6 +110,18 @@ void readStatus(){ } } } + + if ( line[0] == '#' ) { + int code = line[1] -'0' ; + + error_code.push_back( code ); + + if( code == 9 ) isVaccumError = true; + if( code == 5 ) isTritiumError = true; + + // printf("error code : %d, %s\n", error_code.back(), error_txt[error_code.back()].c_str()); + + } } file.close(); @@ -119,6 +161,17 @@ void readStatus(){ } +std::string FormatDouble(double value){ + + std::string str_value = std::to_string(value); + size_t dot_position = str_value.find('.'); + if (dot_position != std::string::npos && str_value.length() > dot_position + 3) { + str_value = str_value.substr(0, dot_position + 3); + } + + return str_value; +} + int main() { SDL_Init(SDL_INIT_VIDEO); @@ -197,9 +250,15 @@ int main() { case 4: textDisplay( "Source (Tripped-3)", 10, 40, redColor); break; } - textDisplay( "Tritium Sensor : " + std::to_string(tritiumReading) + " mCr", 720, 200, blueColor); - textDisplay( "Vaccum : " + std::to_string(vaccumReading) + "x1e-6 Torr", 630, 20, blueColor); - textDisplay( "SubPump : " + std::to_string(subPumpReading*1000) + " mA", 300, 40, blueColor); + if( error_code.size() > 0 ){ + for( size_t i = 0; i < error_code.size(); i++){ + textDisplay( error_txt[error_code[i]], 10, 80 + 25*i, redColor); + } + } + + textDisplay( "Tritium Sensor : " + FormatDouble(tritiumReading) + " mCr", 720, 200, isTritiumError ? redColor : blueColor); + textDisplay( "Vaccum : " + FormatDouble(vaccumReading) + "x1e-6 Torr", 630, 20, isVaccumError ? redColor: blueColor); + textDisplay( "SubPump : " + FormatDouble(subPumpReading*1000) + " mA", 300, 40, blueColor); textDisplay("update every 5 sec.", 1200, 670, blackColor);