Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
614,5 KB
Nội dung
ĐAMH :Tìm hiểu truyền thông nối tiếp 1 MỤC LỤC Trang Lời nói đầu 2 Chương 1 ỨNG DỤNG VISUAL BASIC TRONG TRUYỀN THÔNG NỐI TIẾP 3 1. Đặt vấn đề 3 2. Các đặc tính của MSCOMM 3 3. Truyền nhận dữ liệu theo kiểu text và kiểu binary trong VB 8 4. Truyền nhận dữ liệu theo phương pháp hỏi vòng và dùng ngắt 9 Chương 2 PLC VÀ TRUYỀN THÔNG NỐI TIẾP 13 1. Giới thiệu PLC 13 2. Truyền thông nối tiếp trong PLC 14 Chương 3 CHƯƠNG TRÌNH ỨNG DỤNG 18 1. Giao diện và chương trình VB 18 2. Giải thuật và chương trình PLC 22 Hướng phát triển của đề tài 35 Tài liệu tham khảo 35 ĐAMH :Tìm hiểu truyền thông nối tiếp 2 Lời nói đầu Như chúng ta đã biết ,PLC có rất nhiều ứng dụng trong các hệthống điều khiển hiện nay.Các đối tương mà PLC điều khiển được rất đa dạng từ máy bơm, máy cắt, máy khoan, lò nhiệt . cho đến những hệthống phức tạp như là băng tải, hệthống chuyển mạch tự động(ATS), thang máy, dây chuyền sản xuất Nó có thể điều khiển theo các qui luật khác nhau tùy thuộc vào đối tượng của nó. Nhưng trong đồ án này,ta không đi sâu vào việc sử dụng PLC điều khiển như thế nào mà tìm hiểu về giao thức truyền thông của PLC thông qua cổng giao tiếp của PLC S7-200.Thêm vào đó đồ án này sẽ chỉ ra cách sử dụng ngôn ngữ Visual Basic (VB) lập trình truy xuất đến cổng nối tiếp RS232 của máy tính PC. Nội dung của đồ án này sẽ là tìm hiểu cách thức truyền dữ liệu qua lại giữa máy tính PC và PLC S7-200 và hiển thị thời gian thực của PLC lên giao diện VB. Để làm được đồ án này em đã nhận được rất nhiều sự giúp đỡ của các thầy cô giáo bộ môn. Vì thế em xin gửi lời cảm ơn chân thành đến thầy Phan Nguyễn Phục Quốc đã chỉ dẫn và giúp đỡ em rất nhiều trong quá trình thực hiện đồ án. Em cũng xin gửi lời cám ơn chân thành đến tất cả các thầy cô trong bộ môn Điều khiển tự động ,những người đã truyền đạt cho em những kiến thức vô cùng quí báu trong thời gian làm đồ án cũng như trong suốt những năm học đã qua. Sau cùng em cũng cần phải nói rằng do đây là lần đầu tiên làm đồ án và cũng có sự hạn chế về thời gian nên chắc chắn đồ án khong thể tránh được những thiéu sót nhất định. Em rất mong nhận được sự góp ý của thầy Quốc , các thầy cô giáo bộ môn và những ai có đọc đến đồ án này. Em xin chân thành cám ơn. TPHCM , ngày 21 tháng 12 năm 2006 Sinh viên TRẦN VĂN CÔNG ĐAMH :Tìm hiểu truyền thông nối tiếp 3 Chương I: Ứng dụng Visual basic trong truyền thông nối tiếp 1. ĐẶT VẤN ĐỀ Ghép nối qua cổng nối tiếp RS-232 là một trong những kỹ thuật được sử dụng rộng rãi nhất để ghép nối các thiết bị ngoại vi với máy tính.Qua cổng nối tiếp có thể ghép nối chuột, môđem,thậm chí cả máy in(chẳng hạn lại máy in Apple), bộ biến đổi A/D , các thiết bị đo lường v.v…Số lượng và chủng loại các thiết bị ngoại vi ghép nối qua cổng nối tiếp đứng hàng đầu trong số các khả năng ghép nối máy tính .Cách ghép nối này sử dụng phương pháp truyền thông theo kiểu nối tiếp, trong đó ở mỗi thời điểm chỉ có một bit được gửi dọc theo đường dẫn.Đặc điểm này khác với phương pháp truyền thông theo kiểu song song, trong đó nhiều bit được gửi điđồng thời.Ưu điểm chính của kiểu truyền nối tiếp so với truyền song song là một đường dẫn được sử dụng để truyền còn một đường dẫn khác dùng để nhận. Muốn lập trình truy xuất cổng nối tiếp RS-232 của máy tính PC ta có thể sử dụng rất nhiều ngôn ngữ như là Pascal,C,Visual Basic,Visual C++,Delphi…Trong đồ án này ta sẽ tìm hiểu cách truy xuất cổng nối tiếp RS-232 bằng ngôn ngữ Visual Basic(VB) Bình thường khi chạy phần mềm VB ta chỉ thấy một số thành phần quen thuộc trên thanh công cụ (toolbar) nhưngVB cho phép nhiều thành phần khác có thể bổ sung thêm vào.Khi muốn thực hiện truy xuất cổng Com bằng VB ta phải bổ xung thêm thành phần điều khiển truyền thông Microsoft Comm thì mới có thể truyền nhận dữ liệu qua cổng nối tiếp.Muốn cài trình truyền thông vào thanh công cụ ta vào project -components- controls chọn Microsoft comm control 6.0,biểu tượng hình chiếc điện thoại sẽ được hiện lên trên thanh công cụ.Sau đó ta đưa đối tượng này vào form của chương trình cũng như những đối tượng giao diện khác trong thanh công cụ.Thành phần Comm khi mới đưa vào form thường được gán tên là Mscomm1 cho cổng com1 và ta có thể sửa tên hay thay đổi cổng com tùy ý. 2. CÁC ĐẶC TÍNH CỦA MSCOMM Các tính chất của MSComm được sắp xếp theo chức năng: a. Thiết lập thông số cho cổng + CommPort: dạng object.CommPort = value. Value là chỉ số của cổng Com có giá trị từ 1 ‐> 16 và mặc định có giá trị =1. Cần phải thiết lập thông số này trước khi mở cổng. Sẽ có lỗi error 68 (Device unavailable) nếu như không mở được cổng này. ĐAMH :Tìm hiểu truyền thông nối tiếp 4 + InBuferSize: thiết lập hoặc trả lại kích thước của bộ đệm nhận, tính = byte. Mặc định là 1024 byte.Không được nhầm lẫn với đặc tính InBufferCount là số byte đang chờ trong bộ đệm nhận. + InputLen : object.InputLen [ = value ] thiết lập hoặc trả lại số byte mỗi lần thuộc tính Input đọc trong bộ đệm nhận. Mặc định giá trị Value=0 tức là thuộc tính Input sẽ đọc hết nội dung của bộ đệm nhận khi thuộc tính này được gọi. Nếu số kí tự trong bộ đệm nhận không = InputLen thì thuộc tính Input sẽ trả lại kí tự rỗng “”. Ví thế cần phải chọn cách kiểm tra InBufferCount để chắc chắn số kí tự yêu cầu đã có đủ trước khi dùng lệnh .Input. Tính chất này rất là có ích khi đọc dữ liệu một máy mà dữ liệu ra được định dạng bằng các khối có kích thước cố định. + InputMode: object.InputMode [ = value ] . Value = 0 hay = comInputModeText dữ liệu nhận được dạng văn bản kiểu kí tự theo chuẩn ANSI. Dữ liệu nhận được sẽ là một sâu. Value=1 hay = comInputModeBinary dùng nhận mọi kiểu dữ liệu như kí tự điều khiển nhúng, kí tự NULL, Giá trị nhận được từ Input sẽ là một mảng kiểu Byte. + NullDiscard: object.NullDiscard [ = value ] tính chất này quyết định kí tự trống có được truyền từ cổng đến bộ đệm nhận hay không. Nếu value= True kí tự này không được truyền. value = false kí tự trống sẽ được truyền. Kí tự trống được định nghía theo chuẩn ASCII là kí tự 0 – chr$(0). + OutBuferSize: giống như InBuferSize, mặc định là 512. + ParityReplace: thiết lập và trả lại kí tự thay thế kí tự không đúng trong lỗi giống nhau. + PortOpen: thiết lập và trả lại tính trạng của cổng(đóng hoặc mở). object.PortOpen [ = value ]. value = true cổng mở. value =false cổng đóngvà xóa toàn bộ dữ liệu trong bộ đệm nhận và truyền. Cần phải thiết lập thuộc tính CommPort đúng với tên của cổng trước khi mở cổng giao tiếp. Thêm vào đó, cổng giao tiếp của thiết bị của bạn phải hỗ trợ giá trị trong thuộc tính Setting thì thiết bị của bạn mới hoạt động đúng, còn không thì nó sẽ hoạt động rất dở hơi nếu không nói là nó chạy không tốt. Đường DTR và RTS luôn giữ lại trạng thái của cổng. + RthresHold: object.Rthreshold [ = value ] value kiểu số nguyên. Thiết lập số kí tự nhận được trước khi gây lên sự kiện comEvReceive. Mặc định = 0 tức là không có sự kiện OnComm khi nhận được dữ liệu. Thiết lập = 1 tức là sự kiện OnComm xảy ra khi bất kì kí tự nào được chuyển đến bộ đệm nhận. + Settings: object.Settings [ = value ] thiết lập hoặc trả lại các thông số tần số baud, bít dữ liệu, bít chẵn lẻ, bít stop. Nếu Value không có giá trị khi mở sẽ gây ra lỗi 380 (Invalid property value). Value có dạng "BBBB,P,D,S". Trong đó, BBBB là tốc độ Baud, P : thiết lập bít đồng bộ, D: số bít dữ liệu, S: số bít stop.Mặc định của nó là:"9600,N,8,1" Sau đây là một số tần số bus 110,300,600,1200,2400,4800,9600( mặc định), 1400,19200,28800,38400,56000,115200,128000,256000. ĐAMH :Tìm hiểu truyền thông nối tiếp 5 Các giá trị của P: E( even), M: mark, N: none( mặc định), O: old, S: Space. D: có giá trị từ 4-> 8( mặc định). S: số bít stop có giá trị 1, 1.5, 2; + SThreshold: thiết lập vàvà trả lại số kí tự nhỏ nhất được cho phép trong bộ đệm gửi để xảy ra sự kiện OnComm = comEvSend . Theo mặc định giá trị này = 0 tức là khi truyền sẽ không gây ra sự kiện OnComm. Nếu thiết lập thông số này =1 thì sự kiện OnComm xảy ra khi bộ đệm truyền rỗng. Sự kiện OnComm = comEvSend chỉ xảy ra khi mà số kí tự trong bộ đệm truyền nhỏ hơn hoặc = Sthreshold. Nếu số kí tự trong bộ đệm này luôn lớn hơn Sthreshold thì sự kiện này không thể xảy ra. b. Truyền nhận dữ liệu + CommEvent: trả lại phần lớn sự kiện giao tiếp hoặc có lỗi. CommEvent xảy ra khi có lỗi hoặc khi xảy ra sự kiện nào đó. Sau đây là một số hằng số lỗi: Sự kiện Giá trị Miêu tả sự kiện comEventBreak 1001 Xảy ra khi nhận được một tín hiệu Break. comEventFrame 1004 Lỗi hệ thống. Phần cứng phát hiện ra một lỗi hệthống comEventOverrun 1006 Xảy ra khi cổng tự tràn( Overrun). Một kí tự không được đọc từ phần cứng trước khi kí tự tiếp theo tới và do đó kí tự này bị mất. comEventRxOver 1008 Xảy ra khi bộ đệm nhận bị tràn. Không có đủ chỗ cho dữ liệu trong bộ đệm nhận. comEventRxParity 1009 Lỗi Parity. Phần cứng phát hiện ra một lỗi Parity. comEventTxFull 1010 xảy ra khi bộ đệm truyền bị đầy. Bộ đệm truyền bị đầy trong khi ghi dữ liệu lớn vào bộ đệm Một số sự kiện : Sự kiện Giá trị Miêu tả sự kiện comEvSend 1 Xảy ra khi số kí tự trong bộ đệm truyền nhỏ hơn giá trị SthresHold(kí tự đã được gửi. comEvReceive 2 Xảy ra khi bộ đệm nhận được số kí tự bằng giá trị RthresHold. Sự kiện này được tạo ra liên tục cho tới khi dùng thuộc tính Input để lấy hết dữ liệu từ trong bộ đệm nhận. ĐAMH :Tìm hiểu truyền thông nối tiếp 6 RcomEvCTS 3 Xảy ra khi có thay đổi trong đường CTS( Clear To Send) comEvDSR 4 Xảy ra khi thay đổi trong đường DSR( Data Set Ready). Sự kiện này chỉ xảy ra khi đường DSR thay đổi từ mức cao sang thấp comEvCD 5 Xảy ra khi có thay đổi trong đường CD( Carrier Detect) comEvRing 6 Phát hiện chuông (Ring).Một số UART không hỗ trợ sự kiện này. comEvEOF 7 Xảy ra khi nhận được kí tự kết thúc file ( kí tự 26 trong bảng mã ASCII) + EOFEnable : object.EOFEnable [ = value ] quyết định các hành động nếu MSComm tìm thấy kí tự kết thúc file. Nếu value=true khi tìm thấy kí tự kết thúc file thì sẽ gây lên sự kiện comEvEOF trong OnCommEvent. Nếu value= false thì sẽ không gây lên sự kiện này. + InBufferCount: trả lại số kí tự đang có trong bộ đệm nhận.Có thể xoá bộ đệm nhận bằng cách đặt thuộc tính này =0 . Không nhầm với thuộc tính InBufferSize là tổng kích thước của bộ đệm nhận. + Input: nhận và xoá dữ liệu trong bộ đệm nhận. Nếu InputMode là comInputModeText thì giá trị trả về sẽ là một xâu tức có kiểu String , dữ liệu dạng text trong một biến kiểu Variant. Nếu InputMode = comInputModeBinary thì thuộc tính này sẽ trả lại dữ liệu dạng nhị phân dưới dạng một mảng kiểu byte trong một biến Variant.Ta sẽ xét kĩ hơn về thuộc tính này trong phần sau. + OutBufferCount: trả lại số kí tự trong bộ đệm truyền. + Output: ghi dữ liệu vào bộ đệm truyền. có thể truyền kiểu text hoặc kiểu nhị phân. Nếu truyền bằng kiểu text thì cho một biến Variant = kiểu String, nếu truyền kiểu nhị phân thì cho Output= variant = một mảng kiểu Byte.Thuộc tính này sẽ được xét kĩ hơn ở phần sau. c. Một số đặc tính khác: + Break : thiết lập hoặc xoá tín hiệu. object.Break [ = value] value = true để thiết lập hoặc false để xóa. Khi set value= true thì thông số Break này sẽ gửi một tín hiệu break. Tín hiệu break trì hoàn việc truyền dữ liệu và đưa đường truyền vào trạng thái break tới khi mà value = false. +CDTimeout : Đặc tính này đặt và trả lại giá trị cực đại của thời gian (tính bằng mili giây).Đây là khoảng thời gian điều khiển đợi tín hiệu phát hiện được tín hiệu mang trước một timeout.Đặc tính này chỉ ra thời gian vượt quá bằng việc đặt thông ĐAMH :Tìm hiểu truyền thông nối tiếp 7 số đặc tính CommEvent thành CDTO ( Carrier Detect Timeout Error) và phát sinh sự kiện OnComm.Cú Pháp của câu lệnh là MSComm.CDTimeout[=miliseconds&] + CDHolding: quyết định xem sự truyền này đến đâu bằng cách truy vấn đường CD( Carrier Detect). Carrier Detect là tín hiệu gửi từ modem tới máy tính kết nối với nó thống báo rằng nó đang online. Nếu giá trị = False và thời gian đợi tín hiệu CD trôi qua,điều khiển truyền thông đặt đặc tính CommEvent thành CDTO ( Carrier Detect Timeout Error) và phát sinh sự kiện Oncomm + CTSHolding: quyết định khi nào ta gửi dữ liệu bằng cách truy vấn trạng thái đường Clear To Send (CTS). Thông thường tín hiệu CTS được gửi từ modem tới máy tính kết nối với nó để báo rằng đang quá trình truyền dữ liệu. Thuộc tính Readonly chỉ xuất hiện khi chạy chương trình. Đường Clear To Send dùng trong RTS/CTS (Request To Send/Clear To Send) bắt tay phần cứng. CTSHolding cho ta một cách để tự tay dò đường Clear To Send nếu cần biết trạng thái của nó. + DSRHolding: biết trạng thái của đường Data Set Ready (DSR). Tín hiệu Data SetReady truyền từ modem tới máy tính nối với nó để thông báo rằng modem đã sẵn sàng hoạt động. Nếu như thông số được đặt là True thì dường dẫn DSR ở mức cao (High), nếu không thì là thấp (Low) .Cú pháp của câu lệnh như sau: Mscomm.DSRholding [=settings] + DTREnable: tính chất này quyết định khi nào cho phép đường Data Terminal Ready (DTR) trong truyền thông. Tín hiệu DTR gửi từ máy tính tới modem để báo rằng máy tính sẵn sàng là nơi nhận dữ liệu. Khi DTREnable = true thì đường Data Terminal Ready set lên cao khi cổng mở, và thấp khi cổng đóng. Nếu DTREnable = false thì đường đó luôn mức thấp. Trong phần lớn trường hợp set đường Data Terminal Ready thành thấp để hang up telephone. + Handshaking : Đặc tính này cho phép thiết lập và trả lại giao thức băt tay phần cứng.object.Handshaking [ = value ]. Các giá trị của value: comNone 0 (Mặc định) Không bắt tay comXOnXOff 1 Bắt tay XON/XOFF comRTS 2 Bắt tay RTS/CTS (Request To Send/Clear To Send) comRTSXOnXOff 3 Dùng cả bắt tay Request To Send and XON/XOFF Handshaking chỉ là giao thức truyền thông nội tại quyết định bởi dữ liệu nào được truyền từ cổng phần cứng tới bộ đệm nhận. Khi kí tự của dữ liệu tới cổng nối tiếp, thiết bị truyền thông sẽ chuyển nó vào trong bộ đệm nhận và chương trình ta viết có thể đọc chúng. Nếu không có bộ đệm dữ liệu hoặc chương trình của ta phải đọc kí tự trực tiếp từ phần cứng , thì rất có thể mất dữ liệu bởi vì kí tự từ phần cứng đến rất nhanh. Giao thức Handshaking đảm bảo dữ liệu không bị mất, khi dữ liệu đến ĐAMH :Tìm hiểu truyền thông nối tiếp 8 cổng quá nhanh thì thiết bị truyền thông sẽ chuyển dữ liệu vào trong bộ đệm nhận. + RTSEnable: quyết định khi nào cho phép đường Request To Send (RTS).Thí dụ như tín hiệu RTS yêu cầu sự cho phép truyền dữ liệu từ máy tính tới modem. Khi RTSEnable = true thì đường RTS mức cao ( trạng thái cho phép), Ngược lại xác lập bằng False để đưa đường RTS xuống mức không tích cực.RTS dùng trong RTS/CTS hardware handshaking. RTSEnable cho phép dò đường RTS khi cần biết tình trạng của đường này. Các tính chất trên không có lúc thiết kế giao diện mà chỉ có lúc chạy chương trình ( dùng trong viết code). +DSRTimeout : Đặt và trả lại số mili giây để chờ đợi tín hiệu DSR trước khi sự kiện Oncomm xuất hiện.Cú pháp của câu lệnh là: MSComm.DSRTimeout [=miliseconds&] +CTSTimeout : Đặt và trả lại số mili giây để chờ đợi tín hiệu CTS trước khi đặt đặc tính CommEvent thành CTSTO và phát sinh sự kiện Oncomm xuất hiện.Cú pháp của câu lệnh là: MSComm.CTSTimeout [=miliseconds&] 3. TRUYỀN NHẬN DỮ LIỆU KIỂU TEXT VÀ NHỊ PHÂN TRONG VB VB cho phép truyền dữ liệu dạng Text hay là dạng Binary .Thuộc tính InputMode quyết định điều khiển MSComm dùng dạng nào. a.Kiểu văn bản( Text): Với thuộc tính InputMode = comInputModeText thì MSComm sẽ gửi và nhận dữ liệu dạng xâu theo chuẩn ANSI ( không phải chuẩn ASCII). Để gửi một xâu ra port,cần phải gán thuộc tính Output của MSComm là một xâu.Ví dụ: Dim SampleText as String ‘ví dụ muốn truyền một xâu “ABC” SampleText = “ABC” ‘ gửi kí tự này ra cổng MSComm1.Output = SampleText MSComm gửi một mã ANSI 8 bít cho mỗi kí tự trong xâu. Để đọc một xâu từ cổng,cần đặt một xâu = thuộc tính Input của MSComm.Thí dụ muốn đọc dữ liệu từ cổngvà ghi vào một biến SampleText có kiểu String: Dim SampleText as String SampleText = MSComm1.Input ‘ khi đó SampleText sẽ là dữ liệu đọc được MSComm lưu trữ mỗi mã ANSI 8 bít như một kí tự văn bản. Thực tế giá trị truyền cho MSComm1.Output phải là kiểu Variant. Ở đây thuộc ĐAMH :Tìm hiểu truyền thông nối tiếp 9 tính Output chấp nhận kiểu một biến Variant chứa một xâu kí tự và MSComm sẽ đọc xâu kí tự và gán tự động vào một biến Variant vì Variant chính là kiểu của Output. Nói cách khác ở đây có sự chuyển kiểu ngầm định giữa kiểu String sang Variant. b .Kiểu nhị phân( Binary): Để truyền dữ liệu dưới dạng nhị phân,cần thiết lập thuộc tính InputMode của MSComm thành comInputModeBinary. VB cung cấp một kiểu dữ liệu kiểu Byte để lưu trữ dữ liệu nhị phân. Các byte được ghi và đọc từ cổng nối tiếp được lưu trữ trong một biến Variant( nội dung của nó chứa một mảng mà các phần tử của mảng có kiểu Byte). Thậm chí nếu chí đọc, ghi duy nhất có 1 byte thì dữ liệu này cũng phải đặt trong một mảng byte, chứ không đuợc lưu trữ trong một biến kiểu byte thông thường. Để ghi một mảng kiểu byte ra cổng nối tiếp gồm hai bước: + Bước 1: Lưu trữ mảng kiểu byte vào một biến variant + Bước 2: gửi dữ liệu đi bằng cách thiết lập thông số Output của MSComm bằng biến Variant đó. Dim BytesToSend(0 to 1) as Byte ‘ khai báo một mảng 2 phần tử Dim Buffer as Variant ‘ lưu trữ dữ liệu vào mảng kiểu byte ở trên BytesToSend(0) = &H4A BytesToSend(1) = &H23 ‘ cho vào một biến Variant Buffer = BytesToSend() ‘ghi vào cổng nối tiếp MSComm1.Output = Buffer Để đọc các byte tại cổng nối tiếp, cũng làm tương tự như trên, đọc vào một biến Variant sau đó cho một mảng = biến đó. Dim BytesReceived() as Byte ‘ khai báo một mảng động Dim Buffer as Variant ‘ khai báo biến variant ‘đọc dữ liệu từ cổng nối tiếp Buffer = MSComm1.Input ‘ ghi dữ liệu đọc được vào mảng động BytesReceived() = Buffer Lưu ý là phải khai báo một mảng byte động. 4. TRUYỀN NHẬN DỮ LIỆU THEO PHƯƠNG PHÁP HỎI VÒNG VÀ DÙNG NGẮT a. Phương pháp hỏi vòng + Khi muốn gửi dữ liệu: ĐAMH :Tìm hiểu truyền thông nối tiếp 10 Khi gửi một khối nhỏ dữ liệu, cần phải thiết lập thuộc tính OutBuferSize phải lớn hơn hoặc bằng số lượng lớn nhất các byte mà các bạn cần chuyển trong một lần. Đối với việc truyền dữ liệu có tính lâu dài về thời gian dùng OutBufferCount để chắc chắn rằng bộ đệm không bị tràn. Khi có nhiều dữ liệu cần gửi để tránh cho tràn bộ đệm , ta nên đọc giá trị của OutBufferCount và so sánh với giá trị của OutBufferCount để kiểm tra xem bộ đệm còn bao nhiêu sau khi gửi dữ liệu đầu tiên. Sau đó làm đầy bộ đệm bằng cách ghi số byte đó vào bộ đệm thì bộ đệm sẽ không bị tràn. + Khi muốn nhận dữ liệu :Kỹ thuật này qui định là sẽ nhận dữ liệu bằng cách kiểm tra liên tục số kí tự nhận được trong bộ đệm nhận ( InBuferCount ).Khi bộ đếm chỉ rằng một số các kí tự mà ứng dụng cần đã đến( như muốn lấy 5 byte chẳng hạn) thì ứng dụng sẽ đọc dữ liệu với thuộc tính Input của MSComm. Thuộc tính InBuferSize phải đủ độ rộng để cho lượng lớn nhất dữ liệu có thể tới mà không bị mất trước khi MSComm có thể đọc chúng. Nếu dữ liệu đến bằng các block với kích thước cố định thì cần thiết lập thuộc tính InBufferSize bằng bội số của kích thước 1 block. Trong VB ta có thể ứng dụng timer để đọc cổng.Ví dụ ta có thể dung một timer để đọc cổng 1 lần/1 giây. b. Phương pháp dùng ngắt Phương pháp dùng ngắt để truyền nhận dữ liệu chính là sử dụng chương trình con OnComm của MSComm. Sự kiện OnComm được phát sinh bất cứ khi nào giá trị của đặc tính CommEvent thay đổi.Sự kiện : Private Sub MSComm_OnComm() Đặc tính CommEvent chứa mã số lỗi hay sự kiện phát sinh bởi sụ kiện OnComm.Các lỗi và sự kiên bao gồm: Lỗi: Case ComEventBreak ‘Nhận Break Case ComEventFrame ‘Sai frame Case ComEventOverrun ‘Mất dữ liệu Case ComEventRXOver ‘Đệm thu tràn Case ComEventRXParity ‘Sai Parity Case ComEventTXFull ‘Đệm phát đầy Case ComEventDCB ‘Sai khi đọc DCB Sự kiện : Case ComEvCD ‘Đường CD thay đổi Case ComEvCTS ‘CTS thay đổi Case ComEvDSR ‘DSR thay đổi từ 1 xuống 0