1. Trang chủ
  2. » Giáo Dục - Đào Tạo

chương 3 chương trình truyền thông bằng ngôn ngữ visual basic 6 0

21 346 2

Đ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

Định dạng
Số trang 21
Dung lượng 0,91 MB

Nội dung

Chương III : CHƯƠNG TRÌNH TRUYỀN THÔNG BẰNG NGÔN NGỮ VISUAL BASIC 6.0 I Tổng quan Visual Basic : Visual Basic ngôn ngữ lập trình môi trường Windows đời sớm nhất, thực tạo nên cách mạng công nghệ phần mềm phát hành Visual Basic 1.0 vào năm 1991, ông Bill Gates, chủ tòch hãng Microsoft gọi Visual Basic sản phẩm “đáng nể”, nhân vật tiếng khác giới công nghệ phần mềm không tiếc lời khen ngợi công cụ lập trình trực quan Nếu cảm thấy thực thích thú chuyển từ việc sử dụng hệ điều hành MS-DOS sang Windows ta dễ hiểu lời khen ngợi Trước đây, làm việc môi trường DOS, không người cảm thấy thực khó khăn với việc phải nhớ câu lệnh để nhập vào từ dấu nhắc DOS Windows giải khó khăn cho người dùng cách sử dụng giao diện đồ họa với nút lệnh, hộp thoại chuẩn, menu để chọn lựa…Tuy nhiên trước Visual Basic đời để tạo ứng dụng Windows, lập trình viên sử dụng C phải tốn nhiều công sức dành cho việc tạo giao diện cho chương trình Chỉ có việc tạo nút lệnh không cần phải dùng đến hàng trăm dòng ma Với VisualBasic, công việc tạo giao diện trở nên dễ dàng hết Chỉ với vài thao tác click – drag đơn giản, ta bổ sung vào cửa sổ trống lệnh đơn, hộp văn bản, nút lệnh, nút tùy chọn, nhãn, hộp kiểm…Sau tạo giao diện công việc ta viết mã cho đối tượng (gọi điều khiển : Control) Như vậy, nói, với Visual Basic công việc tạo giao diện đồ họa cho ứng dụng Visual Basic đảm nhận Visual Basic cho phép ứng dụng tạo liên kết với ứng dụng Windows khác dễ dàng, cho phép dễ dàng tạo ứng dụng thiên quản lý liệu mạng Visual Basic cho phép người sử dụng giao tiếp với thư viện liên kết động DLL Điều giúp giảm kích cỡ chương trình, tập tin thực thi đặc biệt làm cho chương trình có khả nâng cấp dễ dàng Visual Basic cung cấp số phương pháp bẫy lỗi ứng dụng Đây công cụ mạnh Visual Basic II Truyền thông nối tiếp dùng visual basic: Do phát triển ngày tăng ứng dụng truyền thông qua cổng nối tiếp ,từ phiên 4.0 Visual Basic ,điều khiển truyền thông hoàn chỉnh để sử dụng cho việc lập trình ghép nối máy tính qua cổng nối tiếp Trong phần ta tìm hiểu điều khiển Điều khiển truyền thông: Bình thường chạy phần mềm Visual Basic ta thấy có số thành phần quen thuộc hộp công cụ (toolbox) Nhưng Visual Basic cho phép nhiều thành phần bổ sung thêm vào Điều khiển truyền thông Mscomm Visual Basic số đối tượng bổ sung để tham gia vào số ứng dụng cần việc chuyển nhận liệu qua cổng nối tiếp Trong Visual Basic 5.0 6.0 ta bổ sung thành phần Mscomm đề cập sau : Chọn Project => Components (Ctrl – T) ,cửa sổ sau xuất Điều khiển truyền thông cung cấp hai khả để trao đổi thông tin : • Điều khiển kiện : Truyền thông điều khiển kiện phương pháp tốt sử dụng trình điều khiển việc trao đổi thông tin nối tiếp giải phóng máy tính để làm công việc khác Trong nhiều tình huống, ta cần thông báo thay đổi Thí dụ ta cần biết có ký tự gửi đến thay đổi xảy đường DCD (Data Carrier Detect ) đường RTS (Request To Send) Để làm điều ta sử dụng kiện truyền thông OnComm để bẫy điều khiển kiện Điều khiển truyền thông phát điều khiển lỗi truyền thông • Hỏi Vòng (Polling): Ta hỏi vòng kiện lỗi cách kiểm tra giá trò đặc tính ComEvent sau chu kỳ chương trình để xác đònh xem liệu kiện lỗi xuất Chẳng hạn, chương trình tạo vòng lặp để chờ ký tự cần nhận Cứ lần vậy, ký tự đọc từ đệm nhận Thông thường phương pháp sử dụng chương trình có thời gian để tiến hành hỏi vòng nhận thông tin, hay nói cách khác ứng dụng không lớn Visual Basic sử dụng điều khiển cửa sổ chuẩn cho cổng truyền tin nối tiếp (như serialui.dll serial.vxd ) Điều khiển truyền thông bổ sung cho ứng dụng cổng nối tiếp, nói khác điều khiển truyền thông mà ta dùng điều khiển cổng nối tiếp Nếu cần truy nhập nhiều cổng ứng dụng ta phải dùng nhiều điều khiển truyền thông Đòa cổng đòa ngắt thay đổi nhờ Control Panel Windows Các tham số (như tốc độ truyền theo bit ,chẵn lẻ ,…) thay đổi cách lựa chọn: Control Panel => System => Device Manager => Port (COM LPT) =>Port Settings Việc thiết lập cổng truyền thông (IRQ đòa cổng) thay đổi cách lựa chọn Control Panel => System => Device Manager => Port (COM LPT) => Resources Thuộc tính (property): Thành phần Comm bổ sung vào biểu mẫu ( Form ) lúc cần đến việc truyền thông nối tiếp Theo mặc đònh, cổng thứ tạo đối tượng có tên MSComm1, đối tượng ứng với cổng thứ hai gọi MSComm2,…Có thể nhìn thấy đặc tính đối tượng : CommPort, DTREnable, EOFEnable, HandShaking ,InBufferSize, Index, InputLen, Inputmode, Left, Name, NullDiscard, OutBufferSize, ParityReplace, Rthreshold, RTSEnable, Settings, SThreshold, Tag, Top Ta thấy điều khiển truyền thông có nhiều thuộc tính, để làm việc với điều khiển truyền thông, trước hết ta cần hiểu kỹ thuộc tính liệt kê bảng sau Các thuộc tính CommPort Input(nhập vào) Output(xuất ra) PortOpen Settings Sự mô tả Đặt trả lại số cổng truyền thông Trả lại loại bỏ ký tự khỏi đệm nhận Viết xâu ký tự tới vào đệm truyền Mở/Đóng cổng (tùy thuộc vào thông số) đặt thông số cho cổng Đặt trả lại tham số truyền thông :tốc độ truyền theo bit ,chẵn lẻ ,số bit liệu ,… Thí dụ sau cách truyền thông qua cổng nối tiếp tiến hành cách sử dụng Modem Private sub Form_load() ‘biến để lưu giữ chuỗi nhập vào Dim Instring as String ‘sử dụng COM1 Mscomm11.ComPort = ‘9600 baud ,no parity ,8 bit data ,1 stop bit Mscomm11.Settings = ”9600 ,N,8,1” ‘ra lệnh cho điều khiển Mscomm1 đọc hết đệm nhận dùng ‘lệnh Input Mscomm11.InputLen = ‘mở cổng Mscomm11.PortOpen = True ‘gửi lệnh attention tới MODEM Mscomm11.Output = “ATV1Q0” & Chr$(13) ‘để ‘MODEM trả lời “OK” ‘đợi liệu trả lời gửi cổng nối tiếp Do DoEvents Buffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$ , “OK” &vbCRLF) ‘đọc liệu trả lời “OK” ‘đóng cổng nối tiếp Mscomm11.PortOpen = False End Sub Sau ta tìm hiểu số thuộc tính quan trọng điều khiển truyền thông  Thuộc tính Settings Thuộc tính Settings đặt trả lại thông số truyền thông cho cổng RS-232, tốc độ baud, tính chẵn lẻ, số bit liệu số bit dừng Cú pháp câu lệnh : [form.]Mscomm1.Settings [=paramString$] • Nếu paramString$ không hợp lệ (valid) mở cổng, điều khiển truyền thông phát sinh lỗi 380 ( lỗi giá trò thuộc tính không hợp lệ ) • ParamString$ chuỗi chứa thông số thiết lập cho cổng truyền thông RS-232 có dạng sau : “BBBB ,P ,D ,S” Ở BBBB xác đònh tốc độ baud, P bit tính chẵn lẻ, D số bit liệu S số bit dừng (stop bits) Giá trò mặc đònh paramString$ : “9600, N, 8,1” Bảng sau liệt kê giá trò baud hợp lệ : Số bit liệu hợp lệ • lần truyền (khung truyền) : ,5 ,6 ,7 Thô,8ng(default) số 110 2400 19200 57600 300 4800 28800 115200 600 9600 38400 128000 1200 14400 56000 256000 Số bit Stop hợp lệ : ,1.5 ,2 Thí dụ sau cho phép đặt thông số cho cổng truyền tốc độ baud 4800,không kiểm tra bit chẵn lẻ ,8 bit liệu ,1 bit dừng : Mscomm11.Settings =”4800 ,N ,8 ,1” Kiểu liệu Mscomm11.Settings : String  Thuộc tính CommPort : Thuộc tính đặt trả lại số cổng truyền thông Cú pháp câu lệnh : [form.].CommPort [=portnumber%] Trong thiết kế (design time) ta đặt Portnumber% giá trò nằm khoảng từ đến 16 (giá trò mặc đònh 1) Trước dùng lệnh PortOpen phải thiết lập cổng CommPort Nếu ta dùng thuộc tính PortOpen trước thiết lập cổng CommPort điều khiển truyền thông sinh lỗi 68 (cổng không tồn tại) Kiểu liệu : Integer  Thuộc tính PortOpen : Thuộc tính PortOpen đặt trả lại trạng thái cổng truyền thông (đóng mở) Thuộc tính thời gian thiết kế chương trình Cú pháp câu lệnh : [form.] MSComm.PortOpen [={True/ False}] Thông số thiết lập True để mở cổng, False để đóng (giải phóng) cổng xóa nội dung đệm nhận truyền MSComm tự động đóng cổng nối tiếp ứng dụng kết thúc (Terminated) Trước dùng thuộc tính (PortOpen), phải đặt thông số cổng thuộc tính CommPort với giá trò hợp lệ, ta quên thuộc tính lỗi 68 phát sinh Thí dụ sau mở cổng truyền thông số (COM1) với tốc độ baud 4800 baud, không kiểm tra tính chẵn lẻ, bit liệu, bit stop: MSComm1.Settings = “4800 ,N ,8 ,1” MSComm1.CommPort=1 MSComm1.PortOpen=True Kiểu liệu : Boolean  Các thuộc tính phục vụ việc nhập liệu (Input ,InBufferCount InBufferSize) a Thuộc tính Input : Thuộc tính Input trả lại xóa bỏ chuỗi ký tự từ đệm nhận Thuộc tính không sẵn có thiết kế đọc (Read_only) chạy chương trình Cú pháp câu lệnh : [form.] MSComm.Input Thuộc tính InputLen quy đònh số ký tự đọc câu lệnh Input Để xác đònh số ký tự đệm, thuộc tính InBufferCount kiểm tra Đặt InputLen để đọc toàn nội dung đệm nhận Thuộc tính InputMode đònh kiểu liệu thu qua thuộc tính Input Nếu thuộc tính set CommInputModeText thuộc tính Input trả liệu kiểu text vào biến Variant Nếu InputMode comInputModeBinary Input trả liệu nhò phân mảng byte vào biến Variant Thí dụ cách đọc liệu từ đệm nhận MSComm1.InputLen= ‘đọc toàn nội dung đệm ‘nhận ‘kiểm tra có liệu hay không If MSComm1.InbufferCount then ‘đọc liệu InString$ = MSComm1.Input End if Kiểu liệu Variant b Thuộc tính InBufferSize: Thuộc tính InBufferSize đặt trả lại kích thước đệm nhận, tính theo số byte Cú pháp câu lệnh : [form.]MSComm InBufferSize [=numbyte%] Thuộc tính có liên quan đến kích thước đệm nhận Giá trò mặc đònh 1024 bytes Kích thước đệm phải đặt cho cất giữ số lớn ký tự nhận trước chương trình ứng dụng đọc chúng từ đệm, trừ ta làm việc chế độ bắt tay (handshaking) Kiểu liệu thuộc tính Integer c Thuộc tính InBufferCount: Thuộc tính InBufferCount trả lại số ký tự đệm nhận Nó sử dụng để xóa đệm cách đặt số ký tự Thuộc tính thời gian thiết kế chương trình (design time) Cú pháp câu lệnh sau: [form.]MSComm.InBufferCount [=count%] Ta xóa đệm nhận cách đặt thuộc tính InBufferCount = Kiểu liệu thuộc tính Integer  Các thuộc tính phục vụ việc xuất liệu (Output ,OutBufferCount OutBufferSize ) a Thuộc tính Output: Thuộc tính Output viết chuỗi ký tự vào đệm truyền, thuộc tính thời gian thiết kế chương trình Cú pháp câu lệnh : [form.]MSComm.Output [=outstring$] Thí dụ sau cho biết cách gửi ký tự mà người dùng gõ vào từ bàn phím: Private Sub Form_load (KeyAscii as Integer) MSComm1.Outport =Chr$(KeyAscii) End Sub Thuộc tính Output xuất liệu dạng text hay dạng binary Để gửi liệu text, ta phải khai báo biến kiểu Variant cho chứa chuỗi muốn gửi, sau gán biến cho thuộc tính Output Để gửi liệu dạng binary, ta phải truyền biến Variant chứa mảng byte cho thuộc tính Output Thông thường, ta gửi chuỗi theo chuẩn ANSI tới ứng dụng, ta gửi liệu dạng text Nếu ta có liệu mà chứa ký tự điều khiển nhúng (embedded) ký tự NULL,… ta truyền liệu theo dạng binary Kiểu liệu thuộc tính Variant b Thuộc tính OutBufferSize : Thuộc tính OutBufferSize đặt trả lại kích thước ký tự đệm truyền Cú pháp câu lệnh : [form.] MSComm.OutBufferSize [=numbyte%] Giá trò mặc đònh thuộc tính 512 bytes Không nên nhầm lẫn hai thuộc tính OutBufferCount OutBufferSize với Thuộc tính OutBufferCount nói lên số bytes có đệm truyền, OutBufferSize quy đònh tổng kích thước đệm truyền Không nên để kích thước đệm truyền lớn Tuy nhiên để nhỏ xảy tượng tràn liệu (trừ làm việc chế độ bắt tay) Thông thường nên bắt đầu với kích thước đệm truyền 512 bytes Nếu lỗi tràn xảy phải tăng kích thước đệm cho thích hợp với ứng dụng Kiểu liệu thuộc tính Integer c Thuộc tính OutBufferCount : Thuộc tính OutBufferCount trả lại số ký tự đệm truyền Nhờ thuộc tính ta xóa nội dung đệm truyền cách đặt giá trò OutBufferCount=0 Cú pháp câu lệnh : [form.]MSComm.OutBufferCount [=value%] Kiểu liệu thuộc tính Integer d Thuộc tính RTSEnable : Thuộc tính xác đònh xem liệu có cho phép đường RTS hay không Thông thường tín hiệu RTS (Request To Send) gửi từ máy tính tới MODEM để yêu cầu cho phép truyền liệu Cú pháp câu lệnh sau: [form.]Mscomm1.RTSEnable [=(True | False)] Ta xác lập giá trò True để đặt đường RTS lên mức cao cổng mở xuống mức thấp cổng đóng Đường RTS sử dụng có bắt tay phần cứng sử dụng RTS/CTS Thuộc tính RTSEnable cho phép hỏi vòng đường RTS ta cần xác đònh trạng thái Kiểu liệu thuộc tính : Boolean e Thuộc tính CommEvent : Thuộc tính trả lại hầu hết kiện lỗi truyền thông gần Thuộc tính sẵn thiết kế đọc chạy chương trình Cú pháp câu lệnh là: [form.]Mscomm1.CommEvent Mặc dù kiện OnComm phát sinh có kiện hay lỗi truyền thông xảy thuộc tính CommEvent lại chứa mã số kiện lỗi truyền thông Như để xác đònh xem điều xảy ta phải kiểm tra thuộc tính CommEvent Các lỗi truyền thông bao gồm : Hằng số Giá trò Mô tả comEventBreak 1001 Đã nhận tín hiệu Break comEventFrame 1004 Phần cứng phát lỗi khung truyền comEventOverrun 1006 Tràn cổng Phần cứng đọc ký tự trước ký tự kế gửi đến bò comEventRxOver 1008 Tràn đệm nhận Hết chỗ đệm nhận comEventRxParit 1009 Phần cứng phát lỗi chẵn lẻ y comEventTxFull 1010 comEventDCB 1011 Bộ đệm truyền đầy Bộ đệm truyền bò đầy cố đưa thêm ký tự vào hàng đợi Một lỗi xuất điều khiển liệu(Data Control Block) port Các kiện truyền thông bao gồm: Hằng số ComEvSend Giá trò Mô tả Có số ký tự đònh SThreshold đệm truyền comEvReceive Đã nhận số ký tự với số ký tự đònh Rthreshold Sự kiện phát liên tục ta dùng thuộc tính Input để chuyển liệu khỏi đệm nhận ComEvCTS Có thay đổi đường CTS ComEvDSR Có thay đổi đường DSR Sự kiện phát sinh DSR chuyển từ ComEvCD Có thay đổi đường CD (Carrier Detect) ComEvRing Phát tiếng chuông (gọi) Một số vi mạch UART không hỗ trợ việc ComEvEOF Ký tự EOF (Mã ASCII 26) nhận Kiểu liệu thuộc tính : Integer f Thuộc tính InputLen Đặt trả lại số ký tự mà thuộc tính Input đọc từ đệm nhận Giá trò mặc đònh thuộc tính Đặt InputLen =0 để điều khiển truyền thông đọc hết nội dung đệm nhận Cú pháp câu lệnh sau : [form.] Mscomm1.InputLen [=numchars%] Thuộc tính có hữu ích đọc liệu từ máy có lối đònh dạng cố đònh chiều dài khối liệu Kiểu liệu thuộc tính : Integer g Thuộc tính ParityReplace Đặt trả lại ký tự dùng thay ký tự không hợp lệ dòng liệu lỗi chẵn lẻ xảy Cú pháp : [form.]Mscomm1.ParityReplace [=char$] Bit chẵn lẻ bit truyền với bit liệu dùng cho việc kiểm tra lỗi Khi dùng bit chẵn lẻ ,điều khiển truyền thông cộng tất bit có giá trò kiểm tra tổng số bit xem chẵn hay lẻ (tương ứng với việc xác lập bit chẵn lẻ mở cổng ) Theo mặc đònh ,điều khiển dùng dấu chấm hỏi (?) để thay ký tự không hợp lệ Đặt ParityReplace “ “ để bỏ khả thay ký tự lỗi chẵn lẻ xuất Sự kiện OnComm phát sinh thuộc tính CommEvent đặt thành comEventRxParity Kiểu liệu thuộc tính : String h Thuộc tính Rthreshold Đặt trả lại số ký tự nhận trước điều khiển Mscomm1 đặt thuộc tính comEvent thành comEvReceive phát sinh kiện OnComm Cú pháp : [form.] Mscomm1.Rthreshold [=numchar%] Xác lập để làm khả phát sinh kiện OnComm nhận ký tự Xác lập 1,chẳng hạn, để làm phát sinh kiện OnComm có ký tự nhận vào đệm nhận Kiểu liệu thuộc tính : Integer ♣ Hàm ComInput Trả lại xóa chuỗi ký tự đệm nhận Cú pháp sau : ComInput(ByVal hwnd As Integer ,LpData as Any ,ByVal Data as Integer ) As Integer Hàm tương tự thuộc tính Input trả lại số byte nhận ♣ Hàm ComOutput Viết chuỗi ký tự vào đệm truyền Cú pháp sau : ComOutput(ByVal hwnd As Integer ,LpData as Any ,ByVal Data as Integer ) As Integer Hàm tương tự thuộc tính Output trả lại số byte ký tự gửi Sự kiện Oncomm Sự kiện OnComm phát sinh vào giá trò thuộc tính CommEvent thay đổi Cú pháp kiện : Private Sub [form.]Mscomm1_OnComm() Thuộc tính CommEvent chứa mã số lỗi hay kiện phát sinh kiện OnComm Nếu đặt thuộc tính Rthreshold SThreshold vô hiệu bẫy kiện Receive Send Hỏi vòng cổng RS-232 : Thường làm việc với điều khiển Mscomm1, ta dùng phương pháp điều khiển theo kiện Nhưng ta sử dụng kỹ thuật hỏi vòng để thông tin qua cổng RS-232 Chương trình ví dụ sau sử dụng COM2 để gửi thông báo “Hello” sau chờ chuỗi nhận Kỹ thuật quy đònh nhận đáp ứng cách kiểm tra liên tục số ký tự nhận đệm nhận (InBufferCount) Khi có nhiều ký tự đệm lối vào ký tự đọc Chương trình sau : Private Sub Form_Load() Dim Str as String ‘chuỗi để chứa liệu nhập Mscomm11.ComPort =2 ‘dùng COM2 Mscomm11.Settings=”9600 ,N ,8 ,1” ‘9600 baud ,không ‘parity ,8 bits data ,1 ‘stop bit Mscomm11.InputLen=0 ‘đọc hết đệm lối vào Input dùng Mscomm11.PortOpen=True ‘mở cổng Text1.text=”Sending : Hello” Mscomm11.Output=”Hello”‘gửi thông báo Do ‘chờ đáp ứng từ cổng DoEvents Loop Until Mscomm11.InBufferCount>=2 Str = Mscomm11.Input ‘đọc đệm Input Text2.Text=”Received:” +Str Mscomm11.PortOpen=False‘đóng cổng nối tiếp End Sub Các thông báo lỗi (Error Messages Code) Số lỗi Mô tả Số lỗi 380 Giá trò thuộc tính không hợp lệ 8009 Thuộc tính đọc, comSetNotSupport Thuộc tính đọc, 394 comGetNotSupport Tác động không hợp lệ lên 8000 cổng mở 8001 Giá trò timeout cần phải lớn 383 8010 8011 Mô tả Lỗi thông số mặc đònh Phần cứng không sẵn dùng (bò khóa thiết bò khác) Không thể đònh vò hàng đợi (queues) 8012 Cổng chưa mở 8013 Cổng mở Zero 8002 8003 8004 8005 8006 8007 8008 Số cổng không hợp lệ Thuộc tính có chạy chương trình Thuộc tính đọc chạy chương trình Cổng mở Số nhận dạng thiết bò không hợp lệ không hỗ trợ Giá trò Baud xác đònh không hợp lệ Kích thước byte xác đònh không hợp lệ III Phần giao diện : 8014 8015 8016 8018 8019 8020 8021 Không thể cho phép khai báo(nitification)comm Không đặt trạng thái cho comm Không đặt mặt nạ kiện comm Tác động hợp lệ cổng mở Thiết bò bận Lỗi đọc thiết bò truyền thông Lỗi bên liên quan khối điều khiển thiết bò port Chương trình giao tiếp nối tiếp dùng ngôn ngữ Visual Basic sau: ‘Phần khai báo biến toàn cục trrong module public LenhT, DiaChi As String 'bien chua ma lenh dua ve cho vi xu ly Public GTNhan As Variant ' bien chua data tu vi xu ly gui len Public Byte1, Byte2, Byte3, Byte4 As String 'la byte nhan duoc tu vi xu ly 'byte1 chua dia chi cua vxl 'byte2 chua gia tri nhiet 'byte3 chua so nguoi phong 'byte4 trang thai den va quat Public Byte21, Byte22, Byte23, Byte24 As String 'cac bien cho phong Public Const AnNinh = "Khong co nguoi la xam nhap" Public Const KAnNinh = "Canh bao co nguoi la xam nhap" ‘ ham truyen du lieu toi cac vi xu li Public Sub TRUYEN(GIATRI As String) Dim i As Integer frmchinh.MSComm1.RTSEnable = True frmchinh.MSComm1.Output = GIATRI For i = To 10000 i = i + Next i frmchinh.MSComm1.RTSEnable = False End Sub ‘ Ham nhan du lieu tu vi xu li Public Sub NHAN() Dim i, thongbao As Integer Dim Test As String frmchinh.MSComm1.RTSEnable = False For i = To 30000 i = i + Next i Do DoEvents Loop Until (frmchinh.MSComm1.InBufferSize >= 4) Or (i >= 30000) GTNhan = frmchinh.MSComm1.Input 'thuc hien gan gia tri cho bytei (i=1-4) Test = Left$(GTNhan, 1) If Test = "A" Then Byte1 = Left$(GTNhan, 1) Byte2 = Mid$(GTNhan, 2, 1) Byte3 = Mid$(GTNhan, 3, 1) Byte4 = Right$(GTNhan, 1) Else If Test = "B" Then Byte21 = Left$(GTNhan, 1) Byte22 = Mid$(GTNhan, 2, 1) Byte23 = Mid$(GTNhan, 3, 1) Byte24 = Right$(GTNhan, 1) Else thongbao = MsgBox("So lieu truyen ve bi loi.Can xem lai duong truyen", vbOKOnly, "Loi duong truyen") End If End If End Sub ‘******************************************************** ‘Chuong trinh Frmchinh ‘******************************************************* Dim ToanCuc As Variant Dim Dem, i, j As Integer Dim NHAN As String Private Sub ChkP01_Click() If ChkP01.Value = Then frmP01.Show If ChkP01.Value = Then Unload frmP01 End If '****************************** End Sub Private Sub ChkP02_Click() If ChkP02.Value = Then frmP02.Show If ChkP02.Value = Then Unload frmP02 End If '*************************** End Sub Private Sub Command1_Click() End End Sub Private Sub Form_Load() Dim i1, i2 As Integer ChkP03.Enabled = False ChkP04(1).Enabled = False LblTThai.Caption = "Binh thuong" TxtChinh = CStr(2) OptAuto.Value = True '********************************* 'PHAN GIA DINH BIEN Byte2 = "!" Byte3 = "!" Byte4 = "O" Byte22 = "!" Byte23 = "!" Byte24 = "O" LenhT = "a" '********************************* 'KHOI DONG COM If MSComm1.PortOpen = True Then MSComm1.PortOpen = False MSComm1.CommPort = MSComm1.Settings = "9600,n,8,1" MSComm1.PortOpen = True 'cho thu du lieu dua ve tu vi xu ly frmP02.Timer1.Enabled = True frmP01.Timer1.Enabled = True 'hien thi so nguoi len frmchinh frmchinh.Timer1 = True End Sub Private Sub OptAuto_Click() With frmP01 frmP01.fraDkP01.Enabled = False frmP01.OptTdenP01.Enabled = False frmP01.OptMdenP01.Enabled = False frmP01.OptTquatP01.Enabled = False frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled = False End With With frmP02 frmP02.FraDkP02.Enabled = False frmP02.OptTdenP02.Enabled = False frmP02.OptMdenP02.Enabled = False frmP02.OptTquatP02.Enabled = False frmP02.OptMquatP02.Enabled = False frmP02.Frame2.Enabled = False frmP02.Frame3.Enabled = False End With frmP01.cmdDongYP01.Enabled = False frmP02.cmDongYP02.Enabled = False '*********************************** End Sub Private Sub OptDenChinh_Click() FrmDkDen.Show End Sub Private Sub OptManual_Click() With frmP01 frmP01.fraDkP01.Enabled = True frmP01.OptTdenP01.Enabled = True frmP01.OptMdenP01.Enabled = True frmP01.OptTquatP01.Enabled = True frmP01.OptMquatP01.Enabled = True frmP01.Frame1.Enabled = True frmP01.Frame2.Enabled = True End With With frmP02 frmP02.FraDkP02.Enabled = True frmP02.OptTdenP02.Enabled = True frmP02.OptTquatP02.Enabled = True frmP02.OptMdenP02.Enabled = True frmP02.OptMquatP02.Enabled = True frmP02.Frame2.Enabled = True frmP02.Frame3.Enabled = True End With frmP01.cmdDongYP01.Enabled = True frmP02.cmDongYP02.Enabled = True '************************************ End Sub Private Sub OptQuatChinh_Click() FrmDkQuat.Show End Sub Private Sub Timer1_Timer() ' xuat so nguoi frmchinh i1 = Val(frmP01.TxtSoNguoiP01.Text) i2 = Val(frmP02.TxtSoNguoiP02.Text) TxtChinh.Text = CStr(i1 + i2) End Sub Private Sub cmdDongYP01_Click() Dim Test As String 'xac dinh lenh hoat dong cho vxl If (OptMdenP01.Value = False And OptMquatP01.Value = False) Then LenhT = "C" If (OptMdenP01.Value = False And OptMquatP01.Value = True) Then LenhT = "D" If (OptMdenP01.Value = True And OptMquatP01.Value = False) Then LenhT = "F" If (OptMdenP01.Value = True And OptMquatP01.Value = True) Then LenhT = "G" 'xac dinh dia chi truyen la vxl DiaChi = "A" Test = LenhT 'goi ham truyen LenhT cho vi xu ly Call TRUYEN(DiaChi) Call TRUYEN(Test) Stop End Sub Private Sub cmdThoatP01_Click() Unload Me frmchinh.ChkP01.Value = False End Sub Private Sub Option1_Click() End Sub Private Sub Form_Load() If frmchinh.OptAuto.Value = True Then With frmP01 frmP01.fraDkP01.Enabled = False frmP01.OptTdenP01.Enabled = False frmP01.OptMdenP01.Enabled = False frmP01.OptTquatP01.Enabled = False frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled = False End With With frmP02 frmP02.FraDkP02.Enabled = False frmP02.OptTdenP02.Enabled = False frmP02.OptMdenP02.Enabled = False frmP02.OptTquatP02.Enabled = False frmP02.OptMquatP02.Enabled = False frmP02.Frame2.Enabled = False frmP02.Frame3.Enabled = False End With End If '************************************** 'KHOI DONG COM If frmchinh.MSComm1.PortOpen = True Then frmchinh.MSComm1.PortOpen = False frmchinh.MSComm1.CommPort = frmchinh.MSComm1.Settings = "9600,n,8,1" frmchinh.MSComm1.PortOpen = True 'Cap nhat trang thai cua phong frmP01.Timer1.Enabled = True End Sub Private Sub CapnhatP01() Dim NhietdoP01, SoNguoiP01, i As Integer Dim thongbao As String NhietdoP01 = Asc(Byte2) txtNhietDoP01.Text = Val(NhietdoP01) 'hien thi nhiet SoNguoiP01 = Asc(Byte3) TxtSoNguoiP01.Text = Val(SoNguoiP01) nguoi If Byte4 = "O" Then 'hien thi so txtDenP01.Text = "OFF" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "P" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "OFF" frmchinh.LblTThai = KAnNinh End If If Byte4 = "Q" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "ON" frmchinh.LblTThai = AnNinh End If If Byte4 = "R" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "ON" frmchinh.LblTThai = KAnNinh End If If Byte4 = "S" Then txtDenP01.Text = "ON" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "T" Then txtDenP01.Text = "ON" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "U" Then txtDenP01.Text = "ON" txtQuatP01.Text = "ON" frmchinh.LblTThai = AnNinh End If If Byte4 = "X" Then txtDenP01.Text = "ON" txtQuatP01.Text = "ON" frmchinh.LblTThai = KAnNinh End If 'BAO LOI TRUYEN (lenh truyen ve sai) Select Case Byte4 Case "O" GoTo TB Case "P" GoTo TB Case "Q" GoTo TB Case "R" GoTo TB Case "S" GoTo TB Case "T" GoTo TB Case "U" GoTo TB Case "X" GoTo TB End Select thongbao = MsgBox("Ban can kiem tra lai he thong.Chu cac he thong chong trom", vbOKOnly, "Loi dieu khien") TB: i = i + End Sub Private Sub Timer1_Timer() Dim Kich As String Kich = "E" Call TRUYEN(DiaChi) Call TRUYEN(Kich) Call CapnhatP01 End Sub [...]... (queues) 801 2 Cổng chưa mở 80 13 Cổng đã mở rồi Zero 800 2 80 03 800 4 800 5 80 06 800 7 800 8 Số cổng không hợp lệ Thuộc tính chỉ có khi chạy chương trình Thuộc tính là chỉ đọc khi chạy chương trình Cổng đã mở rồi Số nhận dạng thiết bò là không hợp lệ hoặc không được hỗ trợ Giá trò Baud xác đònh là không hợp lệ Kích thước byte xác đònh là không hợp lệ III Phần giao diện : 801 4 801 5 80 16 801 8 801 9 802 0 802 1 Không... frmP01 frmP01.fraDkP01.Enabled = False frmP01.OptTdenP01.Enabled = False frmP01.OptMdenP01.Enabled = False frmP01.OptTquatP01.Enabled = False frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled = False End With With frmP02 frmP02.FraDkP02.Enabled = False frmP02.OptTdenP02.Enabled = False frmP02.OptMdenP02.Enabled = False frmP02.OptTquatP02.Enabled = False frmP02.OptMquatP02.Enabled... frmP01.OptTquatP01.Enabled = True frmP01.OptMquatP01.Enabled = True frmP01.Frame1.Enabled = True frmP01.Frame2.Enabled = True End With With frmP02 frmP02.FraDkP02.Enabled = True frmP02.OptTdenP02.Enabled = True frmP02.OptTquatP02.Enabled = True frmP02.OptMdenP02.Enabled = True frmP02.OptMquatP02.Enabled = True frmP02.Frame2.Enabled = True frmP02.Frame3.Enabled = True End With frmP01.cmdDongYP01.Enabled... Mscomm11.PortOpen=False‘đóng cổng nối tiếp End Sub 5 Các thông báo lỗi (Error Messages Code) Số lỗi Mô tả Số lỗi 38 0 Giá trò thuộc tính không hợp lệ 800 9 Thuộc tính là chỉ đọc, comSetNotSupport Thuộc tính là chỉ đọc, 39 4 comGetNotSupport Tác động không hợp lệ lên 800 0 cổng đã mở 800 1 Giá trò timeout cần phải lớn hơn 38 3 801 0 801 1 Mô tả Lỗi ở các thông số mặc đònh Phần cứng không sẵn dùng (bò khóa bởi... frmP02.OptMquatP02.Enabled = False frmP02.Frame2.Enabled = False frmP02.Frame3.Enabled = False End With frmP01.cmdDongYP01.Enabled = False frmP02.cmDongYP02.Enabled = False '*********************************** End Sub Private Sub OptDenChinh_Click() FrmDkDen.Show End Sub Private Sub OptManual_Click() With frmP01 frmP01.fraDkP01.Enabled = True frmP01.OptTdenP01.Enabled = True frmP01.OptMdenP01.Enabled = True frmP01.OptTquatP01.Enabled... ChkP01_Click() If ChkP01.Value = 1 Then frmP01.Show If ChkP01.Value = 0 Then Unload frmP01 End If '****************************** End Sub Private Sub ChkP02_Click() If ChkP02.Value = 1 Then frmP02.Show If ChkP02.Value = 0 Then Unload frmP02 End If '*************************** End Sub Private Sub Command1_Click() End End Sub Private Sub Form_Load() Dim i1, i2 As Integer ChkP 03 . Enabled = False ChkP04(1).Enabled... Private Sub cmdThoatP01_Click() Unload Me frmchinh.ChkP01.Value = False End Sub Private Sub Option1_Click() End Sub Private Sub Form_Load() If frmchinh.OptAuto.Value = True Then With frmP01 frmP01.fraDkP01.Enabled = False frmP01.OptTdenP01.Enabled = False frmP01.OptMdenP01.Enabled = False frmP01.OptTquatP01.Enabled = False frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled... frmchinh.MSComm1.Settings = " 9 60 0, n,8,1" frmchinh.MSComm1.PortOpen = True 'Cap nhat trang thai cua phong frmP01.Timer1.Enabled = True End Sub Private Sub CapnhatP01() Dim NhietdoP01, SoNguoiP01, i As Integer Dim thongbao As String NhietdoP01 = Asc(Byte2) txtNhietDoP01.Text = Val(NhietdoP01) 'hien thi nhiet do SoNguoiP01 = Asc(Byte3) TxtSoNguoiP01.Text = Val(SoNguoiP01) nguoi If Byte4 = "O" Then 'hien thi so txtDenP01.Text... frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled = False End With With frmP02 frmP02.FraDkP02.Enabled = False frmP02.OptTdenP02.Enabled = False frmP02.OptMdenP02.Enabled = False frmP02.OptTquatP02.Enabled = False frmP02.OptMquatP02.Enabled = False frmP02.Frame2.Enabled = False frmP02.Frame3.Enabled = False End With End If '************************************** 'KHOI DONG COM If frmchinh.MSComm1.PortOpen... True frmchinh.MSComm1.Output = GIATRI For i = 0 To 100 00 i = i + 1 Next i frmchinh.MSComm1.RTSEnable = False End Sub ‘ Ham nhan du lieu tu vi xu li Public Sub NHAN() Dim i, thongbao As Integer Dim Test As String frmchinh.MSComm1.RTSEnable = False For i = 1 To 30 00 0 i = i + 1 Next i Do DoEvents Loop Until (frmchinh.MSComm1.InBufferSize >= 4) Or (i >= 30 00 0) GTNhan = frmchinh.MSComm1.Input 'thuc hien gan ...II Truyền thông nối tiếp dùng visual basic: Do phát triển ngày tăng ứng dụng truyền thông qua cổng nối tiếp ,từ phiên 4.0 Visual Basic ,điều khiển truyền thông hoàn chỉnh để... cổng truyền thông Trả lại loại bỏ ký tự khỏi đệm nhận Viết xâu ký tự tới vào đệm truyền Mở/Đóng cổng (tùy thuộc vào thông số) đặt thông số cho cổng Đặt trả lại tham số truyền thông :tốc độ truyền. .. cổng mở Thiết bò bận Lỗi đọc thiết bò truyền thông Lỗi bên liên quan khối điều khiển thiết bò port Chương trình giao tiếp nối tiếp dùng ngôn ngữ Visual Basic sau: ‘Phần khai báo biến toàn cục

Ngày đăng: 28/11/2015, 06:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w