using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CPFConsole { partial class Form1 { private static StringBuilder incomingMessage = new StringBuilder(512); private static string logMessage = " "; private static int qSize = 1020; private void SetText(string text) { //Clean up the text and only post messages to the CPFMessages rtb that start with a $ and end with a LF incomingMessage.Append(text); //Make sure the message starts with a $ int stxIndex = incomingMessage.ToString().IndexOf('$'); if (stxIndex >= 0) { if (stxIndex > 0) incomingMessage.Remove(0, stxIndex); } //If the message is terminated with a LF: 1) post it to the CPFMessage textbox, // 2) remove it from incomingMessage, // 3) parse and display fields // 4) write it to the log file int etxIndex = incomingMessage.ToString().IndexOf('\n'); if (etxIndex >= 0) { rtbCPFMessages.AppendText(incomingMessage.ToString(0, etxIndex)); Console.Write(incomingMessage.ToString(0, etxIndex)); parseCPFMessage(incomingMessage.ToString(0, etxIndex)); // incomingMessage.Insert(2, "\t" + rtbDynamicModelAcceleration.Text + "\t" + rtbDynamicModelVelocity.Text + "\t" + rtbDynamicModelDepth.Text + "\t"); try { logMessage = ""; logMessage = logMessage + incomingMessage.ToString(); logMessage = logMessage.Substring(0, logMessage.IndexOf('\r')); logMessage = logMessage.Trim(); if (logMessage.Length > 2) { logMessage = "$\t" + rtbDynamicModelAcceleration.Text + "\t" + rtbDynamicModelVelocity.Text + "\t" + rtbDynamicModelDepth.Text + "\t" + logMessage.Substring(1, logMessage.Length - 1); Console.WriteLine("log message: " + logMessage); if(DataLogCheck.Checked == true) logFile.WriteLine(logMessage); } } catch { Console.Write("Error building log file message"); logFile.WriteLine("Error building log file message"); } incomingMessage.Remove(0, etxIndex); } } private bool PID_isOn = false; private void parseCPFMessage(string inString) { string[] fields = new string[64]; fields = inString.Split('\t'); if (fields[0] == "$") { rtbDate.Text = fields[1]; rtbTime.Text = fields[2]; rtbCPFState.Text = fields[3]; rtbComment.Text = fields[4]; if (fields.Length > 6) if (fields[5].Length > 0) rtbCTDPressure.Text = fields[5]; if (fields.Length > 7) if (fields[6].Length > 0) rtbBellowsPosition.Text = fields[6]; if (fields.Length > 8) if (fields[7].Length > 0) rtbBatteryVoltage.Text = fields[7]; if (rtbComment.Text.Contains("PID On")) PID_isOn = true; if (rtbComment.Text.Contains("PID Off")) PID_isOn = false; if (rtbComment.Text.Contains("Vel PID Values")) parsePIDData(inString); if (rtbComment.Text.Contains("PTH Message")) parsePTH(inString); if (rtbComment.Text.StartsWith("SBE41 Message")) parseSBE41(inString); } } private void parseSBE41(string inString) { string[] fields = new string[64]; fields = inString.Split('\t'); rtbSBE41InString.Text = inString; rtbSBE41RawPressure.Text = fields[11]; rtbSBE41LPFPressure.Text = fields[12]; rtbSBE41LPFVelocity.Text = fields[13]; rtbSBE41DiffVelocity.Text = fields[14]; rtbCTDSamplePeriod.Text = fields[17]; } private void parsePTH(string inString) { string[] fields = new string[64]; fields = inString.Split('\t'); rtbHousingP.Text = fields[18]; rtbHousingT.Text = fields[19]; rtbHousingH.Text = fields[20]; } private void parsePIDData(string inString) { string[] fields = new string[64]; fields = inString.Split('\t'); //Error in field index, subtracting 3 to correct //Leaving in this format as a reminder for other CPF console builds rtbPIDSP.Text = fields[25 - 3]; rtbPIDPV.Text = fields[26 - 3]; rtbPIDY1.Text = fields[27 - 3]; rtbPIDY2.Text = fields[28 - 3]; rtbPIDI.Text = fields[29 - 3]; rtbPIDv.Text = fields[30 - 3]; rtbPIDu.Text = fields[31 - 3]; rtbPIDuCPS.Text = fields[32 - 3]; } } }