1. Trang chủ
  2. » Luận Văn - Báo Cáo

Trải phổ và đa truy nhập trong hệ thống thông tin di động

36 460 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Trải phổ và đa truy nhập trong hệ thống thông tin di động
Người hướng dẫn Thầy Phan Nguyễn Phục Quốc
Trường học Trường Đại học Bách Khoa Thành phố Hồ Chí Minh
Chuyên ngành Hệ thống Thông Tin và Truyền Thông
Thể loại Báo cáo tốt nghiệp
Năm xuất bản 2006
Thành phố TPHCM
Định dạng
Số trang 36
Dung lượng 614,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ĐẶ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ộ

Trang 1

Đ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

Trang 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

Trang 3

Đ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

Trang 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 đóng và 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

Trang 5

Đ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ộ đệmMộ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

Trang 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

Trang 7

Đ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

Trang 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”

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

Trang 9

Đ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

+ 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

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:

Trang 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

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

Trang 11

ĐAMH :Tìm hiểu truyền thông nối tiếp

11

Case ComEvRing ‘RI thay đổi

Case ComEvReceive ‘Số byte đệm thu đạt mức Rthreshold

Case ComEvSend ‘ Số byte đệm phát ít hơn Sthreshold

OutBufferSize thì ứng dụng không thể ghi tất cả dữ liệu vào bộ đệm một lần được, nếu cứ ghi vào thì bộ đệm sẽ bị tràn Ta có thể dùng OnComm để truyền đi một dung lượng lớn dữ liệu một cách có hiệu quả bằng cách luôn luôn phải đảm bảo cho

bộ đệm truyền không bao giơ rỗng hoặc bị tràn

Thuộc tính SThreshold quyết định số kí tự trong bộ đệm gửi sẽ gây ra sự kiện OnComm.Ví dụ

MScommm1.SThreshold = 256

Cách truyền như sau: trong lần truyền đầu tiên dùng thuộc tính Output để điền đầy bộ đệm

MSComm1.Output = DataToSend

Khi số kí tự trong bộ đệm giảm từ (SThreshold +1) xuống SThreshold thì sẽ gây

ra sự kiện comEvSend và nhảy đến chương trình con OnComm Dựa vào sự kiện comEvSend chúng ta lại truyền tiếp dữ liệu, cứ thế một dữ liệu dung lượng lớn sẽ đựoc truyền đi

Ví dụ ta có bộ đệm truyền bằng 1024 byte mà ta cần truyền một file có dung lượng 32k, ứng dụng có thể thiết lập SThreshold =256 Để gửi ta làm như sau: lần đầu tiên ghi ra bộ đệm 1024 byte để làm đầy bộ đệm truyền và cổng bắt đầu gửi dữ liệu đi từng byte theo kiểu truyền từng bít một.Do đó số byte trong bộ đệm sẽ giảm dần Khi trong bộ đệm vẫn còn 256 byte nữa thì sẽ gây ra sự kiện comEvSend và trong chương trình con MSComm ta có thể gửi tiếp một lượng dữ liệu mới = 1024-

256 = 768 byte để làm đầy lại bộ đệm Khi đó quá trình lại diễn ra liên tục đến khi

ta gửi hết file

Nếu tổng dung lượng của thông tin cần gửi nhỏ hơn OutBufferSize thì không cần dùng OnComm trong trường hợp này Ứng dụng có thể ghi trực tiếp dữ liệu vào

bộ đệm nhận.Thiết lập SThreshold = 0 để vô hiệu hoá sự kiện comEvSend và khi đó

sẽ không có sự kiện gửi xẩy ra

+ Khi muốn nhận dữ liệu, OnComm cung cấp một cách đơn giản và hiệu quả để phát hiện khi nào dữ liệu được nhận tại cổng Thuộc tính Rtheshold của MSComm quyết định số kí tự ít nhất được nhận để gây sự kiện OnComm

MSComm1.Rthreshold=1

Khi bộ đệm nhận bao gồm 1 hoặc nhiều kí tự, ứng dụng sẽ nhẩy đến chương trình con OnComm Bảng ngắt có trách nhiệm phát hiện sự kiện ComEvReceive xảy

ra và đọc dữ liệu trong bộ đệm nhận

Trang 12

Case ComEvReceive

ComEvReceive Buffer = MSComm1.Input

Các lỗi khi sử dụng MSComm trình bày trong bảng sau:

Trang 13

ĐAMH :Tìm hiểu truyền thơng nối tiếp

Để có thể thực hiện được một chương trình điều khiển ,tất nhiên PLC phải có tính năng như một máy tính ,nghĩa là phải có một bộ vi xử lí (CPU) ,một hệ điều hành ,một bộ nhớ để lưu chương trình điều khiển ,dữ liệu và tất nhiên là

