Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 8 của 8
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Chương trình Chat qua cổng COM.

    Vừa rồi mình có học xong môn thiết bị ngoại vi và ghép nối,thực sự thì môn này hay nhưng do cơ chế trường mình dạy cuốn chiếu quá, nên cũng không có time nghiên cứu kỹ.Thầy giáo có cho bài tập về nhà là: 1: Viết chương trình chát qua cổng COM. 2: Viết code nhúng vào chương trình chơi game teris để sử dụng được joytick. Mình chỉ làm được bài 1 còn bài 2 thì do không chơi game có dùng joystick bao giờ nên không rõ.
    Bài viết này của mình đưa ra nhằm giúp bạn nào cũng đang học về vấn đề này hiểu rõ hơn và tự tay xây dựng được chương trình chát qua cổng COM.
    Trước hết để sử dụng được chương trình này thì bạn cần phải có phần mềm tạo cổng COM ảo hoặc dùng dây cáp kết nối 2 máy tính qua cổng COM lại với nhau. Ở đây do không có điều kiện nên mình dùng phần mềm tạo cổng COM ảo là: Advanced Virtual COM Port. Hướng dẫn dùng phần mềm này thì mình sẽ upload vào file riêng, các bạn tải về, giải nén và xem hướng dẫn, do mình không biết upload ảnh vào bài viết.
    Code của chương trình mình sẽ upload phía dưới.
    Giờ thì mới là mục đích chính nè! Lập trình ghép nối cổng COM
    A:Các bước lập trình
    1: Kiểm tra sự tồn tại và trạng thái của các cổng COM có trên máy tính.
    2:Lập trình thiết lập các thông số kết nối.
    3:Lập trình đóng mở cổng COM.
    4:Lập trình thực hiện việc gửi, nhận dữ liệu qua cổng COM.
    4.1:Gửi dữ liệu qua cổng COM.
    4.2: Bắt dữ liệu nhận được từ cổng COM khi có sự kiện comEvReceive.
    Chúng ta sẽ sử dụng ngôn ngữ C# với .Net để làm công việc này.
    .NET cung cấp cho ta công cụ SerialPort. Chi tiết về thằng này các bạn đọc trong MSDN, ở đây mình chỉ đưa ra những gì cần thiết cho bài viết này.
    Từ các bước lập trình ở trên, công việc của chúng ta phải là sẽ là:
    1: Sử dụng hàm GetPortNames để lấy về danh sách tất cả các cổng COM trên máy tính.

    Mã:
            //Ham lay danh sach cac cong COM trong may tinh.        public void ListPortCOM()        {            foreach (string cong in SerialPort.GetPortNames())            {                                cbbPort.Items.Add(cong);                       }                                }
    _Để kiểm tra trạng thái các cổng, các bạn tiến hành mở lần lượt các cổng:
    _Nếu mở cổng có lỗi thì chứng tỏ cổng đó đã được mở.
    _Nếu mở cổng thành công thì cổng đó vẫn chưa được mở và ta có thể sử dụng cổng này.

    Mã:
            //Ham mo cong.        public void OpenPort()        {             if (cbbPort.Text == "")                MessageBox.Show("Bạn chưa chọn cổng!");            else            {                                try                {                    if (comport.IsOpen == true)                    {                        comport.Close();                        MessageBox.Show("Đã đóng cổng thành công");                        btnOpenPort.Text = "Mở cổng";                    }                    else                    {                        comport.PortName = cbbPort.Text;                        comport.Open();                                               MessageBox.Show("Đã mở cổng thành công.");                        btnOpenPort.Text = "Đóng cổng";                    }                }                catch (Exception ex)                {                    MessageBox.Show(ex.Message);                }            }        }
    2: Thiết lập các thông số kết nối (Thuộc tính chính).
    Sau khi các bạn kéo thành phần SerialPort vào Form, các bạn chỉnh thuộc tính của nó như sau.
    _Baudrate:Tốc độ(9600 hoặc tùy)
    _Databits: Số bit data.(8)
    _Parity: Bit kiểm tra chẵn lẻ.(None).
    _PortName:Số hiệu cổng COM.

    +Để đóng mở cổng COM cần dùng 2 phương thức : Open Close.
    +Sử dụng thuộc tính IsOpen để kiểm tra trạng thái của cổng COM.
    +Gửi dữ liệu qua cổng COM: Sử dụng phương thức Write của đối tượng SerialPort.
    +Nhận dữ liệu qua cổng COM
    _Tạo hàm bắt sự kiện khi có dữ liệu nhận về qua cổng COM.
    serialPort1.DataReceived +=new SerialDataReceivedEventHandler(OnReceive);
    _OnReceive:Hàm thực thi việc nhận dữ liệu và xử lý dữ liệu
    +Đọc dữ liệu sử dụng các phương thức.
    .Read
    .ReadExisting
    .ReadLine

    Lưu ý:
    Các bạn tải chương trình mình upload lên và chạy nhé!
    Tuy nhiên chương trình có khiếm khuyết, các bạn dùng sẽ biết, hãy khắc chế cho tốt, rồi vào diễn đàn góp ý cho mình nhé!

  2. #2
    Chương trình đó vẫn chưa được tốt lắm, không có bạn nào cùng đang học cái đó hay đã học rồi góp ý kiến à? Để chát trong mạng Lan thì bạn tìm hiểu về lập trình mạng với C# nhé! Forum mình có nhiều bài viết nói về nó rồi.Bản thân mình cũng đã có 2 bài viết về nó, bạn tìm sẽ thấy.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình đã down về chương trình của bạn! Rất hay! Mình mới học C# Console chưa đến WinForm nên cũng ko hiểu nhiều!
    Cho mình hỏi thêm về Chương trình 1 chút!
    Làm thế nào để 1 người bên máy khác chat với mình trong mạng Lan???

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình bị lỗi, ko lấy được dữ liệu từ cổng com, mình lấy chương trình chát của bạn, mình dùng để lấy số cân điện từ nhà mình, hiện được cổng com, mở port thành công, mà dữ liệu ko hiện lên chỉ hiện dấu chẩm hỏi, và mình debuff thì data là "\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0 ?\0? \0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0 ?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\ 0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0? \0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0 ?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\ 0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0? \0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0 ?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\ 0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0? \0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0 ?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\ 0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0? \0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0 ?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\ 0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0? \0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0 ?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\ 0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0 \0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\ 0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0 \0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\ 0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0 \0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\ 0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0? \0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0 ?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\ 0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0 \0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\ 0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0??? \0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0?? ?\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0? ??\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0 ???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\ 0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0? \0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0 ?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\ 0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0?? \0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0? ?\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0 ??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\ 0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0?? \0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0? ?\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0 ??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\ 0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0 \0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\ 0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0 \0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\ 0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0 \0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\ 0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0? \0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0 ?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\ 0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0? \0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0 ?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\ 0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0? \0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0 ?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\ 0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0? \0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0 ?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\ 0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0? \0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0 ?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\ 0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0? \0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0 ?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\ 0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0 \0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\ 0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0 \0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\ 0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0 \0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\ 0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0? \0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0 ?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\ 0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0 \0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\ 0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0??? \0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0?? ?\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0? ??\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0 ???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\ 0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0? \0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0 ?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\ 0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0?? \0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0? ?\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0 ??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\ 0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0?? \0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0? ?\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0 ??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\ 0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\0 \0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0\ 0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\0 \0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0\ 0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\0 \0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0?\ 0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0? \0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\0 ?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0?\ 0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0? \0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\0 ?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0?\ 0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0? \0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\0 ?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0?\ 0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0? \0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\0 ?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0?\ 0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0? \0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\0 ?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0?\ 0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0? \0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\0 ?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0\ 0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\0 \0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0\ 0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\0 \0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0\ 0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\0 \0\0\0?\0?\0?\0?\0?\0?\0\0\0\0??\0??\0?\0???\0\0?\ 0\0\0\0?\0?\0?\0?\0?\0?\0\0\0\0?"

    các bạn cai biết ko giúp mình với

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    //Ham lay danh sach cac cong COM trong may tinh.
    public void ListPortCOM()
    {
    foreach (string cong in SerialPort.GetPortNames())
    {
    cbbPort.Items.Add(cong);
    }

    }
    Tôi đang làm 1 module nhỏ về gửi SMS từ hệ thống Website tới điện thoại sử dụng tập lệnh ATCommand có 1 hàm Load cổng COM để thao tác.
    Ở hàm trên làm thế nào mình lọc ra được đúng cổng mình cần thao tác
    chẳng hạn khi tôi căm 1 USB 3G vào thì hàm trên Load ra những 3 cổng trong đó chỉ có 1 cổng mình cần lấy, làm sao lọc được ra cổng mình cần thao tác hả các bác

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn set Enabled timer1 = true,sau đó trong Event timer1_Tick bạn thêm vào đoạn code sau là nó tự nhận dữ liệu


    if (comport.IsOpen)
    {
    string data = comport.ReadExisting();
    if(data.Trim() != "")
    lstDisplay.Items.Add("Khách:" + data);
    }

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    COde của mình đọc thế này
    Dim stringData As String = ""
    Dim stepOver As Integer = 0
    Do While (SerialPort1.BytesToRead > 0)
    Dim charcode As Byte = Convert.ToByte(SerialPort1.ReadByte)
    If charcode = 10 Then
    stepOver += 1
    End If
    If ((charcode <> 10) AndAlso (charcode <> 13)) Then
    stepOver = 0
    End If
    stringData &= Convert.ToString(Strings.ChrW(charcode))
    If stepOver = 3 Then
    lbldl.Text = stringData
    End If
    Loop
    Khi in ra chỉ hiển thị được đoạn cuối của dữ liệu,
    nhưng khi mình debug từng dòng code thì đọc được toàn vẹn dữ liệu

    Mong các bạn giúp

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chương trình này không xài tiếng Việt được - chỉ dùng chữ Việt khong dau kiểu Tây thôi

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •