PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-01-2007, 11:34 PM   #1
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Giao tiếp RS232 trên PC bằng Visual Basic.

Chào các bạn.

Mình mở luồng này để hướng dẫn các bạn lập trình giao tiếp RS232 bằng phần mềm Visual Basic 6.0 của Microsoft.

Do site tailieuvietnam.net đang có vấn đề về nhỏ nên mình không upload file lên đó được. Tuy nhiên mình vẫn upload chương trình viết bằng VB để các bạn tham khảo.

Giao diện của chương trình như sau:



Hình 1: Giao diện chương trình đơn giản thứ 1 dùng VB.

Chương trình này là một ví dụ nhỏ bạn truyền một loạt byte rùi nhận về (mình nối 2 chân 2 và 3 để test chương trình). Các bạn có thể ứng dụng nó trong mạng truyền thông dùng các giao thức truyền khác nhau. Trong ví dụ của mình truyền đi 11 byte gồm 1 byte start, 8 byte dữ liệu, 1 byte CRC, 1 byte stop.

Chúc các bạn thành công.
File Kèm Theo
File Type: zip VB_RS232.zip (7.8 KB, 13607 lần tải)
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-01-2007, 03:34 PM   #2
odi
Nhập môn đệ tử
 
odi's Avatar
 
Tham gia ngày: Jan 2007
Bài gửi: 1
:
Smile

Bạn có thể nói rõ hơn một chút về cách tính CRC trong VB cho tớ được không? Thanks.
odi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-01-2007, 10:48 AM   #3
bta
Nhập môn đệ tử
 
bta's Avatar
 
Tham gia ngày: Dec 2006
Bài gửi: 3
:
Smile

Luồng mới hay wa. Tớ muốn hỏi về truyền, nhận theo khung truyền dùng giao thức Modbus? Tức là cần tính mã kiểm lỗi của khung nhận được và so sánh mã kiểm lỗi của khung truyền. Nếu giống thì truyền tiếp, còn ko thì gửi yêu cầu truyền lại. Thanks.
bta vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-01-2007, 01:26 AM   #4
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Trích:
Nguyên văn bởi odi View Post
Bạn có thể nói rõ hơn một chút về cách tính CRC trong VB cho tớ được không? Thanks.
Chào bạn.

Rất cảm ơn sự quan tâm của bạn đến chủ đề này. Việc lập trình truyền nhận theo một giao thức nhất định rất có ích cho các dự án về Mạng truyền thông công nghiệp hay tự động hoá toà nhà,...

Tuy nhiên, mình chưa lập trình xử lý kiểm soát lỗi CRC trong VB. Mình sẽ xem xét help MSDN rùi trao đổi với các bạn sau. Bạn nào nghiên cứu trong VB rùi xin post lên để cho mọi người cùng tham khảo học tập.

Mình xin đưa ra một vài thông tin về mã kiểm lỗi CRC:

Đầu tiên các bạn chọn một đa thức phát G được qui ước dưới dạng nhị phân tức các hệ số của nó chỉ có giá tri 1 hoặc 0 tương ứng với các chữ số trong một dãy bit.

Ví dụ:
Dạng đa thức: G = x^7 + x^6 + x^5 + (0x^4 + 0*x^3) + x^2 + (0*x^1) + 1
Dạng nhị phân: G = 1 1 1 0 0 1 0 1

Nguyên tắc cơ bản của phương pháp mã hoá CRC:
Trích:
  • Giả sử đa thức G có bậc n, ví dụ x^3 + x + 1 tương ứng với dãy bit {1011}. Dãy bit mang thông tin nguồn I được thêm vào n bit 0 và coi như một đa thức nhị phân P. Ví dụ thông tin nguồn là {110101} tgù sau khi thêm 3 bit 0, ta có dãy bit {110101000} tương ứng với đa thức P = x^8 + x^7 + x^5 + x^3.
  • Đa thức P được chia cho đa thức G dựa vào các qui tắc đơn giản của phép trừ không có nhớ (chính là phép XOR từng bit) (trừ 2 số bằng nhau kết quả = 0, trừ 2 số khác nhau kết quả = 1).
  • Không cần quan tâm tới kết quả của phép chia, phần dư R của phép chia được thay thế vào chỗ của n chữ số 0 bổ sung trong P, tức là ta có D = P + R. Theo tính chất của phép chia đa thức nhị phân, nếu D-R chi hết cho G thì D = P + R cũng vậy. D chính là dãy bit được gửi đi thay cho I.
  • Giả sử dãy bit nhận được là D' không chia hết cho G thì tức là D khác với D', ta có thể khẳng định được bức điện chắc chắn bị lỗi. Ngược lại, nếu D' chi hết cho G thì xác xuất rất cao là bức điện nhận được không có lỗi. Ta nói "xác suất cao", bởi mỗi bit trong thông tin nguồn tham gia nhiều vòng (cyclic) vào tính toán thông tin bổ trợ nên khả năng "dữ kiện" sai mà kết quả đúng" là rất it.