Thiết bị điều khiển Logic khả trình PLC ( Programmable Logic Control) là loại thiết bị cho phép thực hiện linh hoạt các thuật toán điều khiển số thông qua một ngôn ngữ lập trình ,thay cho việc phải thể hiện thuật toán đó bằng các mạch số Như vậy với chương trình điều trong mình .PLC trở thành bộ điều khiển số nhỏ gọn ,dễ dàng thay đổi thuật toán và đặc biệt dễ dàng trao đổi thông tin với môi trường xung quanh ( Với các PLC khác hoặc với máy tính)

Trang 14

phải có các cổng vào ra để giao tiếp với các đối tượng điều khiển và để trao đổi thông tin với môi trường xung quanh Bên cạnh đó nhằm phục vụ các bài toán điều khiển số ,PLC còn cần phải có thêm những khối chức năng đặc biệt khác như bộ đếm ( Counter),bộ định thời gian ( Timer) ….Và những khối hàm chuyên dụng.

2 TRUYỀN THƠNG NỐI TIẾP TRONG PLC

PLC cĩ một hoặc hai cổng ( port 0 , port 1) dùng để truyền thơng nối tiếp

RS-485 ( CPU 214 chỉ cĩ một cổng là port 0)

Thơng qua cổng nối tiếp cĩ thể ghép S7-200 với các thiết bị khác như S7-200 , S7-300 , PC Muốn sử dụng cổng nối tiếp theo giao thức người dùng ta phải dặt cổng ở chế độ freeport bằng cách đặt nội dung cho SMB30 (port 0) và SMB130 ( port 1) theo bảng dưới đây

Ví dụ muốn truyền thơng nối tiếp chế độ freeport tốc độ baud 9600 , 8 bit dữ liệu , khơng parity ta đưa giá trị 00001001 ( số 9) vào thanh ghi SMB30 ( port 0)

Ở chế độ freeport cĩ thể truyền và nhận data bằng hai lệnh XMT và RCV Dữ liệu truyền lấy từ bảng cĩ địa chỉ đầu ở TABLE , cịn dữ liệu nhận về chứa vào TABLE , chiều dài tối đa 255 byte Byte đầu của bảng cho biết chiều dài khối dữ liệu

Trang 15

ĐAMH :Tìm hiểu truyền thông nối tiếp

9 Truyền xong port 0

23 Nhận xong bản tin ở port 0

24 Nhận xong bản tin ở port 1

25 Nhận kí tự ở port 1

26 Truyền xong port 1 Như đã nói ở trên ta có thể sử dụng các ô nhớ SMB86-SMB94 và SMB186- SMB194 để đặt cấu hình cho việc thu bản tin.Phần dưới đây sẽ trình bày chi tiết về các ô nhơ đặc biệt này

SMB86 SMB186 Đây là byte trạng thái nhận dữ liệu

n: 1 = chức năng nhận kết thúc: người dùng đưa ra lệnh không

thực hiện được r: 1= chức năng nhân kết thúc: lỗi ở thông số đầu vào e: 1= kí tự cuối cùng được nhận

t: 1= chức năng nhận kết thúc: hết thời gian c: 1= chức năng nhận kết thúc : số kí tự lớn nhất đã đạt được p: 1= lỗi parity

Trang 16

SMB87 SMB187 Đây là byte điều khiển việc nhận dữ liệu

en: 0 = chức năng nhận không thể thực hiện 1= chức năng nhận có thể thực hiệnsc: 0= phớt lờ byte SMB88 và SMB188 1=sử dụng giá trị của SMB88 và SMB188 để dò ki tự khởi đầuec: 0=phớt lờ byte SMB89 và SMB189

1= sử dụng giá trị của SMB89 và SMB189 để dò ki tự kết thúc il: 0 = phớt lờ nội dung SMW90 và SMW190

1= sử dụng giá trị của SMW90 và SMW190 để dò xem điều kiện đường truyền rãnh

c/m : 0 = timer là một timer intercharacter 1= timer là một timer message

SMB89 SMB189 kí tự kết thúc

SMW90 SMW190 thời gian đường truyền rãnh(ms)

kí tự đầu tiên sẽ được nhận sau khoảng thời gian nàySMW92 SMW192 giá trị thời gian của timer intercharacter hoặc message(ms).Nếu

khoảng thời gian này đạt đén , chức năng nhận sẽ kết thúc

SMB94 SMB194 số lượng lớn nhất các kí tự ta nhận

