diff --git a/BenchtopParser.sln b/BenchtopParser.sln
new file mode 100644
index 0000000..9a746c1
--- /dev/null
+++ b/BenchtopParser.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.2.32505.173
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BenchtopParser", "BenchtopParser\BenchtopParser.csproj", "{EED4B077-4509-4BEB-9E17-85352F983551}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BenchtopParserTests", "BenchtopParserTests\BenchtopParserTests.csproj", "{5320EE87-21FF-4FA9-9936-1CD902556009}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EED4B077-4509-4BEB-9E17-85352F983551}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EED4B077-4509-4BEB-9E17-85352F983551}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EED4B077-4509-4BEB-9E17-85352F983551}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EED4B077-4509-4BEB-9E17-85352F983551}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5320EE87-21FF-4FA9-9936-1CD902556009}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5320EE87-21FF-4FA9-9936-1CD902556009}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5320EE87-21FF-4FA9-9936-1CD902556009}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5320EE87-21FF-4FA9-9936-1CD902556009}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5D9A4398-4E34-4CB0-9F51-966A4DA79F63}
+ EndGlobalSection
+EndGlobal
diff --git a/BenchtopParser/BenchtopParser.csproj b/BenchtopParser/BenchtopParser.csproj
new file mode 100644
index 0000000..132c02c
--- /dev/null
+++ b/BenchtopParser/BenchtopParser.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/BenchtopParser/Parser.cs b/BenchtopParser/Parser.cs
new file mode 100644
index 0000000..1209f6f
--- /dev/null
+++ b/BenchtopParser/Parser.cs
@@ -0,0 +1,64 @@
+namespace BenchtopParser {
+ public class Parser {
+ public static List I28_ProgramConfig(String program_config) {
+ List program_configs = new List();
+ I28.ProgramConfig? current = null;
+
+ foreach (var line in program_config.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) {
+ var config_line = line.Split("\t").ToList();
+ config_line.RemoveAt(0); // Remove random hex value
+ config_line.RemoveAt(0); // Remove L column
+ if (config_line[0].StartsWith("Start,")) {
+ // initialize programconfig
+ current = new I28.ProgramConfig();
+ continue;
+ }
+ if (config_line[0].StartsWith("Stop,")) {
+ // Short circuit early when stop comes.
+ program_configs.Add(current);
+ break;
+ }
+ var config = config_line[0].Split(",", 2).ToList();
+ if (config_line.Count() == 1) {
+ // Set Program Number
+ if (current == null) {
+ throw new Exception("Setting Program Number Before Start. Error In Config");
+ }
+ Console.WriteLine(config[1]);
+ current.ProgramNumber = config[1];
+ continue;
+ }
+
+
+ // Skip numbers, keep value
+ var value = config[1];
+
+
+ var programnumber_group_data = value.Split('\\');
+ var data = programnumber_group_data[2];
+ if (data.StartsWith("=")) { continue; /* comment line */ }
+
+ var lineConfig = new I28.Configuration();
+ lineConfig.unit = config_line[1];
+ lineConfig.type = config_line[2]; //a, c, f, i
+ var name_value = data.Split("=");
+ lineConfig.name = name_value[0];
+ lineConfig.value = name_value[1];
+
+ // Deal with this group logic
+ var group = programnumber_group_data[1];
+ if (current != null && !current.Group.ContainsKey(group)) {
+ current.Group.Add(group, new List { lineConfig });
+ } else if (current != null ) {
+ current.Group[group].Add(lineConfig);
+ } else {
+ throw new Exception("Config list is null, something broke");
+ }
+ }
+ // TODO: What if multiple configs how to handle start and stop?
+
+ return program_configs;
+ }
+ }
+}
+
diff --git a/BenchtopParser/ProgramConfig.cs b/BenchtopParser/ProgramConfig.cs
new file mode 100644
index 0000000..ba57578
--- /dev/null
+++ b/BenchtopParser/ProgramConfig.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BenchtopParser {
+ public class I28 {
+ public class ProgramConfig {
+ public String? ProgramNumber { get; set; }
+ public Dictionary> Group { get; set; }
+
+ public ProgramConfig() {
+ this.Group = new Dictionary>();
+ }
+ }
+ public class Configuration {
+ public String? name { get; set; }
+ public String? value { get; set; }
+ public String? type { get; set; }
+ public String? unit { get; set; }
+
+ }
+ }
+
+
+}
diff --git a/BenchtopParserTests/BenchtopParserTests.csproj b/BenchtopParserTests/BenchtopParserTests.csproj
new file mode 100644
index 0000000..5fc622b
--- /dev/null
+++ b/BenchtopParserTests/BenchtopParserTests.csproj
@@ -0,0 +1,35 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
diff --git a/BenchtopParserTests/TestFiles/Hardware Calibration Report.txt b/BenchtopParserTests/TestFiles/Hardware Calibration Report.txt
new file mode 100644
index 0000000..5d5d133
--- /dev/null
+++ b/BenchtopParserTests/TestFiles/Hardware Calibration Report.txt
@@ -0,0 +1,540 @@
+|| Instrument Info ||
+
+Instrument Name Chassis2 Adult
+Serial Number BBP1736
+Time 11:31:39
+Date 07/12/2022
+
+
+|| Hardware Calibration Report ||
+
+Hardware 0
+===============================================================
+ Test Port 1
+ ===========================================================
+
+
+ Mass Flow Trans
+ ===========================================================
+ Transducer Custom
+ Input AIN 2
+ Setpoint Pressure 1 25.000 psig
+ Setpoint Pressure 2 25.000 psig
+ Setpoint Pressure 3 25.000 psig
+ Setpoint Pressure 4 25.000 psig
+ Setpoint Pressure 5 25.000 psig
+ Setpoint Pressure 6 25.000 psig
+ Analog Value 1 8688254 cnts
+ Analog Value 2 9864771 cnts
+ Analog Value 3 11053088 cnts
+ Analog Value 4 12185889 cnts
+ Analog Value 5 13357767 cnts
+ Analog Value 6 14524278 cnts
+ Master Value 1 0.041 sccm
+ Master Value 2 4.059 sccm
+ Master Value 3 8.150 sccm
+ Master Value 4 11.980 sccm
+ Master Value 5 15.995 sccm
+ Master Value 6 19.985 sccm
+ Linearity 0.129 %
+ Last Cal Date 12/07/2020
+ Last Cal Time 10:35:20
+ Xdcr Filter Code Median
+ Xdcr Typ Residual 108.000
+ Xdcr Zero LL 0.000 cnts
+ Xdcr Zero HL 0.000 cnts
+ Xdcr Zero Lwin 0.000
+ Xdcr Zero Hwin 0.000
+ Xdcr Analog Min 0.000 cnts
+ Xdcr Analog Max 0.000 cnts
+ Xdcr Base Min 0.000
+ Xdcr Base Max 0.000
+ Setpoint Pressure 1 5.800 psig
+ Setpoint Pressure 2 5.800 psig
+ Setpoint Pressure 3 5.800 psig
+ Setpoint Pressure 4 5.800 psig
+ Setpoint Pressure 5 5.800 psig
+ Setpoint Pressure 6 5.800 psig
+ Instrument Pressure 1 5.824 psig
+ Instrument Pressure 2 5.822 psig
+ Instrument Pressure 3 5.820 psig
+ Instrument Pressure 4 5.818 psig
+ Instrument Pressure 5 5.816 psig
+ Instrument Pressure 6 5.815 psig
+ Instrument Flow 1 0.038 sccm
+ Instrument Flow 2 4.075 sccm
+ Instrument Flow 3 8.151 sccm
+ Instrument Flow 4 12.124 sccm
+ Instrument Flow 5 16.213 sccm
+ Instrument Flow 6 20.165 sccm
+ Master Value 1 0.000 sccm
+ Master Value 2 4.000 sccm
+ Master Value 3 8.000 sccm
+ Master Value 4 12.000 sccm
+ Master Value 5 16.000 sccm
+ Master Value 6 20.000 sccm
+ Master Reading 1 0.000 sccm
+ Master Reading 2 4.000 sccm
+ Master Reading 3 8.000 sccm
+ Master Reading 4 12.000 sccm
+ Master Reading 5 16.000 sccm
+ Master Reading 6 20.000 sccm
+ Verify Date 07/12/2022
+ Verify Time 10:54:56
+
+
+ Pressure Transducer
+ ===========================================================
+ Transducer CTS D34-441 45PSIA
+ Input AIN 1
+ Setpoint Pressure 1 0.000 psig
+ Setpoint Pressure 2 6.000 psig
+ Setpoint Pressure 3 12.000 psig
+ Setpoint Pressure 4 18.000 psig
+ Setpoint Pressure 5 24.000 psig
+ Setpoint Pressure 6 30.000 psig
+ Analog Value 1 10087020 cnts
+ Analog Value 2 10810568 cnts
+ Analog Value 3 11532365 cnts
+ Analog Value 4 12252414 cnts
+ Analog Value 5 12970722 cnts
+ Analog Value 6 13687182 cnts
+ Master Value 1 0.001 psig
+ Master Value 2 6.001 psig
+ Master Value 3 12.001 psig
+ Master Value 4 18.001 psig
+ Master Value 5 24.001 psig
+ Master Value 6 30.001 psig
+ XDCR Analog ATM 10086749
+ Atm Pressure -0.000 bar
+ Linearity 0.082 %
+ Last Cal Date 12/07/2020
+ Last Cal Time 09:03:38
+ Xdcr Filter Code Med, J-Filter
+ Xdcr Typ Residual 80.000
+ Xdcr Zero LL 9654557.000 cnts
+ Xdcr Zero HL 10485333.000 cnts
+ Xdcr Zero Lwin -2.501 psig
+ Xdcr Zero Hwin 2.499 psig
+ Xdcr Analog Min 5699952.000 cnts
+ Xdcr Analog Max 15110248.000 cnts
+ Xdcr Base Min -4294967.000
+ Xdcr Base Max 8589935.000
+ Setpoint Pressure 1 0.000 psig
+ Setpoint Pressure 2 6.000 psig
+ Setpoint Pressure 3 12.000 psig
+ Setpoint Pressure 4 18.000 psig
+ Setpoint Pressure 5 24.000 psig
+ Setpoint Pressure 6 30.000 psig
+ Instrument Pressure 1 0.000 psig
+ Instrument Pressure 2 6.000 psig
+ Instrument Pressure 3 11.999 psig
+ Instrument Pressure 4 17.998 psig
+ Instrument Pressure 5 23.997 psig
+ Instrument Pressure 6 29.997 psig
+ Master Value 1 0.000 psig
+ Master Value 2 6.000 psig
+ Master Value 3 12.000 psig
+ Master Value 4 18.000 psig
+ Master Value 5 24.000 psig
+ Master Value 6 30.000 psig
+ Verify Date 07/12/2022
+ Verify Time 08:14:59
+
+
+ Test Port 2
+ ===========================================================
+
+
+ Mass Flow Trans
+ ===========================================================
+ Transducer Custom
+ Input AIN 4
+ Setpoint Pressure 1 25.000 psig
+ Setpoint Pressure 2 25.000 psig
+ Setpoint Pressure 3 25.000 psig
+ Setpoint Pressure 4 25.000 psig
+ Setpoint Pressure 5 25.000 psig
+ Setpoint Pressure 6 25.000 psig
+ Analog Value 1 8689552 cnts
+ Analog Value 2 9914953 cnts
+ Analog Value 3 11057751 cnts
+ Analog Value 4 12214973 cnts
+ Analog Value 5 13397425 cnts
+ Analog Value 6 14516985 cnts
+ Master Value 1 0.054 sccm
+ Master Value 2 4.255 sccm
+ Master Value 3 8.124 sccm
+ Master Value 4 12.146 sccm
+ Master Value 5 16.159 sccm
+ Master Value 6 19.993 sccm
+ Linearity 0.166 %
+ Last Cal Date 12/07/2020
+ Last Cal Time 10:50:52
+ Xdcr Filter Code Median
+ Xdcr Typ Residual 83.000
+ Xdcr Zero LL 0.000 cnts
+ Xdcr Zero HL 0.000 cnts
+ Xdcr Zero Lwin 0.000
+ Xdcr Zero Hwin 0.000
+ Xdcr Analog Min 0.000 cnts
+ Xdcr Analog Max 0.000 cnts
+ Xdcr Base Min 0.000
+ Xdcr Base Max 0.000
+ Setpoint Pressure 1 5.800 psig
+ Setpoint Pressure 2 5.800 psig
+ Setpoint Pressure 3 5.800 psig
+ Setpoint Pressure 4 5.800 psig
+ Setpoint Pressure 5 5.800 psig
+ Setpoint Pressure 6 5.800 psig
+ Instrument Pressure 1 5.780 psig
+ Instrument Pressure 2 5.779 psig
+ Instrument Pressure 3 5.808 psig
+ Instrument Pressure 4 5.809 psig
+ Instrument Pressure 5 5.807 psig
+ Instrument Pressure 6 5.807 psig
+ Instrument Flow 1 0.049 sccm
+ Instrument Flow 2 4.122 sccm
+ Instrument Flow 3 8.171 sccm
+ Instrument Flow 4 12.220 sccm
+ Instrument Flow 5 16.204 sccm
+ Instrument Flow 6 20.221 sccm
+ Master Value 1 0.000 sccm
+ Master Value 2 4.000 sccm
+ Master Value 3 8.000 sccm
+ Master Value 4 12.000 sccm
+ Master Value 5 16.000 sccm
+ Master Value 6 20.000 sccm
+ Master Reading 1 0.000 sccm
+ Master Reading 2 4.000 sccm
+ Master Reading 3 8.000 sccm
+ Master Reading 4 12.000 sccm
+ Master Reading 5 16.000 sccm
+ Master Reading 6 20.000 sccm
+ Verify Date 07/12/2022
+ Verify Time 11:01:54
+
+
+ Pressure Transducer
+ ===========================================================
+ Transducer CTS D34-441 45PSIA
+ Input AIN 3
+ Setpoint Pressure 1 0.000 psig
+ Setpoint Pressure 2 6.000 psig
+ Setpoint Pressure 3 12.000 psig
+ Setpoint Pressure 4 18.000 psig
+ Setpoint Pressure 5 24.000 psig
+ Setpoint Pressure 6 30.000 psig
+ Analog Value 1 10050243 cnts
+ Analog Value 2 10763409 cnts
+ Analog Value 3 11474665 cnts
+ Analog Value 4 12184422 cnts
+ Analog Value 5 12892174 cnts
+ Analog Value 6 13598393 cnts
+ Master Value 1 0.001 psig
+ Master Value 2 6.001 psig
+ Master Value 3 12.001 psig
+ Master Value 4 18.001 psig
+ Master Value 5 24.001 psig
+ Master Value 6 30.001 psig
+ XDCR Analog ATM 10050055
+ Atm Pressure -0.000 bar
+ Linearity 0.082 %
+ Last Cal Date 12/07/2020
+ Last Cal Time 09:11:34
+ Xdcr Filter Code Med, J-Filter
+ Xdcr Typ Residual 59.000
+ Xdcr Zero LL 9654557.000 cnts
+ Xdcr Zero HL 10485333.000 cnts
+ Xdcr Zero Lwin -2.501 psig
+ Xdcr Zero Hwin 2.499 psig
+ Xdcr Analog Min 5699952.000 cnts
+ Xdcr Analog Max 15110248.000 cnts
+ Xdcr Base Min -4294967.000
+ Xdcr Base Max 8589935.000
+ Setpoint Pressure 1 0.000 psig
+ Setpoint Pressure 2 6.000 psig
+ Setpoint Pressure 3 12.000 psig
+ Setpoint Pressure 4 18.000 psig
+ Setpoint Pressure 5 24.000 psig
+ Setpoint Pressure 6 30.000 psig
+ Instrument Pressure 1 -0.000 psig
+ Instrument Pressure 2 5.999 psig
+ Instrument Pressure 3 12.000 psig
+ Instrument Pressure 4 17.998 psig
+ Instrument Pressure 5 23.999 psig
+ Instrument Pressure 6 29.999 psig
+ Master Value 1 0.000 psig
+ Master Value 2 6.000 psig
+ Master Value 3 12.000 psig
+ Master Value 4 18.000 psig
+ Master Value 5 24.000 psig
+ Master Value 6 30.000 psig
+ Verify Date 07/12/2022
+ Verify Time 08:21:53
+
+
+ Test Port 3
+ ===========================================================
+
+
+ Mass Flow Trans
+ ===========================================================
+ Transducer Custom
+ Input AIN 6
+ Setpoint Pressure 1 25.000 psig
+ Setpoint Pressure 2 25.000 psig
+ Setpoint Pressure 3 25.000 psig
+ Setpoint Pressure 4 25.000 psig
+ Setpoint Pressure 5 25.000 psig
+ Setpoint Pressure 6 25.000 psig
+ Analog Value 1 8686103 cnts
+ Analog Value 2 9889340 cnts
+ Analog Value 3 11072089 cnts
+ Analog Value 4 12249269 cnts
+ Analog Value 5 13397809 cnts
+ Analog Value 6 14502802 cnts
+ Master Value 1 0.007 sccm
+ Master Value 2 4.155 sccm
+ Master Value 3 8.207 sccm
+ Master Value 4 12.206 sccm
+ Master Value 5 16.165 sccm
+ Master Value 6 19.942 sccm
+ Linearity 0.096 %
+ Last Cal Date 12/07/2020
+ Last Cal Time 14:29:53
+ Xdcr Filter Code Median
+ Xdcr Typ Residual 722632.000
+ Xdcr Zero LL 0.000 cnts
+ Xdcr Zero HL 0.000 cnts
+ Xdcr Zero Lwin 0.000
+ Xdcr Zero Hwin 0.000
+ Xdcr Analog Min 0.000 cnts
+ Xdcr Analog Max 0.000 cnts
+ Xdcr Base Min 0.000
+ Xdcr Base Max 0.000
+ Setpoint Pressure 1 5.800 psig
+ Setpoint Pressure 2 5.800 psig
+ Setpoint Pressure 3 5.800 psig
+ Setpoint Pressure 4 5.800 psig
+ Setpoint Pressure 5 5.800 psig
+ Setpoint Pressure 6 5.800 psig
+ Instrument Pressure 1 5.892 psig
+ Instrument Pressure 2 5.889 psig
+ Instrument Pressure 3 5.887 psig
+ Instrument Pressure 4 5.884 psig
+ Instrument Pressure 5 5.883 psig
+ Instrument Pressure 6 5.881 psig
+ Instrument Flow 1 0.005 sccm
+ Instrument Flow 2 4.091 sccm
+ Instrument Flow 3 8.123 sccm
+ Instrument Flow 4 12.135 sccm
+ Instrument Flow 5 16.175 sccm
+ Instrument Flow 6 20.202 sccm
+ Master Value 1 0.000 sccm
+ Master Value 2 4.000 sccm
+ Master Value 3 8.000 sccm
+ Master Value 4 12.000 sccm
+ Master Value 5 16.000 sccm
+ Master Value 6 20.000 sccm
+ Master Reading 1 0.000 sccm
+ Master Reading 2 4.000 sccm
+ Master Reading 3 8.000 sccm
+ Master Reading 4 12.000 sccm
+ Master Reading 5 16.000 sccm
+ Master Reading 6 20.000 sccm
+ Verify Date 07/12/2022
+ Verify Time 11:18:36
+
+
+ Pressure Transducer
+ ===========================================================
+ Transducer CTS D34-441 45PSIA
+ Input AIN 5
+ Setpoint Pressure 1 0.000 psig
+ Setpoint Pressure 2 6.000 psig
+ Setpoint Pressure 3 12.000 psig
+ Setpoint Pressure 4 18.000 psig
+ Setpoint Pressure 5 24.000 psig
+ Setpoint Pressure 6 30.000 psig
+ Analog Value 1 10008894 cnts
+ Analog Value 2 10714413 cnts
+ Analog Value 3 11418030 cnts
+ Analog Value 4 12120292 cnts
+ Analog Value 5 12820552 cnts
+ Analog Value 6 13519203 cnts
+ Master Value 1 0.000 psig
+ Master Value 2 6.000 psig
+ Master Value 3 12.000 psig
+ Master Value 4 18.000 psig
+ Master Value 5 24.000 psig
+ Master Value 6 30.000 psig
+ XDCR Analog ATM 10008874
+ Atm Pressure -0.000 bar
+ Linearity 0.081 %
+ Last Cal Date 07/12/2022
+ Last Cal Time 09:09:57
+ Xdcr Filter Code Med, J-Filter
+ Xdcr Typ Residual 121.000
+ Xdcr Zero LL 9654557.000 cnts
+ Xdcr Zero HL 10485333.000 cnts
+ Xdcr Zero Lwin -2.500 psig
+ Xdcr Zero Hwin 2.500 psig
+ Xdcr Analog Min 5699952.000 cnts
+ Xdcr Analog Max 15110248.000 cnts
+ Xdcr Base Min -4294967.000
+ Xdcr Base Max 8589935.000
+ Setpoint Pressure 1 0.000 psig
+ Setpoint Pressure 2 6.000 psig
+ Setpoint Pressure 3 12.000 psig
+ Setpoint Pressure 4 18.000 psig
+ Setpoint Pressure 5 24.000 psig
+ Setpoint Pressure 6 30.000 psig
+ Instrument Pressure 1 -0.000 psig
+ Instrument Pressure 2 6.000 psig
+ Instrument Pressure 3 12.002 psig
+ Instrument Pressure 4 18.000 psig
+ Instrument Pressure 5 24.002 psig
+ Instrument Pressure 6 30.001 psig
+ Master Value 1 0.000 psig
+ Master Value 2 6.000 psig
+ Master Value 3 12.000 psig
+ Master Value 4 18.000 psig
+ Master Value 5 24.000 psig
+ Master Value 6 30.000 psig
+ Verify Date 07/12/2022
+ Verify Time 09:13:02
+
+
+ Test Port 4
+ ===========================================================
+
+
+ Mass Flow Trans
+ ===========================================================
+ Transducer Custom
+ Input AIN 8
+ Setpoint Pressure 1 25.000 psig
+ Setpoint Pressure 2 25.000 psig
+ Setpoint Pressure 3 25.000 psig
+ Setpoint Pressure 4 25.000 psig
+ Setpoint Pressure 5 25.000 psig
+ Setpoint Pressure 6 25.000 psig
+ Analog Value 1 8684522 cnts
+ Analog Value 2 9881552 cnts
+ Analog Value 3 11081720 cnts
+ Analog Value 4 12240018 cnts
+ Analog Value 5 13413541 cnts
+ Analog Value 6 14535797 cnts
+ Master Value 1 0.000 sccm
+ Master Value 2 4.090 sccm
+ Master Value 3 8.134 sccm
+ Master Value 4 12.132 sccm
+ Master Value 5 16.121 sccm
+ Master Value 6 19.984 sccm
+ Linearity 0.194 %
+ Last Cal Date 12/07/2020
+ Last Cal Time 11:27:27
+ Xdcr Filter Code Median
+ Xdcr Typ Residual 13.000
+ Xdcr Zero LL 0.000 cnts
+ Xdcr Zero HL 0.000 cnts
+ Xdcr Zero Lwin 0.000
+ Xdcr Zero Hwin 0.000
+ Xdcr Analog Min 0.000 cnts
+ Xdcr Analog Max 0.000 cnts
+ Xdcr Base Min 0.000
+ Xdcr Base Max 0.000
+ Setpoint Pressure 1 5.800 psig
+ Setpoint Pressure 2 5.800 psig
+ Setpoint Pressure 3 5.800 psig
+ Setpoint Pressure 4 5.800 psig
+ Setpoint Pressure 5 5.800 psig
+ Setpoint Pressure 6 5.800 psig
+ Instrument Pressure 1 5.835 psig
+ Instrument Pressure 2 5.837 psig
+ Instrument Pressure 3 5.839 psig
+ Instrument Pressure 4 5.841 psig
+ Instrument Pressure 5 5.841 psig
+ Instrument Pressure 6 5.841 psig
+ Instrument Flow 1 -0.002 sccm
+ Instrument Flow 2 4.051 sccm
+ Instrument Flow 3 7.989 sccm
+ Instrument Flow 4 12.073 sccm
+ Instrument Flow 5 16.013 sccm
+ Instrument Flow 6 20.043 sccm
+ Master Value 1 0.000 sccm
+ Master Value 2 4.000 sccm
+ Master Value 3 8.000 sccm
+ Master Value 4 12.000 sccm
+ Master Value 5 16.000 sccm
+ Master Value 6 20.000 sccm
+ Master Reading 1 0.000 sccm
+ Master Reading 2 4.000 sccm
+ Master Reading 3 8.000 sccm
+ Master Reading 4 12.000 sccm
+ Master Reading 5 16.000 sccm
+ Master Reading 6 20.000 sccm
+ Verify Date 07/12/2022
+ Verify Time 11:26:40
+
+
+ Pressure Transducer
+ ===========================================================
+ Transducer CTS D34-441 45PSIA
+ Input AIN 7
+ Setpoint Pressure 1 0.000 psig
+ Setpoint Pressure 2 6.000 psig
+ Setpoint Pressure 3 12.000 psig
+ Setpoint Pressure 4 18.000 psig
+ Setpoint Pressure 5 24.000 psig
+ Setpoint Pressure 6 30.000 psig
+ Analog Value 1 10046563 cnts
+ Analog Value 2 10762536 cnts
+ Analog Value 3 11476853 cnts
+ Analog Value 4 12189519 cnts
+ Analog Value 5 12900160 cnts
+ Analog Value 6 13609169 cnts
+ Master Value 1 0.000 psig
+ Master Value 2 6.000 psig
+ Master Value 3 12.000 psig
+ Master Value 4 18.000 psig
+ Master Value 5 24.000 psig
+ Master Value 6 30.000 psig
+ XDCR Analog ATM 10046626
+ Atm Pressure 0.000 bar
+ Linearity 0.083 %
+ Last Cal Date 07/12/2022
+ Last Cal Time 08:57:20
+ Xdcr Filter Code Med, J-Filter
+ Xdcr Typ Residual 138.000
+ Xdcr Zero LL 9654557.000 cnts
+ Xdcr Zero HL 10485333.000 cnts
+ Xdcr Zero Lwin -2.499 psig
+ Xdcr Zero Hwin 2.501 psig
+ Xdcr Analog Min 5699952.000 cnts
+ Xdcr Analog Max 15110248.000 cnts
+ Xdcr Base Min -4294967.000
+ Xdcr Base Max 8589935.000
+ Setpoint Pressure 1 0.000 psig
+ Setpoint Pressure 2 6.000 psig
+ Setpoint Pressure 3 12.000 psig
+ Setpoint Pressure 4 18.000 psig
+ Setpoint Pressure 5 24.000 psig
+ Setpoint Pressure 6 30.000 psig
+ Instrument Pressure 1 -0.000 psig
+ Instrument Pressure 2 5.999 psig
+ Instrument Pressure 3 11.999 psig
+ Instrument Pressure 4 17.998 psig
+ Instrument Pressure 5 23.997 psig
+ Instrument Pressure 6 29.997 psig
+ Master Value 1 0.000 psig
+ Master Value 2 6.000 psig
+ Master Value 3 12.000 psig
+ Master Value 4 18.000 psig
+ Master Value 5 24.000 psig
+ Master Value 6 30.000 psig
+ Verify Date 07/12/2022
+ Verify Time 09:04:54
+
+
diff --git a/BenchtopParserTests/TestFiles/Program Config.txt b/BenchtopParserTests/TestFiles/Program Config.txt
new file mode 100644
index 0000000..e1da568
--- /dev/null
+++ b/BenchtopParserTests/TestFiles/Program Config.txt
@@ -0,0 +1,92 @@
+C9AD026 L Start, Current Program Config Report
+EBAE006 L 1,P1
+06AF02B L 2,P1\X\Test Type=Diff Press Decay-dP c
+91B0034 L 3,P1\X\= a
+4CB1034 L 4,P1\X\=Measures the Pressure Loss (dP), a
+E1B2034 L 5,P1\X\=determined from the differential loss a
+79B3034 L 6,P1\X\=between the test part and the a
+49B4034 L 7,P1\X\=reference volume over the duration of a
+C6B5034 L 8,P1\X\=the test timer. The result is a
+76B6034 L 9,P1\X\=presented in units of delta pressure. a
+29B7021 L 10,P1\R\Tool Ext 1=2.50 sec f
+F8B801D L 11,P1\R\Charge=5.00 sec f
+D6B901B L 12,P1\R\Fill=5.00 sec f
+E8BA021 L 13,P1\R\Stabilize=10.00 sec f
+45BB01F L 14,P1\R\Isolation=50.00 % f
+6CBC01C L 15,P1\R\Test=10.00 sec f
+E3BD01E L 16,P1\R\Exhaust=0.50 sec f
+DDBE021 L 17,P1\R\Tool Ret 1=1.00 sec f
+82BF029 L 18,P1\P\Charge Min Press=0.400 mbar f
+3EC002E L 19,P1\P\Charge Target Press=140.000 mbar f
+77C102C L 20,P1\P\Charge Max Press=6894.757 mbar f
+49C202A L 21,P1\P\Minimum Pressure=95.000 mbar f
+27C302A L 22,P1\P\Target Pressure=100.000 mbar f
+39C402B L 23,P1\P\Maximum Pressure=120.000 mbar f
+E5C502A L 24,P1\P\Target Press Window=100.00 % f
+DBC602A L 25,P1\S\Low Limit Loss=-6894.758 dPa f
+3EC7028 L 26,P1\S\High Limit Loss=90.000 dPa f
+D5C8023 L 27,P1\S\Decay Direction=Loss c
+F8C9024 L 28,P1\S\Test Evaluation=F/P/F c
+74CA023 L 29,P1\S\Loss Offset=0.000 dPa f
+01CB01D L 30,P1\S\EDC Enabled=No c
+72CC021 L 31,P1\S\EDC Percentage=25% c
+26CD01E L 32,P1\S\EDC Quantity=30 i
+4BCE01F L 33,P1\M\Program Name=H R a
+CACF023 L 34,P1\M\Barcode Required=Yes c
+A9D0024 L 35,P1\M\Barcode Method=Unique c
+20D1024 L 36,P1\M\Copy to Target Prog=1 i
+47D201E L 37,P1\M\Copy Program=No c
+4AD3023 L 38,P1\M\Retain Part Press=No c
+11D4026 L 39,P1\M\Malfunction Eval=Reject c
+A1D5030 L 40,P1\M\Pressure Select=Pressure Source 1 c
+79D6023 L 41,P1\M\Leak Std Select=None c
+8BD7022 L 42,P1\M\ERC Method=Disabled c
+63D802A L 43,P1\M\Prefill Method=Fixed Charge c
+52D902A L 44,P1\M\Pressure Correction=Enabled c
+B0DA022 L 45,P1\M\Exhaust Method=Dump c
+49DB024 L 46,P1\A\Autorun Relax=3.00 sec f
+18DC026 L 47,P1\A\Autorun Method=Standard c
+57DD025 L 48,P1\A\Autorun Cycle Count=10 i
+99DE020 L 49,P1\A\Autorun Enable=No c
+58DF01C L 50,P1\U\Time Unit=sec c
+9BE0022 L 51,P1\U\Time Precision=X.XX c
+F9E1021 L 52,P1\U\Pressure Unit=mbar c
+F4E2027 L 53,P1\U\Pressure Precision=X.XXX c
+FFE3022 L 54,P1\U\d Pressure Unit=dPa c
+F2E4026 L 55,P1\U\d Press Precision=X.XXX c
+24E501C L 56,P1\I\I/O ID=786561 a
+99E601E L 57,P1\I\1=Start Channel c
+49E701D L 58,P1\I\2=Part Present c
+1EE801B L 59,P1\I\3=Unassigned c
+66E901B L 60,P1\I\4=Unassigned c
+48EA01B L 61,P1\I\5=Unassigned c
+BEEB01B L 62,P1\I\6=Unassigned c
+ECEC01B L 63,P1\I\7=Unassigned c
+BFED01C L 64,P1\I\8=Constrained c
+A5EE01B L 65,P1\I\9=Unassigned c
+2EEF01C L 66,P1\I\10=Unassigned c
+46F001C L 67,P1\I\11=Unassigned c
+DDF101C L 68,P1\I\12=Unassigned c
+FBF201C L 69,P1\O\I/O ID=786561 a
+D5F301D L 70,P1\O\1=Press Select c
+27F401F L 71,P1\O\2=Program Reject c
+71F501C L 72,P1\O\3=Test Passed c
+1BF601E L 73,P1\O\4=Tool Extend 1 c
+FAF701B L 74,P1\O\5=Unassigned c
+52F801B L 75,P1\O\6=Unassigned c
+08F901C L 76,P1\O\7=Constrained c
+5EFA01F L 77,P1\O\8=Program Reject c
+D6FB01C L 78,P1\O\9=Constrained c
+13FC01D L 79,P1\O\10=Constrained c
+70FD01C L 80,P1\O\11=Unassigned c
+98FE01C L 81,P1\O\12=Unassigned c
+11FF020 L 82,P1\T\Tooling Option=On c
+EF00022 L 83,P1\T\Number of Motions=1 c
+6C01025 L 84,P1\T\Two Inputs to Start=No c
+DE0202C L 85,P1\T\Part Present Check=Test Start c
+E60301E L 86,P1\T\Motion Number=1 c
+5A04024 L 87,P1\T\Retract on Reject=Yes c
+690501D L 88,P1\T\Part Mark=None c
+C306026 L 89,P1\T\Tooling Feedback 1=None c
+8507025 L Stop, Current Program Config Report
+2E08028 V I\S\RS232 1 REPORT=Cur Prog Config c
diff --git a/BenchtopParserTests/TestFiles/Transducer Verify.txt b/BenchtopParserTests/TestFiles/Transducer Verify.txt
new file mode 100644
index 0000000..0d85f8b
--- /dev/null
+++ b/BenchtopParserTests/TestFiles/Transducer Verify.txt
@@ -0,0 +1,86 @@
+|| Transducer Verify Report ||
+TRANSDUCER1
+===============================================================
+Transducer 1 CTS D34-442 115PSIA
+Setpoint Pressure 1 0.000 psig
+Setpoint Pressure 2 20.000 psig
+Setpoint Pressure 3 40.000 psig
+Setpoint Pressure 4 60.000 psig
+Setpoint Pressure 5 80.000 psig
+Setpoint Pressure 6 100.000 psig
+Instrument Pressure 1 0.000 psig
+Instrument Pressure 2 20.002 psig
+Instrument Pressure 3 39.997 psig
+Instrument Pressure 4 60.010 psig
+Instrument Pressure 5 80.001 psig
+Instrument Pressure 6 100.002 psig
+Master Value 1 0.000 psig
+Master Value 2 20.000 psig
+Master Value 3 40.000 psig
+Master Value 4 60.000 psig
+Master Value 5 80.000 psig
+Master Value 6 100.000 psig
+Verify Date 07/20/22
+Verify Time 11:20:26
+
+TRANSDUCER2
+===============================================================
+Transducer 2 CTS A12-221 250SCCM
+Setpoint Pressure 1 20.000 psig
+Setpoint Pressure 2 20.000 psig
+Setpoint Pressure 3 20.000 psig
+Setpoint Pressure 4 20.000 psig
+Setpoint Pressure 5 20.000 psig
+Setpoint Pressure 6 20.000 psig
+Setpoint Pressure 7 20.000 psig
+Setpoint Pressure 8 20.000 psig
+Setpoint Pressure 9 20.000 psig
+Setpoint Pressure 10 20.000 psig
+Setpoint Pressure 11 20.000 psig
+Instrument Pressure 1 20.154 psig
+Instrument Pressure 2 20.153 psig
+Instrument Pressure 3 20.152 psig
+Instrument Pressure 4 20.150 psig
+Instrument Pressure 5 20.148 psig
+Instrument Pressure 6 20.145 psig
+Instrument Pressure 7 20.144 psig
+Instrument Pressure 8 20.141 psig
+Instrument Pressure 9 20.139 psig
+Instrument Pressure 10 20.138 psig
+Instrument Pressure 11 20.136 psig
+Instrument Flow 1 -0.082 sccm
+Instrument Flow 2 24.802 sccm
+Instrument Flow 3 49.664 sccm
+Instrument Flow 4 74.836 sccm
+Instrument Flow 5 99.416 sccm
+Instrument Flow 6 125.289 sccm
+Instrument Flow 7 150.205 sccm
+Instrument Flow 8 175.290 sccm
+Instrument Flow 9 200.165 sccm
+Instrument Flow 10 224.748 sccm
+Instrument Flow 11 249.825 sccm
+Master Reading 1 0.000 sccm
+Master Reading 2 25.000 sccm
+Master Reading 3 50.000 sccm
+Master Reading 4 75.000 sccm
+Master Reading 5 100.000 sccm
+Master Reading 6 125.000 sccm
+Master Reading 7 150.000 sccm
+Master Reading 8 175.000 sccm
+Master Reading 9 200.000 sccm
+Master Reading 10 225.000 sccm
+Master Reading 11 250.000 sccm
+Master Value 1 0.000 sccm
+Master Value 2 25.000 sccm
+Master Value 3 50.000 sccm
+Master Value 4 75.000 sccm
+Master Value 5 100.000 sccm
+Master Value 6 125.000 sccm
+Master Value 7 150.000 sccm
+Master Value 8 175.000 sccm
+Master Value 9 200.000 sccm
+Master Value 10 225.000 sccm
+Master Value 11 250.000 sccm
+Verify Date 07/15/21
+Verify Time 14:55:10
+
diff --git a/BenchtopParserTests/UnitTest1.cs b/BenchtopParserTests/UnitTest1.cs
new file mode 100644
index 0000000..3eeec47
--- /dev/null
+++ b/BenchtopParserTests/UnitTest1.cs
@@ -0,0 +1,24 @@
+namespace BenchtopParserTests {
+ public class Tests {
+ [SetUp]
+ public void Setup() {
+ }
+
+ [Test]
+ public void Test_ProgramConfig() {
+ String program_config = File.ReadAllText(
+ Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestFiles\Program Config.txt")
+ );
+ var configs = BenchtopParser.Parser.I28_ProgramConfig(program_config);
+ Assert.IsNotNull(configs);
+ }
+
+ public void Test_ProgramConfig_Throw_ErrorOrder() {
+ String program_config = File.ReadAllText(
+ Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestFiles\Program Config.txt")
+ );
+ var configs = BenchtopParser.Parser.I28_ProgramConfig(program_config);
+ Assert.IsNotNull(configs);
+ }
+ }
+}
\ No newline at end of file
diff --git a/BenchtopParserTests/Usings.cs b/BenchtopParserTests/Usings.cs
new file mode 100644
index 0000000..cefced4
--- /dev/null
+++ b/BenchtopParserTests/Usings.cs
@@ -0,0 +1 @@
+global using NUnit.Framework;
\ No newline at end of file