Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Giao tiếp Rs232

18:53 12-09-2023 403 lượt xem 2 bình luận

Chào các bác, em có sử dụng c# để kết nối và lấy dữ liệu từ 4 thiết bị rs232, em test và mô phỏng trên 1 máy thì ok, nhưng khi chạy thực tế chương trình hay tự động bị đóng lại, nhờ các cao nhân chỉ giúp ạ, tần số lấy mẫu cho các cổng rs 232 5 lần / giây ạ cùng lúc, tức là các com sẽ nhận cùng lúc dữ liệu.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Keyence.AutoID;
using MessageBox = System.Windows.MessageBox;
using System.IO.Ports;
using System.Threading;
using System.Windows.Threading;
using System.Data.OleDb;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;
using System.Globalization;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace SrLiveViewSample
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        private Keyence.AutoID.BarcodeReaderControl barcodeReaderControl1 = new Keyence.AutoID.BarcodeReaderControl();
        SerialPort serial1 = new SerialPort();
        string received_data1;
        SerialPort serial2 = new SerialPort();
        string received_data2;
        SerialPort serial3 = new SerialPort();
        string received_data3;
        SerialPort serial4 = new SerialPort();
        string received_data4;
        private static string filePath = Environment.CurrentDirectory + "\\airgause.xlsx";
        //private static string filePath = "E:\\QRcodeset\\SR_Windows_sample_program_610 - airgause\\EN\\VS2010 WPF\\VC#\\LiveView\\SrLiveViewSample\\bin\\Debug\\airgause.xlsx"; 
        string kn = @"Provider=Microsoft.ACE.OLEDB.16.0; Data Source='" + filePath + "';Extended Properties=\"Excel 12.0;HDR=YES;\"";
        int counter;
        private bool a = false;
        private bool b = false;
        private bool c = false;
        private bool d = false;
        private bool e = false;
        private bool f = false;
        private bool g = false;
        private bool h = false;
        private bool i = false;
        private bool k = false;
        private bool p = false;
        private bool r11 = false;        
        private bool r13 = false;
        private bool r21 = false;
        private bool r23 = false;
        private bool r31 = false;
        private bool k11 = true;
        private bool k13 = true;
        private bool k21 = true;
        private bool k23 = true;
        private bool k31 = true;

        public Window1()
        {

            InitializeComponent();
            DataTable dt = new DataTable("ReaderTable");
            dt.Columns.Add("Text", typeof(string));
            dt.Columns.Add("Value", typeof(ReaderType));
            dt.Rows.Add("SR-D100", ReaderType.SR_D100);
            dt.Rows.Add("SR-750", ReaderType.SR_750);
            dt.Rows.Add("SR-2000", ReaderType.SR_2000);
            dt.Rows.Add("SR-1000", ReaderType.SR_1000);
            this.comboBoxReader.ItemsSource = ((IListSource)dt).GetList();
            this.comboBoxReader.DisplayMemberPath = "Text";
            this.comboBoxReader.SelectedValuePath = "Value";
            this.comboBoxReader.SelectedIndex = this.comboBoxReader.Items.Count - 1;
            string[] ports1 = SerialPort.GetPortNames();
            foreach (var item1 in ports1)
            {
                cb_portname1.Items.Add(item1);
            }
            string[] ports2 = SerialPort.GetPortNames();
            foreach (var item2 in ports2)
            {
                cb_portname2.Items.Add(item2);
            }
            string[] ports3 = SerialPort.GetPortNames();
            foreach (var item3 in ports3)
            {
                cb_portname3.Items.Add(item3);
            }
            string[] ports4 = SerialPort.GetPortNames();
            foreach (var item4 in ports3)
            {
                cb_portname4.Items.Add(item4);
            }
            string[] cb_dttt = { "0","1", "2", "3", "4", "5" };
            foreach (var itemm1 in cb_dttt)
            {
                cb_dtt.Items.Add(itemm1);
            }
            connect_but1.Content = "Connect-1";
            connect_but2.Content = "Connect-2";
            connect_but3.Content = "Connect-3";
            connect_but4.Content = "Connect-4";
            start_but.Content = "START";
            DispatcherTimer LiveTime = new DispatcherTimer();
            LiveTime.Interval = TimeSpan.FromSeconds(1);
            LiveTime.Tick += timer_Tick;
            LiveTime.Start();
            BitmapImage bmp = new BitmapImage();
            bmp.BeginInit();
            bmp.UriSource = new Uri(Environment.CurrentDirectory + "\\input.png");
            bmp.EndInit();
            image_re.Source = bmp;


        }
        private void connect_but_Click(object sender, RoutedEventArgs e)
        {
            if (cb_portname1.SelectedItem == null || cb_portname1.Text == cb_portname4.Text || cb_portname1.Text == cb_portname2.Text || cb_portname1.Text == cb_portname3.Text)
            {
                MessageBox.Show("COM EMPTY OR COM DUPLICATE, TRY AGAIN", "Notification");
                cb_portname1.SelectedItem = null;
            }
            else
            {
                if (connect_but1.Content == "Connect-1")
                {
                    serial1.PortName = cb_portname1.Text;
                    serial1.BaudRate = 9600;
                    serial1.Handshake = System.IO.Ports.Handshake.None;
                    serial1.Parity = Parity.None;
                    serial1.DataBits = 8;
                    serial1.StopBits = StopBits.One;
                    serial1.ReadTimeout = 1000;
                    serial1.WriteTimeout = 500;
                    serial1.Open();
                    cb_portname1.IsEnabled = false;                    
                    connect_but1.Content = "Disconnect-1";
                    serial1.DataReceived += new SerialDataReceivedEventHandler(receive1);
                }
                else
                {
                    try
                    {
                        serial1.Close();
                        cb_portname1.IsEnabled = true;
                        connect_but1.Content = "Connect-1";                        
                    }
                    catch
                    {
                    }
                }
            }
        }
        private void connect_but2_Click(object sender, RoutedEventArgs e)
        {
            if (cb_portname2.SelectedItem == null || cb_portname2.Text == cb_portname1.Text || cb_portname2.Text == cb_portname3.Text || cb_portname2.Text == cb_portname3.Text)
            {
                MessageBox.Show("COM EMPTY OR COM DUPLICATE, TRY AGAIN", "Notification");
                cb_portname2.SelectedItem = null;
            }
            else
            {
                if (connect_but2.Content == "Connect-2")
                {
                    serial2.PortName = cb_portname2.Text;
                    serial2.BaudRate = 9600; 
                    serial2.Handshake = System.IO.Ports.Handshake.None;
                    serial2.Parity = Parity.None;
                    serial2.DataBits = 8;
                    serial2.StopBits = StopBits.One;
                    serial2.ReadTimeout = 1000;
                    serial2.WriteTimeout = 500;
                    serial2.Open();
                    cb_portname2.IsEnabled = false;
                    connect_but2.Content = "Disconnect-2";
                    serial2.DataReceived += new SerialDataReceivedEventHandler(receive2);
                }
                else
                {
                    try
                    {
                        serial2.Close();
                        cb_portname2.IsEnabled = true;
                        connect_but2.Content = "Connect-2";                    
                    }
                    catch
                    {
                    }
                }
            }
        }
        private void connect_but3_Click(object sender, RoutedEventArgs e)
        {
            if (cb_portname3.SelectedItem == null || cb_portname3.Text == cb_portname1.Text || cb_portname3.Text == cb_portname2.Text || cb_portname3.Text == cb_portname4.Text)
            {
                MessageBox.Show("COM EMPTY OR COM DUPLICATE, TRY AGAIN", "Notification");
                cb_portname3.SelectedItem = null;
            }
            else
            {
                if (connect_but3.Content == "Connect-3")
                {
                    serial3.PortName = cb_portname3.Text;
                    serial3.BaudRate = 9600;
                    serial3.Handshake = System.IO.Ports.Handshake.None;
                    serial3.Parity = Parity.None;
                    serial3.DataBits = 8;
                    serial3.StopBits = StopBits.One;
                    serial3.ReadTimeout = 1000;
                    serial3.WriteTimeout = 500;
                    serial3.Open();
                    cb_portname3.IsEnabled = false;
                    connect_but3.Content = "Disconnect-3";
                    serial3.DataReceived += new SerialDataReceivedEventHandler(receive3);
                }
                else
                {
                    try
                    {
                        serial3.Close();
                        cb_portname3.IsEnabled = true;
                        connect_but3.Content = "Connect-3";
                    }
                    catch
                    {
                    }
                }
            }
        }
        private void connect_but4_Click(object sender, RoutedEventArgs e)
        {
            if (cb_portname4.SelectedItem == null || cb_portname4.Text == cb_portname1.Text || cb_portname4.Text == cb_portname2.Text || cb_portname4.Text == cb_portname3.Text)
            {
                MessageBox.Show("COM EMPTY OR COM DUPLICATE, TRY AGAIN", "Notification");
                cb_portname4.SelectedItem = null;
            }
            else
            {
                if (connect_but4.Content == "Connect-4")
                {
                    serial4.PortName = cb_portname4.Text;
                    serial4.BaudRate = 9600; 
                    serial4.Handshake = System.IO.Ports.Handshake.None;
                    serial4.Parity = Parity.None;
                    serial4.DataBits = 8;
                    serial4.StopBits = StopBits.One;
                    serial4.ReadTimeout = 1000;
                    serial4.WriteTimeout = 500;
                    serial4.Open();
                    cb_portname4.IsEnabled = false;
                    connect_but4.Content = "Disconnect-4";
                    serial4.DataReceived += new SerialDataReceivedEventHandler(receive4);
                }
                else
                {
                    try
                    {
                        serial4.Close();
                        cb_portname4.IsEnabled = true;
                        connect_but4.Content = "Connect-4";
                    }
                    catch
                    {
                    }
                }
            }
        }
        private delegate void updatatextdelegate1(string text);
        private void receive1(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            received_data1 = serial1.ReadExisting();
            Dispatcher.Invoke(DispatcherPriority.Send, new updatatextdelegate1(displaydatareceived1), received_data1);
        }
        private void displaydatareceived1(string text)
        {
            if (p == true  && receive_data1.Text.Length < 14)
            {
                receive_data1.Text += received_data1;
                receive_data11.Text = receive_data1.Text;
                receive_data1.Clear();
                if (c_min_u_ch1.Text == "" && c_max_u_ch1.Text == "" && c_min_l_ch1.Text == "" && c_max_l_ch1.Text == "")
                {
                    c_min_u_ch1.Text = (decimal.Parse(receive_data11.Text.Substring(1, 6))/1000).ToString();
                    c_max_u_ch1.Text = (decimal.Parse(receive_data11.Text.Substring(1, 6))/1000).ToString();
                    c_min_l_ch1.Text = (decimal.Parse(receive_data11.Text.Substring(7, 6))/1000).ToString();
                    c_max_l_ch1.Text = (decimal.Parse(receive_data11.Text.Substring(7, 6))/1000).ToString();
                    r11 = true;
                    r13 = true;
                    receive_data1clear();
                    if (decimal.Parse(c_min_u_ch1.Text) >= decimal.Parse(s_min_u_ch1.Text) && decimal.Parse(c_max_u_ch1.Text) <= decimal.Parse(s_max_u_ch1.Text))
                    {
                        a = true;
                        b = true;
                        result();
                    }
                    else if (decimal.Parse(c_min_u_ch1.Text) < decimal.Parse(s_min_u_ch1.Text) || decimal.Parse(c_max_u_ch1.Text) > decimal.Parse(s_max_u_ch1.Text))
                    {
                        a = false;
                        b = false;
                        result();
                    }
                    if (decimal.Parse(c_min_l_ch1.Text) >= decimal.Parse(s_min_l_ch1.Text) && decimal.Parse(c_max_l_ch1.Text) <= decimal.Parse(s_max_l_ch1.Text))
                    {
                        c = true;
                        d = true;
                        result();
                    }
                    else if (decimal.Parse(c_min_l_ch1.Text) < decimal.Parse(s_min_l_ch1.Text) || decimal.Parse(c_max_l_ch1.Text) > decimal.Parse(s_max_l_ch1.Text))
                    {
                        c = false;
                        d = false;
                        result();
                    }
                }
                else if (c_min_u_ch1.Text != "" && c_max_u_ch1.Text != "" && c_min_l_ch1.Text != "" && c_max_l_ch1.Text != "")
                {
                    if (decimal.Parse(receive_data11.Text.Substring(1, 6)) <= decimal.Parse(c_min_u_ch1.Text) * 1000)
                    {
                        c_min_u_ch1.Text = (decimal.Parse(receive_data11.Text.Substring(1, 6)) / 1000).ToString();
                        r11 = true;
                        receive_data1clear();
                        if (decimal.Parse(c_min_u_ch1.Text) >= decimal.Parse(s_min_u_ch1.Text))
                            {
                            a = true;
                            result();
                        }
                        else if (decimal.Parse(c_min_u_ch1.Text) < decimal.Parse(s_min_u_ch1.Text))
                        {                            
                            a = false;
                            result();
                        }
                    }
                    else if (decimal.Parse(receive_data11.Text.Substring(1, 6)) >= decimal.Parse(c_max_u_ch1.Text) * 1000)
                        {
                            c_max_u_ch1.Text = (decimal.Parse(receive_data11.Text.Substring(1, 6)) / 1000).ToString();
                            r11 = true;
                            receive_data1clear();
                            if (decimal.Parse(c_max_u_ch1.Text) <= decimal.Parse(s_max_u_ch1.Text))
                            {
                                b = true;
                                result(); 
                            }
                            else if (decimal.Parse(c_max_u_ch1.Text) > decimal.Parse(s_max_u_ch1.Text))
                            {
                                b = false;
                                result();
                            }
                        }
                    if (decimal.Parse(receive_data11.Text.Substring(7, 6)) <= decimal.Parse(c_min_l_ch1.Text) * 1000)
                    {
                        c_min_l_ch1.Text = (decimal.Parse(receive_data11.Text.Substring(7, 6)) / 1000).ToString();
                        r13 = true;
                        receive_data1clear();
                        if (decimal.Parse(c_min_l_ch1.Text) >= decimal.Parse(s_min_l_ch1.Text))
                        {
                            c = true;
                            result();
                        }
                        else if (decimal.Parse(c_min_l_ch1.Text) < decimal.Parse(s_min_l_ch1.Text))
                        {
                            c = false;
                            result();
                        }
                    }
                    else if (decimal.Parse(receive_data11.Text.Substring(7, 6)) >= decimal.Parse(c_max_l_ch1.Text) * 1000)
                        {
                            c_max_l_ch1.Text = (decimal.Parse(receive_data11.Text.Substring(7, 6)) / 1000).ToString();
                            r13 = true;
                            receive_data1clear();
                            if (decimal.Parse(c_max_l_ch1.Text) <= decimal.Parse(s_max_l_ch1.Text))
                            {
                                d = true;
                                result();
                            }
                            else if (decimal.Parse(c_max_l_ch1.Text) > decimal.Parse(s_max_l_ch1.Text))
                            {
                                d = false;
                                result();
                            }
                        }
                }
            }
            else if (receive_data1.Text.Length >= 14)
            {
                receive_data11.Clear();
                Thread.Sleep(30);
                //MessageBox.Show("recive1problem", "aaa");
            }
        }
        private void receive_data1clear()
        {
            if (r11 == true  && r13 == true)
            {
                r11 = false;
                r13 = false;
                receive_data11.Clear();
                receive_data1.Clear();
            }
        }
        private delegate void updatatextdelegate2(string text);
        private void receive2(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            received_data2 = serial2.ReadExisting();
            Dispatcher.Invoke(DispatcherPriority.Send, new updatatextdelegate2(displaydatareceived2), received_data2);
        }
        private void displaydatareceived2(string text)
        {
            if (p == true && receive_data2.Text.Length < 14)
            {
                receive_data2.Text += received_data2;
                receive_data22.Text = receive_data2.Text;
                receive_data2.Clear();
                if (c_min_u_ch2.Text == "" && c_max_u_ch2.Text == "" && c_min_l_ch2.Text == "" && c_max_l_ch2.Text == "")
                {
                    c_min_u_ch2.Text = (decimal.Parse(receive_data22.Text.Substring(1, 6)) / 1000).ToString();
                    c_max_u_ch2.Text = (decimal.Parse(receive_data22.Text.Substring(1, 6)) / 1000).ToString();
                    c_min_l_ch2.Text = (decimal.Parse(receive_data22.Text.Substring(7, 6)) / 1000).ToString();
                    c_max_l_ch2.Text = (decimal.Parse(receive_data22.Text.Substring(7, 6)) / 1000).ToString();
                    r21 = true;
                    r23 = true;
                    receive_data2clear();
                    if (decimal.Parse(c_min_u_ch2.Text) >= decimal.Parse(s_min_u_ch2.Text) && decimal.Parse(c_max_u_ch2.Text) <= decimal.Parse(s_max_u_ch2.Text))
                        {
                        e = true;
                        f = true;
                        result();
                    }
                        else if (decimal.Parse(c_min_u_ch2.Text) < decimal.Parse(s_min_u_ch2.Text) || decimal.Parse(c_max_u_ch2.Text) > decimal.Parse(s_max_u_ch2.Text))
                        {
                        e = false;
                        f = false;
                        result();
                    }
                    if (decimal.Parse(c_min_l_ch2.Text) >= decimal.Parse(s_min_l_ch2.Text) && decimal.Parse(c_max_l_ch2.Text) <= decimal.Parse(s_max_l_ch2.Text))
                        {
                        g = true;
                        h = true;
                        result();
                    }
                        else if (decimal.Parse(c_min_l_ch2.Text) < decimal.Parse(s_min_l_ch2.Text) || decimal.Parse(c_max_l_ch2.Text) > decimal.Parse(s_max_l_ch2.Text))
                        {
                        g = false;
                        h = false;
                        result();
                    }
                }
                else if (c_min_u_ch2.Text != "" && c_max_u_ch2.Text != "" && c_min_l_ch2.Text != "" && c_max_l_ch2.Text != "")
                {
                    if (decimal.Parse(receive_data22.Text.Substring(1, 6)) <= decimal.Parse(c_min_u_ch2.Text) * 1000)
                    {
                        c_min_u_ch2.Text = (decimal.Parse(receive_data22.Text.Substring(1, 6)) / 1000).ToString();
                        r21 = true;
                        receive_data2clear();
                        if (decimal.Parse(c_min_u_ch2.Text) >= decimal.Parse(s_min_u_ch2.Text))
                        {
                            e = true;
                            result();
                        }
                        else if (decimal.Parse(c_min_u_ch2.Text) < decimal.Parse(s_min_u_ch2.Text))
                        {
                            e = false;
                            result();
                        }
                    }
                    else if (decimal.Parse(receive_data22.Text.Substring(1, 6)) >= decimal.Parse(c_max_u_ch2.Text) * 1000)
                    {
                            c_max_u_ch2.Text = (decimal.Parse(receive_data22.Text.Substring(1, 6)) / 1000).ToString();
                            r21 = true;
                            receive_data2clear();
                            if (decimal.Parse(c_max_u_ch2.Text) <= decimal.Parse(s_max_u_ch2.Text))
                            {
                                f = true;
                                result();
                            }
                            else if (decimal.Parse(c_max_u_ch2.Text) > decimal.Parse(s_max_u_ch2.Text))
                            {
                                f = false;
                                result();
                            }
                    }
                    if (decimal.Parse(receive_data22.Text.Substring(7, 6)) <= decimal.Parse(c_min_l_ch2.Text) * 1000)
                    {
                        c_min_l_ch2.Text = (decimal.Parse(receive_data22.Text.Substring(7, 6)) / 1000).ToString();
                        r23 = true;
                        receive_data2clear();
                        if (decimal.Parse(c_min_l_ch2.Text) >= decimal.Parse(s_min_l_ch2.Text))
                        {
                            g = true;
                            result();
                        }
                        else if (decimal.Parse(c_min_l_ch2.Text) < decimal.Parse(s_min_l_ch2.Text))
                        {
                            g = false;
                            result();
                        }
                    }
                    else  if (decimal.Parse(receive_data22.Text.Substring(7, 6)) >= decimal.Parse(c_max_l_ch2.Text) * 1000)
                    {
                         c_max_l_ch2.Text = (decimal.Parse(receive_data22.Text.Substring(7, 6)) / 1000).ToString();
                         r23 = true;
                         receive_data2clear();
                         if (decimal.Parse(c_max_l_ch2.Text) <= decimal.Parse(s_max_l_ch2.Text))
                         {
                             h = true;
                             result();
                         }
                         else if (decimal.Parse(c_max_l_ch2.Text) > decimal.Parse(s_max_l_ch2.Text))
                         {
                             h = false;
                             result();
                         }
                     }
                }
            }
            else if (receive_data2.Text.Length >= 14)
            {
                receive_data22.Clear();
                Thread.Sleep(300); 
                MessageBox.Show("recive2problem", "aaa");
            }
        }
        private void receive_data2clear()
        {
            if (r21 == true  && r23 == true)
            {
                r21 = false;                
                r23 = false;
                receive_data22.Clear();
                receive_data2.Clear();
            }
        }

        private delegate void updatatextdelegate3(string text);
        private void receive3(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            received_data3 = serial3.ReadExisting();
            Dispatcher.Invoke(DispatcherPriority.Send, new updatatextdelegate3(displaydatareceived3), received_data3);
        }
        private void displaydatareceived3(string text)
        {
            if (p==true  && receive_data3.Text.Length < 8)
            {
                receive_data3.Text += received_data3;
                receive_data33.Text = receive_data3.Text;
                receive_data3.Clear();
                if (c_min_ch3.Text == "" && c_max_ch3.Text == "")
                {
                    c_min_ch3.Text = (decimal.Parse(receive_data33.Text.Substring(1, 6)) / 1000).ToString();
                    c_max_ch3.Text = (decimal.Parse(receive_data33.Text.Substring(1, 6)) / 1000).ToString();
                    r31 = true;
                    receive_data33.Clear();
                    if (decimal.Parse(c_min_ch3.Text) >= decimal.Parse(s_min_ch3.Text) && decimal.Parse(c_max_ch3.Text) <= decimal.Parse(s_max_ch3.Text))
                    {
                        i = true;
                        k = true;
                        result();
                    }
                    else if (decimal.Parse(c_min_ch3.Text) < decimal.Parse(s_min_ch3.Text) || decimal.Parse(c_max_ch3.Text) > decimal.Parse(s_max_ch3.Text))
                    {
                        i = false;
                        k = false;
                        result();
                    }
                }
                else if (c_min_ch3.Text != "" && c_max_ch3.Text != "")
                {
                    if (decimal.Parse(receive_data33.Text.Substring(1, 6)) <= decimal.Parse(c_min_ch3.Text) * 1000)
                    {
                        c_min_ch3.Text = (decimal.Parse(receive_data33.Text.Substring(1, 6)) / 1000).ToString();
                        receive_data33.Clear();
                        if (decimal.Parse(c_min_ch3.Text) >= decimal.Parse(s_min_ch3.Text))
                        {
                            i = true;
                            result();
                        }
                        else if (decimal.Parse(c_min_ch3.Text) < decimal.Parse(s_min_ch3.Text))
                        {
                            i = false;
                            result();
                        }
                    }
                    else if (decimal.Parse(receive_data33.Text.Substring(1, 6)) >= decimal.Parse(c_max_ch3.Text) * 1000)
                        {
                            c_max_ch3.Text = (decimal.Parse(receive_data33.Text.Substring(1, 6))/1000).ToString();
                        receive_data33.Clear();
                        if (decimal.Parse(c_max_ch3.Text) <= decimal.Parse(s_max_ch3.Text))
                            {
                                k = true;
                                result();
                            }
                            else if (decimal.Parse(c_max_ch3.Text) > decimal.Parse(s_max_ch3.Text))
                            {
                                k = false;
                                result();
                            }
                        }
                }
            }
            else if (receive_data33.Text.Length >= 8)
            {
                receive_data33.Clear();
                Thread.Sleep(300);
                MessageBox.Show("recive3problem", "aaa");
            }
        }
        //private void receive_data3clear()
        //{
         //   if (r31 == true && receive_data3.Text.Length >= 8)
         //   {
          //      r31 = false;
           //     receive_data3.Clear();
           // }
       // }
        private delegate void updatatextdelegate4(string text);
        private void receive4(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            received_data4 = serial4.ReadExisting();
            Dispatcher.Invoke(DispatcherPriority.Send, new updatatextdelegate4(displaydatareceived4), received_data4);
        }
        private void displaydatareceived4(string text)
        {
            if (receive_data4.Text.Length < 4)
            {
                receive_data4.Text += received_data4;
                receive_data44.Text = receive_data4.Text;
                receive_data4.Clear();
                if (receive_data44.Text.Substring(0, 3) == "stt")
                {
                    p = true;
                    BitmapImage bmp = new BitmapImage();
                    bmp.BeginInit();
                    bmp.UriSource = new Uri(Environment.CurrentDirectory + "\\check.png");
                    bmp.EndInit();
                    image_re.Source = bmp;
                    receive_data44.Clear();
                }
                else if (receive_data44.Text.Substring(0, 3) == "stp")
                    {
                        p = false;
                        updatedata();
                        receive_data44.Clear();
                }
            }
            else
            {
                receive_data44.Clear();
                Thread.Sleep(300);
                //receive_data4.Clear();
                MessageBox.Show("Please check COM", "Notification");
            }            
        }
        
        private void start_but_Click(object sender, RoutedEventArgs e)
        {
            if (start_but.Content == "START")
            {
                if (serial1.IsOpen && serial2.IsOpen && serial3.IsOpen && serial4.IsOpen && product.Text!="" && cb_dtt.Text != "" && s_min_u_ch1.Text != "" && s_min_l_ch1.Text != "" && s_max_u_ch1.Text != "" && s_max_l_ch1.Text != "" && s_min_u_ch2.Text != "" && s_min_l_ch2.Text != "" && s_max_u_ch2.Text != "" && s_max_l_ch2.Text != "" && s_max_ch3.Text != "" && s_max_ch3.Text != "")
                {
                    //serial4.Write("rst");
                    start_but.Content = "STOP";
                    product.BorderThickness = new Thickness(0);
                    product.IsReadOnly = true;
                    s_min_u_ch1.IsReadOnly = true;
                    s_max_u_ch1.IsReadOnly = true;
                    s_min_l_ch1.IsReadOnly = true;
                    s_max_l_ch1.IsReadOnly = true;
                    s_min_u_ch2.IsReadOnly = true;
                    s_max_u_ch2.IsReadOnly = true;
                    s_min_l_ch2.IsReadOnly = true;
                    s_max_l_ch2.IsReadOnly = true;
                    s_min_ch3.IsReadOnly = true;
                    s_max_ch3.IsReadOnly = true;
                    cb_dtt.IsEnabled = false;                    
                    connect_but2.IsEnabled = false;
                    connect_but3.IsEnabled = false;
                    connect_but4.IsEnabled = false;
                    connect_but1.IsEnabled = false;
                    c_min_u_ch1.Clear();
                    c_max_u_ch1.Clear();
                    c_min_l_ch1.Clear();
                    c_max_l_ch1.Clear();
                    c_min_u_ch2.Clear();
                    c_max_u_ch2.Clear();
                    c_min_l_ch2.Clear();
                    c_max_l_ch2.Clear();
                    c_min_ch3.Clear();
                    c_max_ch3.Clear();
                    c_result.Clear();
                    receive_data1.Clear();
                    receive_data2.Clear();
                    receive_data3.Clear();
                    receive_data4.Clear();
                    receive_data11.Clear();
                    receive_data22.Clear();
                    receive_data33.Clear();
                    //receive_data44.Clear();

                }
                else
                {
                    MessageBox.Show("COM DISCONECT Or DETECTION TIMES EMPTY Or SETTING DATA EMPTY ", "Notification");                  
                    
                }
            }
            else
            {
                try
                {
                    product.BorderThickness = new Thickness(4);
                    product.IsReadOnly = true;
                    s_min_u_ch1.IsReadOnly = false;
                    s_max_u_ch1.IsReadOnly = false;
                    s_min_l_ch1.IsReadOnly = false;
                    s_max_l_ch1.IsReadOnly = false;
                    s_min_u_ch2.IsReadOnly = false;
                    s_max_u_ch2.IsReadOnly = false;
                    s_min_l_ch2.IsReadOnly = false;
                    s_max_l_ch2.IsReadOnly = false;
                    s_min_ch3.IsReadOnly = false;
                    s_max_ch3.IsReadOnly = false;
                    cb_dtt.IsEnabled = true;
                    connect_but2.IsEnabled = true;
                    connect_but3.IsEnabled = true;
                    connect_but4.IsEnabled = true;
                    connect_but1.IsEnabled = true;
                    start_but.Content = "START";
                }
                catch
                {
                }
            }
            
        }   

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.barcodeReaderControl1.BackColor = System.Drawing.Color.Lime;
            this.barcodeReaderControl1.IpAddress = "0.0.0.0";
            this.barcodeReaderControl1.LiveView.ImageType = Keyence.AutoID.ImageType.JEPG_IMAGE;
            this.barcodeReaderControl1.LiveView.WindowScale = 2;
            this.barcodeReaderControl1.Location = new System.Drawing.Point(12, 12);
            this.barcodeReaderControl1.Name = "barcodeReaderControl1";
            this.barcodeReaderControl1.Size = new System.Drawing.Size(400, 300);
            this.barcodeReaderControl1.TabIndex = 29;
            this.windowsFormsHost1.Child = this.barcodeReaderControl1;
            // Register handler for reading data received event            
            this.barcodeReaderControl1.OnDataReceived += new Keyence.AutoID.BarcodeReaderControl.OnDataReceivedEventHandler(barcodeReaderControl1_OnDataReceived);
            // Set the interface to connect the reader            
            this.barcodeReaderControl1.Comm.Interface = Interface.Ethernet;
            // Set the IP address of the reader to connect            
            this.barcodeReaderControl1.IpAddress = "192.168.100.100";
            // Set the TCP port number of the reader to connect.
            // Comannd port number must be different from Data port number            
            this.barcodeReaderControl1.Ether.CommandPort = 9003;
            this.barcodeReaderControl1.Ether.DataPort = 9004;            
            newtable();
            readdataexcel("Sheet1");
            BitmapImage bmp = new BitmapImage();
            bmp.BeginInit();
            bmp.UriSource = new Uri(Environment.CurrentDirectory + "\\input.png");
            bmp.EndInit();
            image_re.Source = bmp;
        }

        private void barcodeReaderControl1_OnDataReceived(object sender, OnDataReceivedEventArgs e)
        {
            // Delegate display processing of the received data to the textBox
            this.textBox6.Dispatcher.Invoke(new updateTextBoxDelegate(updateTextBox), e.data);
        }
        // Delegated function of the textBox        
        private delegate void updateTextBoxDelegate(byte[] data);
        private void updateTextBox(byte[] data)
        {
            this.textBox2.Text = Encoding.GetEncoding("Shift_JIS").GetString(data);            
        }
         
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Connect to the Reader
                this.barcodeReaderControl1.Connect();
                this.textBox1.Text = "Connected successfully";
                if (this.barcodeReaderControl1.Comm.Interface == Interface.USB)
                {
                    // Send "SKCLOSE" in order to occupy the data port connection
                    this.barcodeReaderControl1.SKCLOSE();
                }
                else
                {
                    // Make sure that command response character string is specified.
                    string val = this.barcodeReaderControl1.RP("610");
                    switch (this.barcodeReaderControl1.ReaderType)
                    {
                        case ReaderType.SR_2000:
                        case ReaderType.SR_1000:
                        case ReaderType.SR_700:
                            if (!val.Equals("1"))
                            {
                                this.textBox1.Text = "Set Baseic command response string to Detailed response.";
                            }
                            break;
                        case ReaderType.SR_D100:
                        case ReaderType.SR_750:
                            if (!val.Equals("0"))
                            {
                                this.textBox1.Text = "Disable the setting of Specify response character.";
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                this.textBox1.Text = ex.Message;
            }
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            this.textBox1.Text = "";
            try
            {
                // Start processing of LiveView
                this.barcodeReaderControl1.StartLiveView();
            }
            catch (Exception ex)
            {
                this.textBox1.Text = ex.Message;
            }
        }

        private void button3_Click(object sender, RoutedEventArgs e)
        {
            this.textBox1.Text = "";
            try
            {                
                // Send LON command
                this.barcodeReaderControl1.LON();
            }
            catch (CommandException cex)
            {                
                // ExtErrCode shows the number of command error                
                this.textBox1.Text = "Command err," + cex.ExtErrCode;
            }
            catch (Exception ex)
            {
                this.textBox1.Text = ex.Message;
            }
        }

        private void button4_Click(object sender, RoutedEventArgs e)
        {
            this.textBox1.Text = "";
            try
            {                
                // Send LOFF command               
                this.barcodeReaderControl1.LOFF();
            }
            catch (Exception ex)
            {
                this.textBox1.Text = ex.Message;
            }
        }
        
        private void radioButton5_Checked(object sender, RoutedEventArgs e)
        {
            this.barcodeReaderControl1.StopLiveView();
            this.barcodeReaderControl1.Comm.Interface = Interface.USB;
        }

        private void radioButton6_Checked(object sender, RoutedEventArgs e)
        {
            this.barcodeReaderControl1.StopLiveView();
            this.barcodeReaderControl1.Comm.Interface = Interface.Ethernet;
        }
        
        private void comboBoxReader_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            this.barcodeReaderControl1.StopLiveView();
            // Set the type of reader to connect           
            this.barcodeReaderControl1.ReaderType = (ReaderType)comboBoxReader.SelectedValue;
        }

        private void readdataexcel(string sheet)
        {
            using (OleDbConnection conn = new OleDbConnection(kn))
            {
                conn.Open();
                OleDbDataAdapter objDA = new System.Data.OleDb.OleDbDataAdapter("select * from[" + sheet + "$]", conn);
                DataSet excelDataSet = new DataSet();
                objDA.Fill(excelDataSet);
                datagridexcel.ItemsSource = excelDataSet.Tables[0].DefaultView;
                datagridexcel.ItemsSource = excelDataSet.Tables[0].DefaultView;
                counter = datagridexcel.Items.Count;
                if (counter > 2)
                {
                    datagridexcel.SelectedIndex = datagridexcel.Items.Count - 1;
                    datagridexcel.ScrollIntoView(datagridexcel.SelectedItem);
                }
                
            }
        }

        private void updatedata()
        {
            if (c_min_u_ch1.Text != "" && c_max_u_ch1.Text != "" && c_min_l_ch1.Text != "" && c_max_l_ch1.Text != "" && c_min_u_ch2.Text != "" && c_max_u_ch2.Text != "" && c_min_l_ch2.Text != "" && c_max_l_ch2.Text != "" && c_min_ch3.Text != "" && c_max_ch3.Text != "")
            {
                ++counter;
                using (OleDbConnection conn = new OleDbConnection(kn))
                {
                    try
                    {
                        conn.Open();
                        OleDbCommand cmd = new OleDbCommand();
                        cmd.Connection = conn;
                        cmd.CommandText = "Insert into [Sheet1$] ([NO], [DATE] , [TIME], [PRODUCT], [MIN U CH1], [MAX U CH1], [MIN L CH1], [MAX L CH1], [MIN U CH2], [MAX U CH2], [MIN L CH2], [MAX L CH2],[MIN CH3], [MAX CH3], [RESULT]) values(@counters,'" + date_tb.Text + "','" + time_tb.Text + "','" + product.Text + "','" + c_min_u_ch1.Text + "','" + c_max_u_ch1.Text + "','" + c_min_l_ch1.Text + "','" + c_max_l_ch1.Text + "','" + c_min_u_ch2.Text + "','" + c_max_u_ch2.Text + "','" + c_min_l_ch2.Text + "','" + c_max_l_ch2.Text + "','" + c_min_ch3.Text + "','" + c_max_ch3.Text + "','" + c_result.Text + "')";
                        cmd.Parameters.AddWithValue("@counters", counter);
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Excel connect fail! ", "Notification");
                        //exception here
                    }
                    finally
                    {
                        conn.Close();
                        conn.Dispose();
                        textboxclear();
                    }
                    readdataexcel("Sheet1");
                }
            }
            //else {}
        }
        private void result()
        {   
                if (p==true && c_min_u_ch1.Text !="" && c_max_u_ch1.Text != "" && c_min_l_ch1.Text != "" && c_max_l_ch1.Text != "" && c_min_u_ch2.Text != "" && c_max_u_ch2.Text != "" && c_min_l_ch2.Text != "" && c_max_l_ch2.Text != "" && c_min_ch3.Text != "" && c_max_ch3.Text != "")
                {
                    if (a == false || b == false || c == false || d == false || e == false || f == false || g == false || h == false || i == false || k == false)
                    {
                        c_result.Text = "NG";
                        serial4.Write("rn");
                        BitmapImage bmp = new BitmapImage();
                        bmp.BeginInit();
                        bmp.UriSource = new Uri(Environment.CurrentDirectory + "\\ng.png");
                        bmp.EndInit();
                        image_re.Source = bmp;
                    }
                    else
                    {
                        c_result.Text = "OK";
                        serial4.Write("ro");
                        BitmapImage bmp = new BitmapImage();
                        bmp.BeginInit();
                        bmp.UriSource = new Uri(Environment.CurrentDirectory + "\\ok.jpg");
                        bmp.EndInit();
                        image_re.Source = bmp;
                    }    
                }
                else if (p==false)
                {
                BitmapImage bmp = new BitmapImage();
                bmp.BeginInit();
                bmp.UriSource = new Uri(Environment.CurrentDirectory + "\\input.png");
                bmp.EndInit();
                image_re.Source = bmp;
                }       
        }

        private void textboxclear()
        {
            r_min_u_ch1.Text = c_min_u_ch1.Text;
            r_max_u_ch1.Text = c_max_u_ch1.Text;
            r_min_l_ch1.Text = c_min_l_ch1.Text;
            r_max_l_ch1.Text = c_max_l_ch1.Text;
            r_min_u_ch2.Text = c_min_u_ch2.Text;
            r_max_u_ch2.Text = c_max_u_ch2.Text;
            r_min_l_ch2.Text = c_min_l_ch2.Text;
            r_max_l_ch2.Text = c_max_l_ch2.Text;
            r_min_ch3.Text = c_min_ch3.Text;
            r_max_ch3.Text = c_max_ch3.Text;
            r_result.Text = c_result.Text;
            c_min_u_ch1.Clear();
            c_max_u_ch1.Clear();
            c_min_l_ch1.Clear();
            c_max_l_ch1.Clear();
            c_min_u_ch2.Clear();
            c_max_u_ch2.Clear();
            c_min_l_ch2.Clear();
            c_max_l_ch2.Clear();
            c_min_ch3.Clear();
            c_max_ch3.Clear();
            c_result.Clear();
            BitmapImage bmp = new BitmapImage();
            bmp.BeginInit();
            bmp.UriSource = new Uri(Environment.CurrentDirectory + "\\input.png");
            bmp.EndInit();
            image_re.Source = bmp;

        }
        
        void timer_Tick(object sender, EventArgs e)
        {
            date_tb.Text = DateTime.Now.ToString("dd/mm/yyyy");
            time_tb.Text = DateTime.Now.ToString("HH:mm:ss");
        }
        private void newtable()
        {
            using (OleDbConnection conn = new OleDbConnection(kn))
            {
                try
                {
                    conn.Open();
                    OleDbCommand cmd = new OleDbCommand();
                    cmd.Connection = conn;
                    cmd.CommandText = "create table [Sheet1$] ([No] INT, [DATE] varchar, [TIME] varchar, [PRODUCT] varchar, [MIN U CH1] varchar, [MAX U CH1] varchar, [MIN L CH1] varchar, [MAX L CH1] varchar, [MIN U CH2] varchar, [MAX U CH2] varchar, [MIN L CH2] varchar, [MAX L CH2] varchar,[MIN CH3] varchar, [MAX CH3] varchar), [RESULT] varchar);";
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    //exception here
                }
            }
        }
       
        private void Button_Click(object sender, RoutedEventArgs e)
        {           
            
                //this.textBox2.Text = Encoding.GetEncoding("Shift_JIS").GetString(data);
                /*
                if (textBox2.Text=="" | textBox2.Text.StartsWith("ERROR"))
                {
                    messagevoiderror();
                }
                else
                {
                    datamatrixcode1.Text = textBox2.Text.Substring(0, 27);
                    gradedatamatrixcode1.Text = textBox2.Text.Substring(textBox2.Text.Length - 2, 1);
                if (gradedatamatrixcode1.Text == "A" | gradedatamatrixcode1.Text == "B" | gradedatamatrixcode1.Text == "C")
                {
                    if (datagridexcel.Items.Count >= 1)
                    {
                        foreach (System.Data.DataRowView row in datagridexcel.ItemsSource)
                        {
                            if (row.Row["Datacode"].ToString() == datamatrixcode1.Text)
                            {
                                messagevoidduplicate();
                                break;
                            }
                        }
                        //update1();
                    }
                    else
                    {
                       // update1();
                    }
                }
                else
                {
                    messagevoidgradeng();
                }    
                }     */       
        }
        
        private void s_min_u_ch1_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_max_u_ch1_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_min_l_ch1_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_max_l_ch1_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_min_u_ch2_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_max_u_ch2_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_min_l_ch2_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_max_l_ch2_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_min_ch3_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void s_max_ch3_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
            e.Handled = !regex.IsMatch((sender as System.Windows.Controls.TextBox).Text.Insert((sender as System.Windows.Controls.TextBox).SelectionStart, e.Text));
        }
        private void cb_dtt_DropDownClosed(object sender, EventArgs e)
        {
            if (serial4.IsOpen)
            {                
                serial4.Write("dtt" + cb_dtt.Text);                
            }
            else
            {
                cb_dtt.SelectedItem = null;
                MessageBox.Show("COM Disconect.", "Notification");
            }
        }
        
    }
}
 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Vo Tan Duc đã bình luận 12:52 16-09-2023
Dùng Task hoặc Thread thử xem bạn

Câu hỏi mới nhất