(Trích Pgs. Ts. Hoàng Minh Sơn - "Mạng truyền thông công nghiệp" NXB KHKT 2006)

Dựa trên nguyên tắc này các bạn có thể tạo ra ý tưởng cho việc lập trình của mình đó.

Chúc các bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-01-2007, 03:13 AM   #5
bta
Nhập môn đệ tử
 
bta's Avatar
 
Tham gia ngày: Dec 2006
Bài gửi: 3
:
Smile Crc

Theo như một bài tớ được bít thì mã kiểm lỗi CRC có thể dùng bảng để tra giá trị thay vì phải tính toán. Bảng CRC thì có rất nhiều trên mạng. Đây là một ví dụ về cách dùng bảng CRC trong VB. Bạn nào có ý kiến hay thì đưa lên nhé.Thanks.
File Kèm Theo
File Type: rar MbusTelemecanique.rar (3.9 KB, 1301 lần tải)
bta vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-04-2007, 10:03 PM   #6
signin
Nhập môn đệ tử
 
Tham gia ngày: Apr 2007
Bài gửi: 6
:
Smile Crc

Gởi Anh Hải Bắc!

Em Muốn dùng phương pháp kiểm tra lỗi CRC, Em có hiểu phương pháp này nhưng thực sự không biết cách chọn đa thức sinh, Anh có thể chỉ không? em muốn dùng 1 byte cho CRC
signin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2007, 12:08 PM   #7
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Chào em.

Đa thức sinh em có thể chọn tùy ý mà em. Quan trọng là 2 bên truyền và nhận phải cùng kiểu mã hóa CRC để việc kiểm lỗi là đúng em ạ.

Em dùng CRC 1 byte thì chọn G là đa thức bậc 8.

Chúc em thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2007, 06:37 PM   #8
signin
Nhập môn đệ tử
 
Tham gia ngày: Apr 2007
Bài gửi: 6
:
Smile

Mấy hôm nay Em thi nên không lên mạng được, Cảm ơn Anh Hải Bắc nhiều!
signin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-05-2007, 01:31 AM   #9
seraph
Đệ tử 4 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 62
:
may dai ca! em dang lam do an dieu khien dco buoc co giao tiep may tinh xai VB, co su phu nao lam rui chi giup em voi! Hix, em dang gap lam. co file up len cho em thi cang tot. Xin da ta!!!!
seraph vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-05-2007, 08:09 PM   #10
moihocpic1985
Nhập môn đệ tử
 
Tham gia ngày: Aug 2006
Bài gửi: 9
:
Cac anh co kinh nghiem lam viec voi ca 2 phan mem VB 6 va Visual C++ roi co the chi cho toi biet giua 2 phan mem co diem gi khac nhau, uu nhuoc diem trong dieu khien? Nen hoc phan mem nao de co the dap ung khi di lam ngoai thuc te? Thanks
moihocpic1985 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-07-2007, 05:26 PM   #11
controlufo
Nhập môn đệ tử
 
Tham gia ngày: Apr 2007
Bài gửi: 4
:
1 ứng dụng access cần giúp đỡ 1 đoạn vb giao tiếp rs232

các bạn thân :

cả tháng qua tui theo dõi cái mục này rùi áp dụng vào cái chương trình của tui mà sao giờ này nó vẫn chưa chạy oải wá trời đành phải nhờ các bạn code dùm thui chư mò chắc tới tết nguyên đán wá ...

tui viết code vb trong access ...sử dụng mscomm32.ocx đã đăng ký ổn
cáp từ thiết bị ngoại vi xuất từ com 25 pins vào máy ở com 9pins

các bạn code dùm mình đưa số liệu vào ô "chisocan" trong form "nhap" nhé ..
mình thực sự đắp chiếu .com rùi

sau đây là cái đoạn code dở hơi của mình :