∗ Lệnh nhận dữ liệu hỗ trợ một vài điều kiên để bắt đầu nhận:

 Dò đường truyền rãnh: điều kiện đường truyền rãnh được định nghĩa là khoảng thời gian không có dữ liệu trên đường truyền.Việc nhận chỉ có thể bắt đầu khi mà đường giao tiếp rãnh trong số mili giây là giá trị của ô nhớ SMW90 hoặc SMW190.Khi lệnh nhận thực thi nó sẽ kiểm tra điều kiện rãnh này.Nếu bất kì kí tự nào nhận trước khi đạt đến thời gian trong ô nhớ SMW90 hoặc SMW190 thì nó sẽ phớt lờ kí tự này và việc kiểm tra điều kiện đường truyền rãnh được lặp lại từ đầu

 Dò kí tự đầu tiên: kí tự đầu tiên là bất cứ kí tự nào được sử dụng như là kí tự đầu tiên của thông điệp gửi về.Thông điệp chỉ có thể nhận được khi ta nhận được kí tự giống như kí tự trong ô nhớ SMB88 hoặc SMB188.Tất cả những kí tự trước kí tự này đều bị bỏ qua

Trang 17

ĐAMH :Tìm hiểu truyền thông nối tiếp

17

 Kết hợp dò đường truyền rãnh và dò kí tự đầu tiên: ta có thể kết hợp cả hai điều kiện này.Khi lệnh nhận thực thi, chương trình sẽ kiểm tra điều kiện đường truyền rãnh , sau đó sẽ kiểm tra xem kí tự nhận về là gì.Nếu kí tự nhận về không phải là kí

tự trong SMB88 hoặc SMB188 thì việc kiểm tra đường truyền rãnh được lặp lại Ngoài ra còn có một vài điều kiện khác để bắt đầu nhận thông điệp (như điều kiện break…)

∗ Lệnh nhận dữ liệu cũng hổ trợ một vài điều kiện để kết thúc việc nhận:

 Dò kí tự kết thúc:Nếu như ta nhận được một kí tự giống với kí tự có trong ô nhớ SMB89 hoặc SMB189 thì việc nhận sẽ kết thúc

 Timer intercharacter: khoảng thời gian intercharacter là khoảng thời gian được tính từ lúc nhận xong kí tự thứ nhất( bit stop) đến luc nhận được bit stop của kí tự tiếp theo Khoảng thời gian này tính là mili giây và là giá trị của ô nhớ SMW92 hoặc SMW192.Nếu thời gian từ khi nhận được bit stop của kí tự thứ nhất đến khí nhận bit stop của kí trị tiếp theo đạt đến thời gian trong SMW92 (SMW192) thì chức năng nhận sẽ kết thúc

 Timer message: chức năng này sẽ kết thúc một thông điệp vào khoảng thời gian nhất định sau khi bắt đầu nhận dữ liệu.Timer này sẽ bắt đầu ngay khi bắt đàu nhận

dữ liệu.Số mili giây của timer này là giá trị ô nhớ SMW92 hoặc SMW192

 Số kí tự lớn nhất đạt được: số kí tự lớn nhất là giá trị của ô nhớ SMB94 hoặc SMB194.Khi nhận đủ số kí tự này thì chức năng nhận sẽ kết thúc

 Lỗi Parity: chức năng nhận sẽ tự động kết thúc khi phần cứng báo hiệu có lỗi parity trong dữ liệu nhận về.Lỗi parity chỉ có thể khi chức năng parity được lập sẵn trong ô nhơ SMB30 hoặc SMB130( bit 7 và bit 6)

 Người dùng kết thúc:ta có thể cho kết thúc ngay việc nhận khi ta set bit EN trong

ô nhơ SMB87 hoặc SMB187 về 0.Chức năng nhận sẽ kết thúc ngay lập tức

Trang 18

Chương III CHƯƠNG TRÌNH ỨNG DỤNG

Trong chương này , ta sẽ viết một chương trình ứng dụng sử dụng những kiến thức đã biết về Visual Basic và PLC trong truyền thông.Yêu cầu của chương trình này là ghi thời gian của máy tính PC cho PLC và hiển thị thời gian của PLC lên máy tính khi có yêu cầu

Với yêu cầu như vậy, ta sẽ có hai đoạn chương trình: một là của PLC và chương trình còn lại được viết bằng VB.Phần dưới đây sẽ trình bày giải thuật và mã nguồn chương trình

1 GIAO DIỆN VÀ CHƯƠNG TRÌNH VB

Trước khi viết chương trình ta tạo một giao diện như sau bằng VB

Ngày đăng: 22/12/2013, 13:11

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
5. KS. Ngô Quốc Việt , KS Phạm Nguyễn Tuấn Kỳ , KS Nguyễn Tiến , Kỹ thuật lập trình Visual Basic Sách, tạp chí
Tiêu đề: Kỹ thuật lập trình Visual Basic
Tác giả: KS. Ngô Quốc Việt, KS Phạm Nguyễn Tuấn Kỳ, KS Nguyễn Tiến
7. Trang Web www.dientuvietnam.net Link
1. Nguyễn Đức Thành , Đo lường điều khiển bằng máy tính 2. Ngô Diên Tập , Kỹ thuật ghép nối máy tính Khác
6. Trang Web www.siemens.com Khác
8. Trang Web www.diendandientu.com Khác
9. Một vài luận văn tốt nghiệp của các anh chị khóa trên Khác

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w