PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp cổng COM và LPT (http://www.picvietnam.com/forum/forumdisplay.php?f=44)
-   -   Tài liệu giao tiếp RS232 bằng C# (http://www.picvietnam.com/forum/showthread.php?t=2121)

baybalinh 14-03-2008 01:51 PM

Tài liệu giao tiếp RS232 bằng C#
 
Có bác nào có tài liệu giao tiếp RS232 dùng C# không? Em nghe nói C# dùng mạnh lắm mà chưa tìm được tài liệu hix hix.
Bác nào có share em với. Thanks các bác nhiều nhiều >:D<

bien_van_khat 14-03-2008 09:44 PM

Trích:

Nguyên văn bởi baybalinh (Post 14884)
Có bác nào có tài liệu giao tiếp RS232 dùng C# không? Em nghe nói C# dùng mạnh lắm mà chưa tìm được tài liệu hix hix.
Bác nào có share em với. Thanks các bác nhiều nhiều >:D<

Bạn dùng control SerialPort trong VisualStudio 2005 hoặc VisualStudio 2008 (nhóm components trong toolbox). Code mẫu và tài liệu bạn tham khảo từ MSDN nhé.

thaithienanh 14-03-2008 10:47 PM

Trong này đã có tut dùng .NET rồi, bạn lấy tut đó về xem cũng tương tự thôi :).

baybalinh 15-03-2008 11:55 PM

Các bác có thể nói cụ thể hơn k ạ?? Code mẫu và tuto em vào phần nào để xem ạ?? Còn tập lệnh dùng cho giao tiếp máy tính tra trong thư viện nào? Em còn gá lằm các bác ơi :-s

thaithienanh 16-03-2008 01:20 AM

Trích:

Nguyên văn bởi baybalinh (Post 14928)
Các bác có thể nói cụ thể hơn k ạ?? Code mẫu và tuto em vào phần nào để xem ạ?? Còn tập lệnh dùng cho giao tiếp máy tính tra trong thư viện nào? Em còn gá lằm các bác ơi :-s

http://www.picvietnam.com/forum/showthread.php?t=542
http://dientuvietnam.net/forums/showthread.php?t=3065
http://dientuvietnam.net/forums/showthread.php?t=3046

Chúc vui :).

baybalinh 16-03-2008 11:34 PM

hehe thanks mấy bác nhìu ^^, ít nhất bây giờ em cũng biết được bắt đầu từ đâu .

nguyencuongevn 28-03-2008 11:18 AM

cho em hỏi R232 và R422,R485 có khác nhau nhiều không?

nguyencuongevn 28-03-2008 11:19 AM

ai có tài liệu về các thiết bị tự động hoá ko?post cho mình với?thanhks

baybalinh 23-04-2008 10:21 AM

Các bác xem code của em bị lỗi gì với
 
1 Attachment(s)
Em có làm 1 ví dụ từ nguồn http://www.codeproject.com/KB/system...hreadSafe.aspx giao tiếp RS232 dùng C#.
Nó báo lỗi thế này:
Error 1 The name 'port' does not exist in the current context C:\Documents and Settings\KkK\My Documents\Visual Studio 2005\Projects\vd codeproject Csharp\vd codeproject Csharp\Form1.cs

Em gửi kèm project em làm. Các bác xem hộ em sai ở đâu với ạ.
Em cảm ơn các bác nhiều.

Đây là code của em
Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;


namespace RS232
{
    public partial class fclsRS232Tester : Form
    {
        string InputData = String.Empty;
        // This delegate enables asynchronous calls for setting

        // the text property on a TextBox control:

        delegate void SetTextCallback(string text);
        public fclsRS232Tester()
        {
            InitializeComponent();
            // Nice methods to browse all available ports:

            string[] ports = SerialPort.GetPortNames();

            // Add all port names to the combo box:

            foreach (string port in ports)
            {
                cmbComSelect.Items.Add(port);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (port.IsOpen) port.WriteLine(txtOut.Text);
            else MessageBox.Show("Serial port is closed!",
                                "RS232 tester",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            txtOut.Clear();
        }

        private void cmbComSelect_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (port.IsOpen) port.Close();
            port.PortName = cmbComSelect.SelectedItem.ToString();
            stsStatus.Text = port.PortName + ": 9600,8N1";

            // try to open the selected port:

            try
            {
                port.Open();
            }
            // give a message, if the port is not available:

            catch
            {
                MessageBox.Show("Serial port " + port.PortName +
                  " cannot be opened!", "RS232 tester",
                  MessageBoxButtons.OK, MessageBoxIcon.Warning);
                cmbComSelect.SelectedText = "";
                stsStatus.Text = "Select serial port!";
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtIn.Clear();
        }

        private void txtIn_TextChanged(object sender, EventArgs e)
        {

        }

        private void stsStatus_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }
        private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
        {
            InputData = port.ReadExisting();
            if (InputData != String.Empty)
            {
                //            txtIn.Text = InputData;

                // because of different threads this

                // does not work properly !!


                SetText(InputData);
            }
        }
        private void SetText(string text)
        {
            // InvokeRequired required compares the thread ID of the

            // calling thread to the thread ID of the creating thread.

            // If these threads are different, it returns true.

            if (this.txtIn.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else this.txtIn.Text += text;
        }
    }
}


baybalinh 23-04-2008 10:25 AM

Hix em copy qua forum sao mấy ô spacing nó tụt ra đầu dòng hết vậy, các bác chịu khó xem trong project em gửi vậy nhé. Các bác thông cảm em còn gà lắm :p

baybalinh 24-04-2008 10:22 PM

hix k có ai giúp em à :-s

namqn 24-04-2008 10:30 PM

port của bạn là object loại nào? Bạn chỉ có ports có kiểu string[] trong code thôi.

Thân,

baybalinh 25-04-2008 11:19 AM

ports kiểu string em dùng làm biến đầu vào cho hàm foreach ( Em cũng k biết rõ tác dụng của hàm này lắm, em mới tập làm lại ví dụ trong trang em nói ở trên thôi mà :p )
Lỗi không phải ở name ports kiểu string mà ở các hàm port.open, port.close v.v.. . name ports có "s" mà, trong khi "port" báo lỗi đâu có chữ "s" đâu .
Em đã thử gỡ bộ visual studio cài lại vẫn báo lỗi như vậy. Bác nào thử chạy project em attach ở trên xem sao. Plzz help me. Hix đau đầu với nó quá

namqn 25-04-2008 08:11 PM

Trích:

Nguyên văn bởi baybalinh (Post 15776)
ports kiểu string em dùng làm biến đầu vào cho hàm foreach ( Em cũng k biết rõ tác dụng của hàm này lắm, em mới tập làm lại ví dụ trong trang em nói ở trên thôi mà :p )
Lỗi không phải ở name ports kiểu string mà ở các hàm port.open, port.close v.v.. . name ports có "s" mà, trong khi "port" báo lỗi đâu có chữ "s" đâu .
Em đã thử gỡ bộ visual studio cài lại vẫn báo lỗi như vậy. Bác nào thử chạy project em attach ở trên xem sao. Plzz help me. Hix đau đầu với nó quá

Bạn không hiểu ý câu hỏi của tôi. Tôi hỏi port của bạn là object loại nào vì tôi không thấy nó được khai báo, hay khởi tạo. Thông báo lỗi của trình biên dịch như sau:
"Tên 'port' không tồn tại trong ngữ cảnh hiện hành", tức là bạn định dùng một object tên là 'port', mà trình biên dịch không biết nó là loại object gì, khai báo ở đâu, khởi tạo ở đâu.

Cú pháp của foreach được viết đúng, nghĩa là với mỗi phần tử của mảng ports[] (có được từ việc gọi hàm SerialPort.GetPortNames()) thì gán nó cho biến port, và dùng biến này để thêm phần tử vào combo box cmbComSelect. Theo tôi, vấn đề nằm ở chỗ port được khai báo trong hàm fclsRS232Tester(), và được dùng trong một số hàm khác. Đây chỉ là phỏng đoán của tôi, vì tôi không dùng C# (tôi từng viết code Java cách đây khoảng 10 năm, bây giờ chỉ còn nhớ một vài khái niệm trong OOP thôi).

Thân,

baybalinh 26-04-2008 12:47 AM

Bác làm ơn giải thích rõ hơn cho em được không ạ. Tại cái này là vd đầu tiên em mò tới C# cũng như vộ visual std 2005. :p
Em thấy biến port chỉ có trong hàm foreach thôi đúng không bác. Em đâu thấy biến port trong hàm nào khác nữa đâu.
Với lại khi báo lỗi, em thấy nó có gạch chân mấy hàm port.Open, port.Close v.v.... nên e nghĩ k biết có fải lõi ở mấy hàm này k

namqn 27-04-2008 07:55 PM

Trích:

Nguyên văn bởi baybalinh (Post 15800)
Bác làm ơn giải thích rõ hơn cho em được không ạ. Tại cái này là vd đầu tiên em mò tới C# cũng như vộ visual std 2005. :p
Em thấy biến port chỉ có trong hàm foreach thôi đúng không bác. Em đâu thấy biến port trong hàm nào khác nữa đâu.
Với lại khi báo lỗi, em thấy nó có gạch chân mấy hàm port.Open, port.Close v.v.... nên e nghĩ k biết có fải lõi ở mấy hàm này k

Khi sử dụng các method port.Open(), port.Close(), port phải là một object với các method đó đã được khai báo. Như tôi đã nói, port được khai báo trong hàm fclsRS232Tester() như một biến string (trong câu lệnh foreach), nhưng trong các hàm khác thì lại dùng port như một loại object nào đó, với các method Open(), Close() đã được hiện thực.

Nếu bạn chưa từng học về OOP (lập trình hướng đối tượng) thì nên tìm đọc các tài liệu giới thiệu về nó. Nếu bạn không có được nền tảng về nó thì e rằng không ai có thể giải thích được cho bạn, giống như bạn cố gắng giải thích về tích phân cho học sinh cấp hai vậy.

Thân,

baybalinh 27-04-2008 09:27 PM

Hix chắc em nghe lời bác. Tại có mấy đàn anh khuyên em học lập trình qua các ví dụ, như thế nhanh hơn. Nhưng xem chừng thế này k ổn. Hi mấy bữa nay làm fiền bác nhiều mà k giải quyết được gì, áy náy quá :D


Múi giờ GMT. Hiện tại là 12:57 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam