PDA

View Full Version : Tài liệu giao tiếp RS232 bằng C#


baybalinh
14-03-2008, 01:51 PM
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
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
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
Em có làm 1 ví dụ từ nguồn http://www.codeproject.com/KB/system/rs232ThreadSafe.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
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
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
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