Code:
Option Compare Database 
    Dim inputstring As String

Private Sub chiso_Click()
    
   
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.CommPort = 1
    MSComm1.PortOpen = True
    inputstring = MSComm1.Input
    MSComm1.Handshaking = 3
    Forms!nhap!chisocan = MSComm1.Input
    MSComm1.PortOpen = False
    

End Sub
bạn nào có cái đầu bác học muốn hướng dẫn cho tui xin vui lòng mail hoặc chát google talk và yahoo messenger trực tiếp cho tui qua nick controlufo@yahoo.com controlufo@gmail.com

xin chân thành cám ơn tiger bể đã tài trợ chương trình này hihihihhiiiiii
File Kèm Theo
File Type: rar codedum.rar (227.8 KB, 1894 lần tải)

thay đổi nội dung bởi: ngohaibac, 09-07-2007 lúc 09:23 AM. Lý do: code viết chưa đúng qui cách
controlufo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-07-2007, 05:55 PM   #12
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
thực sự là một chuyên mục rất thú vị của bác ngohaibac
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-07-2007, 09:31 AM   #13
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Chào bạn controlufo.

Chương trình của bạn như thế là hoàn toàn không ổn rùi. Các thông số thiết lập cho MSCOMM thì bạn phải thiết lập ngay từ đầu chứ.

Còn dữ liệu nhận từ RS232 bạn nên viết trong hàm ngắt. Chứ tự nhiên bạn inputstring = MSComm1.Input thì dữ liệu ở đâu mà nhận nhỉ . Với lại setting cho đối tượng mscomm đó cũng không đúng.

Chương trình đơn giản khác bạn xem tại đây:
http://dientuvietnam.net/forums/showthread.php?t=5281

Chúc bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-07-2007, 12:29 PM   #14
controlufo
Nhập môn đệ tử
 
Tham gia ngày: Apr 2007
Bài gửi: 4
:
thua rùi manager ngohaibac ui

tui sưu tầm các hướng dẫn của mr maneger(ngohaibac) đem áp dụng sài không được trong form access
form nhap
texbox vao

tui có gửi file access kèm theo mong manager box """"design"""" lại dùm ....giúp tui đi tui chuyển sang dề tài khác ngâm cứu chứ cái vụ này lấy của tui mất hơn 1 tháng rùi ngohaibac ui...


Code:
Dim x As Variant

Private Sub Form_Load()
On Error Resume Next
With MSComm1
If .PortOpen = True Then .PortOpen = False
.CommPort = 2
.Settings = "9600,N,8,1"
.InBufferSize = 2000
.InputLen = 0
.OutBufferSize = 64
.PortOpen = True
End With
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
MSComm1_OnComm
Timer1.Enabled = True
End Sub

Private Sub MSComm1_OnComm()
With MSComm1
If .InBufferCount >= 1 Then
x = MSComm1.Output
Forms!nhap!vao = x
End If
End With
End Sub


mong hồi âm
xin chân thành cám ơn....chúc công việc vui vẻ
File Kèm Theo
File Type: rar codedum.rar (228.5 KB, 1221 lần tải)

thay đổi nội dung bởi: ngohaibac, 09-07-2007 lúc 04:57 PM.
controlufo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-07-2007, 05:03 PM   #15
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Code:
Forms!nhap!vao = x
là cái gì đó hả bạn?

Nếu là editbox thì phải gán vào thuộc tính text của nó chứ nhỉ ? Bạn xem lại nhé.
Sao bạn k upload của project của bạn lên để mình xem chứ.

Đề nghị viết tất cả code trong tag code cho dễ nhìn nhé.

Chúc bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
forms!nhap!vao = x

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Giao tiếp RS232 trên PC ngohaibac Giao tiếp cổng COM và LPT 188 23-01-2023 02:18 AM
Cho hỏi về giao tiếp RS232 của PIC16F877A enti Giao tiếp cổng COM và LPT 31 25-03-2016 10:14 PM
Giao tiếp RS232 trên PC qua Matlab ngohaibac Giao tiếp cổng COM và LPT 47 18-11-2015 03:51 PM
cần mua bộ thu GPS có giao tiếp RS232 kienvq Tìm mua sản phẩm 15 17-03-2011 11:25 PM
Help! Dùng C để giao tiếp RS232 dandiennang Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 6 15-03-2009 06:41 PM


Múi giờ GMT. Hiện tại là 09:13 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam