private void getData(string ipAddress, string serialNumber, WeldSchedule weldSchedule, string cell_ID)
        {
            try
            {
                const int Number_Of_Data_Points = 1000;
                string    fileName = @"WeldGraphSettings.txt";
                var       allLines = File.ReadAllLines(fileName);

                Controller plc = new Controller(ipAddress);
                plc.Connect();

                Tag rpmTag = new Tag(allLines[0]);
                rpmTag.DataType = Logix.Tag.ATOMIC.DINT;
                rpmTag.Length   = Number_Of_Data_Points;
                plc.ReadTag(rpmTag);

                Array rpmArray = (Array)rpmTag.Value;

                Logix.Tag upsetTag = new Logix.Tag(allLines[2]);
                upsetTag.DataType = Logix.Tag.ATOMIC.REAL;
                upsetTag.Length   = Number_Of_Data_Points;
                plc.ReadTag(upsetTag);
                Array upsetArray = (Array)upsetTag.Value;

                Logix.Tag pressureTag = new Logix.Tag(allLines[1]);
                pressureTag.Length   = Number_Of_Data_Points;
                pressureTag.DataType = Logix.Tag.ATOMIC.DINT;
                plc.ReadTag(pressureTag);

                Array pressureArray = (Array)pressureTag.Value;

                saveResults(rpmArray, pressureArray, upsetArray, serialNumber, weldSchedule, cell_ID);

                if (checkBox1.Checked)
                {
                    sendToDatabase(rpmArray, pressureArray, upsetArray, serialNumber, weldSchedule, cell_ID);
                }

                plc.Disconnect();
            }
            catch (System.Exception ex)
            {
                var d           = DateTime.Now.ToString("MM_dd_yyyy hh:mm:ss tt");
                var errorString = d + ",getData," + ex.Message.ToString();
                logData(errorString);
            }
        }
        /// <summary>
        /// Update listView with unsolicited messages
        /// </summary>
        private void MsgReceived(MessageEventArgs e)
        {
            try
            {
                if (messageReceivedCount > 32000)
                {
                    messageReceivedCount = 0;
                }
                messageReceivedCount++;
                messageRecievedLabel.Text = "Messages Received: " + messageReceivedCount.ToString();
                string ipAddress = e.IPSender.ToString();

                Array sArray = (Array)e.Value;

                string serialNumber = extractString(sArray, 5, 6);
                string cell_Id      = extractString(sArray, 0, 5);

                if (serialNumber == "graph_data_" && sArray.Length == 32)
                {
                    sendGraphDataToDatabase(cell_Id, getGraphDataFromArray(sArray, 12));
                }
                else
                {
                    WeldSchedule ws = new WeldSchedule();
                    ws.rpm           = Convert.ToInt32(sArray.GetValue(12));
                    ws.scrubPressure = Convert.ToInt32(sArray.GetValue(13));
                    ws.burnPressure  = Convert.ToInt32(sArray.GetValue(14));
                    ws.forgePressure = Convert.ToInt32(sArray.GetValue(15));
                    ws.scrubTime     = Convert.ToDouble(sArray.GetValue(16)) * .01;
                    ws.burnTime      = Convert.ToDouble(sArray.GetValue(17)) * .01;
                    ws.forgeTime     = Convert.ToDouble(sArray.GetValue(18)) * .01;

                    getData(ipAddress, serialNumber, ws, cell_Id);
                }
            }
            catch (System.Exception ex)
            {
                var d           = DateTime.Now.ToString("MM_dd_yyyy hh:mm:ss tt");
                var errorString = d + ",MsgReceived," + ex.Message.ToString();
                logData(errorString);
            }
        }
        public bool compare(WeldSchedule ws)
        {
            if (ws.rpm != _rpm)
            {
                return(false);
            }

            if (ws.scrubPressure != _scrubPressure)
            {
                return(false);
            }

            if (ws.scrubTime != _scrubTime)
            {
                return(false);
            }

            if (ws.burnPressure != _burnPressure)
            {
                return(false);
            }

            if (ws.burnTime != _burnTime)
            {
                return(false);
            }

            if (ws.forgePressure != _forgePressure)
            {
                return(false);
            }

            if (ws.forgeTime != _forgeTime)
            {
                return(false);
            }

            return(true);
        }
        private void sendToDatabase(Array rpm, Array pressure, Array upset, string serialNumber, WeldSchedule weldSchedule, string cell_ID)
        {
            var now = DateTime.Now;

            serialNumber += "_" + now.ToString("MM-dd-yyyy hh:mm:ss tt");

            string rpm_string      = "";
            string pressure_string = "";
            string upset_string    = "";

            for (int i = 0; i < rpm.Length; i++)
            {
                if (i == rpm.Length - 1)
                {
                    rpm_string      += Convert.ToInt32(rpm.GetValue(i)).ToString();
                    pressure_string += Convert.ToInt32(pressure.GetValue(i)).ToString();
                    upset_string    += Convert.ToDouble(upset.GetValue(i)).ToString();
                }
                else
                {
                    rpm_string      += Convert.ToInt32(rpm.GetValue(i)).ToString() + ",";
                    pressure_string += Convert.ToInt32(pressure.GetValue(i)).ToString() + ",";
                    upset_string    += Convert.ToDouble(upset.GetValue(i)).ToString() + ",";
                }
            }

            string ws = "";

            ws += "Forge Pressure," + weldSchedule.ForgePressure + ",";
            ws += "Burn Pressure," + weldSchedule.BurnPressure + ",";
            ws += "Scrub Pressure," + weldSchedule.ScrubPressure + ",";
            ws += "Forge Time," + weldSchedule.ForgeTime + ",";
            ws += "Burn Time," + weldSchedule.BurnTime + ",";
            ws += "Scrub Time," + weldSchedule.ScrubTime + ",";
            ws += "Weld Speed," + weldSchedule.RPM;

            string server   = "10.50.200.133";
            string database = "graph_db";
            string uid      = "newuser";
            string password = "******";
            string connectionString;

            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
                               database + ";" + "UID=" + uid + ";" + "PASSWORD="******";";


            MySqlConnection myDatabase = new MySqlConnection(connectionString);

            var query = "UPDATE weld_graph SET rpm='" + rpm_string + "', pressure='" + pressure_string + "', upset='" + upset_string + "', serial_number='" + serialNumber + "', weld_schedule='" + ws + "' WHERE cell_id='" + cell_ID + "'";

            myDatabase.Open();

            MySqlCommand cmd = new MySqlCommand(query, myDatabase);

            cmd.ExecuteNonQuery();

            myDatabase.Close();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //var d = DateTime.Now.ToString("MM_dd_yyyy hh:mm:ss tt");
            //var errorString = d + ",listen," + "This is a test error message";
            //logData(errorString);

            int[] myArray = new int[32];
            myArray[0]  = 18739;
            myArray[1]  = 12857;
            myArray[2]  = 12593;
            myArray[3]  = 0;
            myArray[4]  = 0;
            myArray[5]  = 19505;
            myArray[6]  = 13383;
            myArray[7]  = 12594;
            myArray[8]  = 13105;
            myArray[9]  = 12851;
            myArray[10] = 13312;
            myArray[11] = 0;
            myArray[12] = 50;
            myArray[13] = 70;
            myArray[14] = 45;
            myArray[15] = 0;
            myArray[16] = 60;
            myArray[17] = 0;
            myArray[18] = 52;
            myArray[19] = 50;
            myArray[20] = 55;
            myArray[21] = 50;
            myArray[22] = 0;
            myArray[23] = 0;
            myArray[24] = 0;
            myArray[25] = 0;
            myArray[26] = 0;
            myArray[27] = 0;
            myArray[28] = 0;
            myArray[29] = 0;
            myArray[30] = 0;
            myArray[31] = 0;

            Array thisArray = (Array)myArray;

            var cell   = extractString(thisArray, 0, 5);
            var serial = "graph_data_";

            tempCount++;
            //serial += tempCount.ToString();
            if ((tempCount % 2) == 0)
            {
                cell += tempCount.ToString();
            }

            if (serial == "graph_data_")
            {
                //var anArray = getGraphDataFromArray(thisArray, 12);
                sendGraphDataToDatabase(cell, getGraphDataFromArray(thisArray, 12));
            }
            else
            {
                WeldSchedule ws = new WeldSchedule();
                ws.rpm           = Convert.ToInt32(thisArray.GetValue(12));
                ws.scrubPressure = Convert.ToInt32(thisArray.GetValue(13));
                ws.burnPressure  = Convert.ToInt32(thisArray.GetValue(14));
                ws.forgePressure = Convert.ToInt32(thisArray.GetValue(15));
                ws.scrubTime     = Convert.ToDouble(thisArray.GetValue(16)) * .01;
                ws.burnTime      = Convert.ToDouble(thisArray.GetValue(17)) * .01;
                ws.forgeTime     = Convert.ToDouble(thisArray.GetValue(18)) * .01;

                getData("10.50.192.50", serial, ws, cell);
            }
        }
        private void saveResults(Array rpm, Array pressure, Array upset, string serialNumber, WeldSchedule weldSchedule, string cell_ID)
        {
            try
            {
                var           now  = DateTime.Now;
                StringBuilder mySB = new StringBuilder();
                mySB.AppendLine(rpm.Length.ToString());
                mySB.AppendLine(serialNumber + ", ," + now.ToString("MM-dd-yyyy hh:mm:ss tt"));


                var dateString       = now.ToString("MM_dd_yyyy");
                var workingDirectory = "";


                if (File.Exists(@"C:\Friction Weld Data\saveFiles.txt"))
                {
                    var sF = File.ReadLines(@"C:\Friction Weld Data\saveFiles.txt");

                    foreach (var f in sF)
                    {
                        if (Directory.Exists(f))
                        {
                            workingDirectory = f;
                        }
                    }
                }
                else
                {
                    workingDirectory = defaultSaveDirectory;
                }


                string savePath = workingDirectory + @"\" + cell_ID + @"\" + dateString + @"\";

                if (!Directory.Exists(savePath))
                {
                    try
                    {
                        Directory.CreateDirectory(savePath);
                    }
                    catch (Exception)
                    {
                    }
                }


                int folderPointer = Directory.GetDirectories(savePath).Length;

                if (weldScheduleDictionary.ContainsKey(cell_ID))
                {
                    WeldSchedule weldScheduleStorage = weldScheduleDictionary[cell_ID];
                    if (!weldSchedule.compare(weldScheduleDictionary[cell_ID]))
                    {
                        folderPointer++;
                        weldScheduleDictionary[cell_ID] = weldSchedule;
                    }
                }
                else
                {
                    folderPointer++;
                    weldScheduleDictionary[cell_ID] = weldSchedule;
                }

                if (folderPointer == 0)
                {
                    folderPointer++;
                }

                string folderString = (folderPointer < 10) ? "0" + folderPointer.ToString() : folderPointer.ToString();

                savePath += folderString + @"\";

                if (!Directory.Exists(savePath))
                {
                    Directory.CreateDirectory(savePath);
                }


                string saveName = serialNumber + ".csv";

                string filePath = savePath + saveName;

                //save weld schedule for current part
                mySB.AppendLine("");
                mySB.AppendLine("" + "," + "Weld Schedule");
                mySB.AppendLine("Burn Mode, Burn Mode");
                mySB.AppendLine("Forge Pressure," + weldSchedule.ForgePressure);
                mySB.AppendLine("Burn Pressure," + weldSchedule.BurnPressure);
                mySB.AppendLine("Scrub Pressure," + weldSchedule.ScrubPressure);
                mySB.AppendLine("Forge Time," + weldSchedule.ForgeTime);
                mySB.AppendLine("Burn Time," + weldSchedule.BurnTime);
                mySB.AppendLine("Scrub Time," + weldSchedule.ScrubTime);
                mySB.AppendLine("Weld Speed," + weldSchedule.RPM);


                //save weld results for current part
                mySB.AppendLine("");
                mySB.AppendLine("" + "," + "Weld Results");
                mySB.AppendLine("Pre Bond Gap Position ,  Pre Bond Gap Position  in");
                mySB.AppendLine("Pre Bond Part Contact ,  Pre Bond Part Contact  in");
                mySB.AppendLine("Total Weld Time, Weld Time  sec");
                mySB.AppendLine("Total Upset , Total Upset  in");
                mySB.AppendLine("Forge Time ,  Forge Time  sec");
                mySB.AppendLine("Forge Upset , Forge Upset  in");
                mySB.AppendLine("Forge Pressure , Forge Pressure  psi");
                mySB.AppendLine("Forge Speed , Forge Speed RPM");
                mySB.AppendLine("Burn Time , Burn Time  sec");
                mySB.AppendLine("Scrub Time , Scrub Time sec");
                mySB.AppendLine("Burn Upset , Burn Upset  in");
                mySB.AppendLine("Burn Pressure   Burn Pressure  psi");
                mySB.AppendLine("Burn Speed Burn Speed RPM");
                mySB.AppendLine("Scrub Upset Scrub Upset  in");
                mySB.AppendLine("Scrub Pressure , Scrub Pressure  psi");
                mySB.AppendLine("Scrub Speed , Scrub Speed RPM");


                //save weld graph for current part
                mySB.AppendLine("");
                mySB.AppendLine("RPM,Pressure,Upset");
                for (int i = 0; i < rpm.Length; i++)
                {
                    mySB.AppendLine(Convert.ToInt32(rpm.GetValue(i)).ToString() + "," + Convert.ToInt32(pressure.GetValue(i)).ToString() + "," + Convert.ToDouble(upset.GetValue(i)).ToString());
                }


                File.WriteAllText(filePath, mySB.ToString());

                if (successCount > 32000)
                {
                    successCount = 0;
                }
                successCount++;
                successCountLabel.Text = "Successful Transactions: " + successCount.ToString();
            }
            catch (System.Exception ex)
            {
                var d           = DateTime.Now.ToString("MM_dd_yyyy hh:mm:ss tt");
                var errorString = d + ",saveResults," + ex.Message.ToString();
                logData(errorString);
            }
        }