Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Lỗi "The port is already open" khi nhận dữ liệu tử cồng COM

  1. #1
    Ngày gia nhập
    04 2012
    Bài viết
    3

    Mặc định Lỗi "The port is already open" khi nhận dữ liệu tử cồng COM

    ai giúp mình check lỗi này với

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    // Thêm để sài SerialPort
    using System.IO;
    using System.IO.Ports;
    using System.Xml;
    // Bắt đầu code
    namespace quyen.utc
    {
        public partial class Form1 : Form
        {
            public delegate void PassingData(TextBox text);//Khai báo 1 delegate dùng để vận chuyện dữ liệu giữa 2 Form
            public string[] a;
            SerialPort P = new SerialPort(); // Khai báo 1 Object SerialPort mới.
            string InputData = String.Empty; // Khai báo string buff dùng cho hiển thị dữ liệu sau này.
            delegate void SetTextCallback(string text); // Khai bao delegate SetTextCallBack voi tham so string
            public Form1()
            {
                InitializeComponent();
                // Cài đặt các thông số cho COM
                // Mảng string port để chứ tất cả các cổng COM đang có trên máy tính
                string[] ports = SerialPort.GetPortNames();
    
                // Thêm toàn bộ các COM đã tìm được vào combox cbCom
                cbCom.Items.AddRange(ports); // Sử dụng AddRange thay vì dùng foreach
                P.ReadTimeout = 1000;
                // Khai báo hàm delegate bằng phương thức DataReceived của Object SerialPort;
                // Cái này khi có sự kiện nhận dữ liệu sẽ nhảy đến phương thức DataReceive
                
                P.DataReceived += new SerialDataReceivedEventHandler(DataReceive);
    
                // Cài đặt cho BaudRate
                string[] BaudRate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" };
                cbRate.Items.AddRange(BaudRate);
    
                // Cài đặt cho DataBits
                string[] Databits = { "6", "7", "8" };
                cbBits.Items.AddRange(Databits);
    
                //Cho Parity
                string[] Parity = { "None", "Odd", "Even" };
                cbParity.Items.AddRange(Parity);
    
                //Cho Stop bit
                string[] stopbit = { "1", "1.5", "2" };
                cbBit.Items.AddRange(stopbit);
    
                //Cho Handshaking
                string[] Handshake = { "None", "XON/XOFF", "RTS", "RTS/CTS + XON/XOFF" };
                cbHNDSHK.Items.AddRange(Handshake);
    
                
            }
            private void cbCom_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (P.IsOpen)
                {
                    P.Close(); // Nếu đang mở Port thì phải đóng lại
                }
                P.PortName = cbCom.SelectedItem.ToString(); // Gán PortName bằng COM đã chọn 
            }
            private void cbRate_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (P.IsOpen)
                {
                    P.Close();
                }
                P.BaudRate = Convert.ToInt32(cbRate.Text);
            }
            private void cbBits_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (P.IsOpen)
                {
                    P.Close();
                }
                P.DataBits = Convert.ToInt32(cbBits.Text);
            }
            private void cbParity_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (P.IsOpen)
                {
                    P.Close();
                }
                
                switch (cbParity.SelectedItem.ToString())
                {
                    case "Odd":
                        P.Parity = Parity.Odd;
                        break;
                    case "None":
                        P.Parity = Parity.None;
                        break;
                    case "Even":
                        P.Parity = Parity.Even;
                        break;
                }
            }
    
            private void cbBit_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (P.IsOpen)
                {
                    P.Close();
                }
                switch (cbBit.SelectedItem.ToString())
                {
                    case "1":
                        P.StopBits = StopBits.One;
                        break;
                    case "1.5":
                        P.StopBits = StopBits.OnePointFive;
                        break;
                    case "2":
                        P.StopBits = StopBits.Two;
                        break;
                }
            }
            private void cbHNDSHK_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (P.IsOpen)
                {
                    P.Close();
                }
                switch (cbHNDSHK.SelectedItem.ToString())
                {
                    case "0": P.Handshake = Handshake.None;
                        break;
                    case "1": P.Handshake = Handshake.XOnXOff;
                        break;
                    case "2": P.Handshake = Handshake.RequestToSend;
                        break;
                    case "3": P.Handshake = Handshake.RequestToSendXOnXOff;
                        break;
                }
            }
            // Hàm này được sự kiện nhận dử liệu gọi đến. Mục đích để hiển thị
            private void DataReceive(object obj, SerialDataReceivedEventArgs e)
            {
                InputData = P.ReadExisting();
                if (InputData != String.Empty)
                {
                    // txtIn.Text = InputData; // Ko dùng đc như thế này vì khác threads .
                    SetText(InputData); // Chính vì vậy phải sử dụng ủy quyền tại đây. Gọi delegate đã khai báo trước đó.
                }
            }
            // Hàm của  nó là ở đây.
            private void SetText(string text)
            {
                if (this.txtkq.InvokeRequired)
                {
                    SetTextCallback d = new SetTextCallback(SetText); // khởi tạo 1 delegate mới gọi đến SetText
                    this.Invoke(d, new object[] { text });
                }
                else this.txtkq.Text += text;
            }
            
            // Đến hàm gửi data xuống COM
            private void btSend_Click(object sender, EventArgs e)
            {
                
                
    
            }
            
            private void btNgat_Click(object sender, EventArgs e)
            {
                P.Close();
                btKetNoi.Enabled = true;
                btNgat.Enabled = false;
                // Hiện thị Status
                status.Text = "Đã Ngắt Kết Nối";
    
            }
    
            private void btThoat_Click(object sender, EventArgs e)
            {
                //DialogResult kq = MessageBox.Show("Bạn thực sự muốn thoát", "vanquyen.utc", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                //if (kq == DialogResult.Yes)
                {
                    //MessageBox.Show("Cảm ơn bạn đã sử dụng chương trình", "vanquyen.utc");
                    this.Close();
                }
            }
    
            private void btXoa_Click(object sender, EventArgs e)
            {
                txtkq.Text = "";
                txtLat.Text = "";
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                cbCom.SelectedIndex = 0;
                cbRate.SelectedIndex = 3; // 9600
                cbBits.SelectedIndex = 2; // 8
                cbParity.SelectedIndex = 0; // None
                cbBit.SelectedIndex = 0; // None
                cbHNDSHK.SelectedIndex = 0;//None
                // Hiện thị Status cho Pro tí
                status.Text = "Hãy chọn 1 cổng COM để kết nối.";
            }
    
            private void txtkq_TextChanged(object sender, EventArgs e)
            {
                P.Open();
    
    
    
                {
                    a = txtkq.Text.Split(new char[] { '#', ',' });
                    txtLat.Text = a[4].Substring(3, 2);
                    txtLong.Text = a[5].Substring(0, 3);
    
                    Form2 frm = new Form2("N" + txtLat.Text, "E" + txtLong.Text);
                    PassingData pd1 = new PassingData(frm.GetData1);
                    pd1(this.txtLat);
    
                    PassingData pd2 = new PassingData(frm.GetData2);
                    pd2(this.txtLong);
                    frm.Show();
                }
            }
    
            private void btKetNoi_Click(object sender, EventArgs e)
            {
                try
                {
                    P.Open();
                    btNgat.Enabled = true;
                    btKetNoi.Enabled = false;
                    // Hiện thị Status
                    status.Text = "Đang kết nối với cổng " + cbCom.SelectedItem.ToString();
                }
                catch (Exception)
                {
                    MessageBox.Show("Không kết nối được.", "Thử lại", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    
            private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form2 frm = new Form2("N" + txtLat.Text, "E" + txtLong.Text);
                frm.Show();
            }
    
    
        }
    }
    Attached Thumbnails Attached Thumbnails 123.jpg  
    Đã được chỉnh sửa lần cuối bởi vanquyen.utc : 21-04-2012 lúc 09:15 PM.

  2. #2
    Ngày gia nhập
    04 2012
    Bài viết
    3

    Chán nhỉ,vấn đề này không ai gặp ah
    Hình như,do mình nhận dữ liệu từ mạch,đẩy vào cồng Com,mới gặp lỗi này
    dùng dữ liệu ảo,mà không qua mạch ok.Có ai biết chỉ hộ mình với

Các đề tài tương tự

  1. nghĩa của 3 từ "principals", "artifacts", "securables" là như thế nào?
    Gửi bởi ntbao trong diễn đàn English for IT | Tiếng anh cho dân CNTT
    Trả lời: 2
    Bài viết cuối: 02-09-2017, 06:36 PM
  2. Attach database trong c# bị lỗi "Unable to open the physical file"
    Gửi bởi ndnhan trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 03-08-2013, 05:06 AM
  3. Trả lời: 4
    Bài viết cuối: 14-09-2011, 11:01 PM
  4. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 13-04-2011, 10:19 PM
  5. Lập trình C chuyển bài toán "tổng số nguyên tố" sang "xuất nhập file"
    Gửi bởi long221091 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 23-04-2010, 11:11 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn