Mục lục
Mục lục 1
Lời nói đầu 3
Phần 1 .Tổng quan về lập trình hướng đối tượng
1.1. Abstraction ( tính trừu tượng)
4
1.2 .Encap sulation (sự đóng kín)
5
1.3. Modularity (modun hóa)
6
1.4. Hierachy (hệ thống phân cấp)
6
1.5. Kiểm tra kiểu ( typing )
6
1.6. Bản chất của đối tượng
7
1.7. Mối quan hệ giữa các đối tượng
7
1.8. Bản chất của lớp
8
1.9. Mối quan hệ giữa các lớp
8
Phần 2.Visual C++ 6.0
2.1.Cách cài đặt
10
2.2.Giao diện chương trình
16
2.3.Các thao tác cơ bản với Menu và Toolbar của VC++ 6.0
17
2.4.Các môi trường xây dựng ứng dụng trong VC++ 6.0
19
Phần 3. Hướng dẫn lập trình VC++6.0
Chương 1.Các thao tác với lớp, hàm, biến
3.1.1.Đưa các file có sẵn vào trong chương trình ứng dụng
20
3.1.2.Thêm lớp mới vào trong chương trình
23
3.1.3.Thêm một hàm mới nằm trong lớp
25
3.1.4.Cách thêm một biến mới.
27
Chương 2.Tạo các menu, toolbar và các thao tác cơ bản
3.2.1.Tạo Menu
31
3.2.2.Tạo ToolBar mới
33
3.2.3. Tác động các sự kiện lên đối tượng
34
3.2.4. Đẩy một icon lên nút bấm trong ứng dụng
35
3.2.5.Tạo các ToolTip(chú thích )cho đối tượng
36
3.2.6.Tác động tới biểu tượng chuột trong ứng dụng
38
Chương 3.Sử dụng font và giờ hệ thống
3.3.1.Lấy font hệ thống viết text và thao tác vẽ lên màn hình
39
3.3.2.Thiết kế một Dialog riêng đưa nó vào Dialog chính ,cập nhật giờ hệ thống
45
Chương 4. Đọc, hiển thị và lưu file text
3.4.1.Đọc và hiển thị nội dung file
52
3.4.2.Ghi nội dung lên file
53
3.4.2.1.Ghi nội dung lên file có sẵn
53
3.4.2.2.Ghi dữ liệu lên một file mới
54
3.4.3.Ví dụ minh hoạ .
55
Chương 5.Sử dụng ActiveX trong ứng dụng
66
Chương 6.Giao tiếp máy tính
3.6.1.Các hàm trong VC++ trong giao tiếp máy tính
76
3.6.1.1.Hàm CreateFile
76
3.6.1.2.Hàm SetupComm
78
3.6.1.3.Hàm PurgeComm
79
3.6.1.4.Cấu trúc DCB
79
3.6.1.5.Hàm GetCommState
83
3.6.1.6.Hàm SetCommState
83
3.6.1.7.Cấu trúc COMSTAT
84
3.6.1.8.Hàm ReadFile
85
3.6.1.9.Hàm WriteFile
86
3.6.2.Giao tiếp máy tính với các thiết bị bên ngoài bằng chuẩn giao tiếp RS232
87
Chương 7.VC++ với thiết kế 3D
3.7.1.Include file header và library
101
3.7.2.Sử dụng hàm PreCreateWindow
101
3.7.3.Hàm OnCreate
101
3.7.3.1.Mô tả PixelFormat
101
3.7.3.2.Chọn và thiết lập cho PixelFormat
102
3.7.3.3.Tạo một ngữ cảnh để tô bóng (Rendering Context )
102
3.7.4.Hàm OnSize ( )
102
3.7.5.Hàm OnEraseBkgnd
103
3.7.6.Hàm OnInitialUpdate
103
3.7.7.Hàm OnDraw(CDC*pDC)
103
3.7.8.Các hàm DrawScene
103
3.7.9.Ví dụ minh hoạ
103
Chương 8 .Đóng gói chương trình ,tạo bộ cài đặt .
3.8.1.Thêm thành phần Installshield for Microsoft Visual C++ 6.0
109
3.8.2.Các thao tác để đóng gói với InstallShield .
110
Chương 9.Thiết kế chương trình mô phỏng điều khiển máy CNC
3.9.1.Chức năng của chương trình
118
3.9.2.Thiết kế giao diện
119
3.9.2.1.Thiết kế giao diện chính
119
3.9.2.2.Thiết kế các hộp thoại phụ
122
3.9.2.3.Thiết kế thanh menu
127
3.9.3.Viết code cho chương trình
128
3.9.3.1.Viết code cho hộp thoại Configure
128
3.9.3.2.Viết code cho hộp thoại Define Zero Point
129
3.9.3.3.Viết Code cho hộp thoại Edit Code
130
3.9.3.4.Viết Code cho hộp thoại New
130
3.9.3.5.Viết code cho hộp thoại Tool Demension
131
3.9.3.6.Viết code cho hộp thoại To Any Point
131
3.9.3.7.Viết code cho chương trình chính
132
Tài liệu tham khảo
159
159 trang |
Chia sẻ: netpro | Lượt xem: 1791 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đồ án Hướng dẫn lập trình VC++ 60, mô phỏng điều khiển, gia công CNC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
File
//trong List
static char BASED_CODE szFilter[]="Music file(*.*)|*.*||";
// Thao tác mở File
CFileDialog pFile(TRUE
,"*.*",ListDuongDan,OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,szFilter);
// Tạo ra pFile Thuộc lớp CFileDialog
// OFN_ALLOWMULTISELECT là Flag chỉ ra hoạt động cho phép chọn //nhiều File
ViTriFile=pFile.GetStartPosition( ); //Lấy vị trí của file đầu tiên trong
//List file, sẽ là NULL khi tới cuối danh sách
if(pFile.DoModal( )==IDOK) //Kiểm tra xem có đồng ý mở các file hay
//không
{
while(ViTriFile!=NULL) //Tạo ra vòng lặp lấy các vị trí của List trong
//khi chưa chưa hết danh sách file
{
ListDuongDan=pFile.GetNextPathName(ViTriFile); //Lưu lại
//đường dẫn tại vị trí tiếp theo của list
m_CtrlList.AddString(ListDuongDan); //Thêm đường dẫn vào
//trong ListBox
}
}
}
Ấn F5 để biên dịch chương trình và khi ấn Browse chọn File sẽ thấy hiển thị trên ListBox các file được chọn (ở trên trình bày thuật toán mở chọn nhiều file và hay được sử dụng trong VC ++) .
Hình 3.63 .Hiển thị được List File lên List Box
Nút bấm Remove , khi chọn vị trí đường dẫn File trong List (Tạo ra một biến lưu giữ vị trí con trỏ ) sau đó tác động lên list tại vị trí đó bằng hàm xoá chuỗi kí tự :
void CWMADlg::OnRemove( )
{
int ViTriDuocChon;
ViTriDuocChon=m_CtrlList.GetCurSel( );
m_CtrlList.DeleteString(ViTriDuocChon);
UpdateData(FALSE);
}
Với nút bấm Remove All đơn giản hơn vì không phải truy nhập tới vị trí con trỏ nào,
chỉ cần khi có sự kiện bấm nút thì biến điều khiển Listbox tự động truy nhập vào các đường dẫn trong danh sách và xoá toàn bộ chúng :
void CWMADlg::OnRemoveall( )
{
m_CtrlList.ResetContent( ); //Xoá hết
}
Với các nút bấm còn lại đều liên quan đến lớp ActiveX(ActiveX Window Media Player này được điều khiển bởi biến m_ctrl) đưa vào và phải xem các hàm liên quan tới nó được khai báo và định nghĩa như thế nào .Trong
header file wmpplayer4.h có hàm close( )sử dụng để đóng media đang chạy, SetFullScreen( ) để điều khiển chức năng phóng to màn hình và hàm SetUrl( ) để đưa đường dẫn cho ActiveX Window Media Player. Vì vậy với sự kiện các nút bấm còn lại được viết tiếp như sau :
void CWMADlg::OnFullgreen( )
{
m_ctrl.SetFullScreen(TRUE); //Phóng to màn hình.
}
void CWMADlg::OnPlay( )
{
int ViTriDuocChon=m_CtrlList.GetCurSel( );
//Lấy vị trí trong ListBox được chọn
m_CtrlList.GetText(ViTriDuocChon,Url);
// Lấy đường dẫn trong ListBox tại vị trí con trỏ được chon
m_ctrl.SetUrl(Url); //Cho Url lên ActiveX
}
Trong hàm OnPlay( ) biến Url được khai báo trong WMADlg.h như sau :
public:
CString Url;
Chương 6. Giao tiếp máy tính
3.6.1.Các hàm trong VC++ trong giao tiếp máy tính .
Các hàm sử dụng trong việc lập trình truyền thông nối tiếp :
3.6.1.1.Hàm CreateFile( ):
Chức năng tạo mở hoặc cắt bớt tập tin, cổng COM, thiết bị, dịch vụ hay bàn điều khiển. Một Handle được trả về để truy cập đối tượng .
HANDLE CreateFile(
LPCSTR lpFileName, // Tên File
DWORD dwDesiredAccess, //Phương thức truy cập
DWORD dwShareMode, //Chế độ chia sẻ
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
//Thuộc tính bảo mật
DWORD dwCreationDisposition ,//Sự kiện xảy ra khi tạo File
DWORD dwFlagsAndAttributes, //Cờ thuộc tính File
HANDLE hTemplateFile
);
Các tham số :
- lpFileName : Chuỗi khác rỗng chứa tên của đối tượng như File, cổng COM, thiết bị đĩa hoặc bàn điều khiển để tạo hay mở. Khi lpFileName chỉ đến một cổng cần mở phải thêm dấu ‘:’ đằng sau tên .VD :chỉ định cổng COM1: để mở cổng COM1. Khi sử dụng MSCOMM chỉ định COM3:
- dwDesiredAccess : Phương thức truy cập đối tượng. Một ứng dụng có thể truy cập chỉ đọc, chỉ ghi, đọc/ghi hay truy vấn thiết bị .Dưới đây mô tả giá trị có thể của tham số này :
0. Xác định truy vấn đối tượng. Một ứng dụng có thể truy vấn thuộc tính đối tượng mà không truy cập thiết bị.
GENERIC_READ .Chỉ định phương thức cho phép đọc lên đối tượng .Dữ liệu có thể được đọc và con trỏ file có thể di chuyển trên đối tượng .Kết hợp với GENERIC_WRITE để truy cập dạng đọc/ghi .
GENERIC_WRITE. chỉ định phương thức cho phép ghi lên đối tượng. Dữ liệu có thể được ghi và con trỏ file có thể di chuyển trên đối tượng .Kết hợp với GENERIC_READ để truy cập dạng đọc/ghi.
-dwShareMode chế độ chia sẻ cho đối tượng. Nếu tham số này =0 đối tượng không thể chia sẻ .Các thao tác bên trong đối tượng sẽ không thành công cho đến khi HANDLE được đóng. Tham số này có thể có nhiều giá trị khác nhau. Dưới đây là các giá trị thích hợp của nó :
FILE_SHARE_READ thao tác con trên đối tượng chỉ có thể thành công chỉ khi thực hiện đọc file.
FILE_SHARE_WRITE thao tác con trên đối tượng chỉ có thể thành công chỉ khi ghi file .
- lpSecurityAttributes : tham số này luôn = NULL
- dwCreationDispostion sự kiện xảy ra khi file đang tồn tại và không tồn tại .Các giá trị thường dùng cho tham số này :
CREATE_NEW tạo file mới. Hàm không thành công nếu file đang tồn tại
CREATE_ALWAYS tạo mới file , nếu file không tồn tại thì sẽ ghi đè .
OPEN_EXISTING mở file, hàm không thành công nếu file không tồn tại.Phải sử dụng cờ này khi mở thiết bị bằng hàm createfile() bao gồm cả console.
OPEN_ALWAYS mở file nếu nó tồn tại, nếu không thì tạo file như trường hợp cờ dwCreationDisposition được đặt là CREATE_NEW.
TRUNCATE_EXISTING mở file, mở một lần, file bị cắt bớt nên kích thước của nó là 0 bytes. Phải chỉ định truy cập GENERIC_WRITE đối với loại cờ này.Hàm thất bại nếu file không tồn tại .
- dwFlagsAndAttributes thuộc tính và cờ cho file, mọi sự kết hợp các thuộc
tính có thể có của file đều được chấp nhận đối với tham số
dwFlagsAndAttributes .Tất cả các thuộc tính khác đều chứa thuộc tính FILE_ATTRIBUTE_NORMAL, các giá trị có thể có của tham số này :
FILE_ATTRIBUTE_ARCHIVE,Xác định file có thể lưu trữ. Ứng dụng dùng thuộc tính này để đánh dấu file trong trường hợp sao lưu hay loại bỏ.FILE_ATTRIBUTE_HIDDEN ,Xác định file bị ẩn. Nó không có trong danh sách của một thư mục thông thường. FILE_ATTRIBUTE_NORMAL.Xác định rằng file không có tập thuộc tính nào khác. Thuộc tính này chỉ đúng nếu sử dụng một mình.FILE_ATTRIBUTE_READONLY ,Xác định rằng file là chỉ đọc. FILE_ATTRIBUTE_SYSTEM :
Xác định file là một phần hay được dành riêng cho hệ điều hành (OS).FILE_ATTRIBUTE_TEMPORARY Không được hỗ trợ.
Mọi sự kết hợp các cờ cho phép đều được chấp nhận đối với tham số
Mọi sự kết hợp các cờ cho phép đều được chấp nhận đối với tham dwFlagsAndAttributes. Bảng sau cho thấy các giá trị cờ cho phép đối với
dwFlagsAndAttributes. FILE_FLAG_WRITE_THROUGH: Chỉ định hệ thống ngay lập tức cache và ghi dữ liệu lên đĩa. Hệ thống vẫn đệm quá trình ghi, nhưng không thể chậm trễ trong việc đẩy nó đi.FILE_FLAG_OVERLAPPED:Cờ này không được hỗ trợ; mặc dù vậy các phép đa xử lý đọc/ghi cùng lúc lên thiết bị thì được phép.FILE_FLAG_RANDOM_ACCESS :Chỉ định file truy cập ngẫu nhiên. Hệ thống dựa vào điều này để tối ưu việc lưu đệm file.
-hTemplateFile [vào] Được bỏ qua;Giá trị trả về một handle trỏ đến file vừa mở .
Nếu file tồn tại trước khi gọi hàm và cờ dwCreationDisposition là CREATE_ALWAYS hay OPEN_ALWAYS, Một lời gọi hàm GetLastError trả về ERROR_ALREADY_EXISTS, ngay cả khi hàm mở file thành công.
Nếu file tồn tại trước khi gọi hàm, GetLastError trả về 0.
INVALID_HANDLE_VALUE chỉ ra rằng có lỗi. Để lấy thông tin chi tiết về lỗi, gọi hàm GetLastError.Xác định giá trị 0 cho dwDesiredAccess cho phép ứng dụng dò tìm thuộc tính đối tượng mà thậm chí không truy cập vào thiết bị. Kiểu truy cập này rất có ích, Thí dụ nếu ứng dụng muốn biết kích thước của ổ đĩa và định dạng mà ổ đĩa đó hỗ trợ mà
không có đĩa trong ổ đĩa.Danh sách sau cho thấy các thao tác của hàm CreateFile trên các loại file, tài nguyên
thông tin, thiết bị, và bàn điều khiển:•Các file khi tạo mới hay cắt bớt một file đang tồn tại, hàm CreateFile thực hiện các hành động sau: •Kết hợp các thuộc tính và cờ xác định bởi dwFlagsAndAttributes với thuộc tính FILE_ATTRIBUTE_ARCHIVE. • Đặt chiều dài file về 0. • CreateFile không thể xử dụng để truy cập file trong MODULES của bộ nhớ ROM. Các Module này được lưu trữ dưới nhiều định dạng khác nhau mà ứng dụng không thể truy cập được. File ROM duy nhất có thể truy cập dùng hàm CreateFile là những file trong đoạn FILES.
Khi mở một file đang tồn tại, hàm CreateFile bỏ qua các thuộc tính được xác định bởi dwFlagsAndAttributes và xác định chiều dài file dược vào giá trị dwCreationDispositionSử dụng cờ FILE_FLAG_RANDOM_ACCESS đối với file lưu trên RAM, đặt file trong vùng lưu trữ đối tượng, sẽ không cho phép nén file. Nếu đề cao sự thực thi, thì đây có thể không phải là giải pháp đúng. Thao tác đọc ghi trên file nén là chậm hơn so với file không nén. •Cổng COM Hàm CreateFile có thê tạo một handle chỉ đến cổng COM. Bằng cách đặt tham số dwCreationDisposition là OPEN_EXISTING, phương thức truy cập chỉ đọc, chỉ ghi, hay đọc/ghi đều có thể được phép.
3.6.1.2. Hàm SetupComm( ) .Xác lập các thông số truyền thông cho thiết bị. BOOL SetupComm( HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);
Các tham số- hFile Handle trỏ đến các thiết bị truyền thông. Hàm CreateFile trả về handle này. - dwInQueue Xác định kích thước bộ đệm vào của thiết bị, tính bằng byte. -dwOutQueue Xác định kích thước bộ đệm ra của thiết bị, tính bằng byte. Các giá trị trả về :Khác không nếu thành công. ngược lại nếu thất bại. Dùng hàm GetlastError để lấy chi tiết mã lỗi.Ghi chú :Sau khi tiến trình CreateFile thực hiện trả về một handle đến tài nguyên thông tin thì có thể gọi hàm SetupComm để xác lập các thông số cho thiết bị. Nếu không xác lập
các thông số này thì thiết bị sẽ sử dụng tham số mặc định khi xảy ra việc gọi hàm để mở một tài nguyên thông tin khác.
Tham số dwInQueue và dwOutQueue xác định kích thước (byte) yêu cầu cho bộ đệm bên trong của thiết bị được dùng bởi trình điều khiển thiết bị. Thí dụ giáo thức YMODEM các gói có kích thước lớn hơn 1024 byte một ít. Kích thước bộ đệm yêu cầu cho tài nguyên YMODEM có thể là 1200 byte. Thiết bị nhận dữ liệu theo kích thước buffer, nhưng lại tự do sử dụng bất cứ mô hình đệm nào.3.6.1.3. Hàm PurgeCommHàm có thể xóa tất cả các kí tự trong bộ đệm vào và bộ đệm ra của tài nguyên thông tin. Nó cũng dừng việc đọc ghi trên tài nguyên. BOOL PurgeComm( HANDLE hFile, DWORD dwFlags); Các tham số- hFile [vào] Handle trỏ đến tài nguyên thông tin. - dwFlags [in] Xác định hành động thực hiện. Theo mô tả ở bảng sau: PURGE_TXABORT Hủy bỏ tất cả quá trình ghi hiện thời ngay cả khi quá trình ghi chưa hoàn tất.PURGE_RXABORT Hủy bỏ tất cả quá trình đọc hiện thời ngay cả khi quá trình đọc chưa hoàn tất.PURGE_TXCLEAR Xóa bộ đệm ra, nếu thiết bị có bộ đệm ra.PURGE_RXCLEAR Xóa bộ đệm vào nếu thiết bị có bộ đệm vào.Giá trị trả về :Khác không nếu thành công. Bằng không nếu thất bại. Chi tiết lỗi trả về bởi hàm GetLastError.Ghi chú :Nếu một tiểu trình sử dụng PurgeComm để chùi bộ đệm ra, các kí tự đã bị xóa thì không truyền được. Để chùi sạch bộ đệm ra mà vẫn đảm bảo dữ liệu đã được truyền thì gọi hàm FlushFileBuffers (một phương thức để đồng bộ hóa). Chú ý rằng, đôi khi, hàm FlushFileBuffers đựoc đưa ra để điều khiển luồng nhưng không ghi time-outs, và nó sẽ không trả về cho đến khi quá trình ghi kết thúc.
3.6.1.4. Cấu trúc DCB (Device Control Block - Khối điều khiển thiết bị). Cấu trúc DCB định nghĩa các thiết lập điều khiển cho một thiết bị truyền thông nối tiếp. typedef struct _DCB { DWORD DCBlength; &n bsp; // kích thước của DCB DWORD BaudRate; &nb sp; // tốc độ truyền hiện tại DWORD fBinary: 1; // chế độ nhị phân, không kiểm tra EOF
DWORD fParity: 1; // cho phép kiểm tra chẵn lẽ
DWORD fOutxCtsFlow:1; // điều khiển luồng ra CTS (Clear To Send) DWORD fOutxDsrFlow:1; // điều khiển luồng ra DSR (Data Set Ready) DWORD fDtrControl:2;
// kiểu điều khiển luồng DTR (Data Terminal Ready) DWORD fDsrSensitivity:1; // độ nhạy DSR DWORD fTXContinueOnXoff:1; // XOFF tiếp tục Tx DWORD fOutX: 1; // điều khiển luồng ra XON/XOFF DWORD fInX: 1; &nbs p; // điều khiển luồng vào XON/XOFF DWORD fErrorChar: 1; // cho phép thay thế nếu lỗi DWORD fNull: 1; // cho phép cắt bớt phần NULL DWORD fRtsControl:2; // điều khiển luồng RTS (Ready To Send) DWORD fAbortOnError:1; // bỏ qua nếu lỗi DWORD fDummy2:17; // dành riêng WORD wReserved; &n bsp; // trạng thái không sử dụng WORD XonLim; ; // ngưỡng truyền XON WORD XoffLim; &nbs p; // ngưỡng truyền XOFF BYTE ByteSize; &nb sp; // số lượng bit/byte, 4-8 BYTE Parity; ; // 0-4=no,odd,even,mark,space BYTE StopBits; &nb sp; // 0,1,2 = 1, 1.5, 2 char XonChar; &nbs p; // kí tự XON Tx và Rx char XoffChar; &nb sp; // kí tự XOFF Tx và Rx char ErrorChar; &n bsp; // kí tự thay thế nếu lỗi char EofChar; &nbs p; // kí tự kết thúc char EvtChar; &nbs p; // kí tự trạng thái nhận WORD wReserved1; // dành riêng, không sử dụng } DCB; Các thành phần :- DCBlength Xác định chiều dài (byte) của khối cấu trúc DCB. -BaudRate Xác định tốc độ baud mà ở đó thiết bị hoạt động. Thành phần này có thể là giá trị hiện tại, hay là một trong các giá trị sau: CBR_110 //110 bits per secondCBR_19200CBR_300 CBR_38400CBR_600 CBR_56000CBR_1200CBR_57600CBR_2400CBR_115200
CBR_4800
CBR_128000CBR_9600CBR_256000CBR_14400 - fBinary Chỉ định chế độ nhị phân. Các hàm Window32 API không hỗ trợ chế độ không phải là
nhị phân, vì vậy giá trị này phải luôn là TRUE.- fParity Chỉ định xem có cho phép kiểm tra chẵn lẻ không. Nếu TRUE, thực hiện kiểm tra chẵn lẽ với báo cáo lỗi nếu có. - fOutxCtsFlow Xác định xem tín hiệu CTS (clear-to-send) có được giám sát cho điều khiển luồng ra hay không. Nếu TRUE và CTS tắt, đầu ra sẽ được dừng cho đến khi CTS được gửi lại một lần nữa. - fOutxDsrFlow Xác định xem tín hiệu DSR (Data-Send-Ready) có được giám sát cho điều khiển luồng ra hay không. Nếu TRUE và DSR tắt, đầu ra sẽ được dừng cho đến khi DSR được gửi lại một lần nữa. - fDtrControl Xác định điều khiển luồng DTR (data-terminal-ready). Thành phần này có thể là một trong các giá trị sau. DTR_CONTROL_DISABLE :Vô hiệu hóa DTR.DTR_CONTROL_ENABLE :Cho phép DTRDTR_CONTROL_HANDSHAKE : Cho phép DTR dạng ‘bắt tay’. nếu handshake được phép, Nếu ứng dụng tăng dòng bằng hàm EscapeCommFunction thì sẽ gây ra lỗi.-fDsrSensitivity Xác định xem trình điều khiển truyền thông sẵn sàng ở trạng thái đón nhận tín hiệu DSRl. Nếu gí trị này TRUE thì trình điều khiển sẽ bỏ qua tất cả các byte dữ liệu nhận được trừ khi đường vào DSR của modem đang ở trạng thái cao.-fTXContinueOnXoff Xác định việc truyền có dừng lại khi bộ đệm vào đầy và trình điều khiển thiết bị đã truyền kí tự XoffChar. Nếu mang giá trị TRUE, việc truyền tiếp tục sau khi bộ đệm vào đạt đến giá trị XoffLim xác định đầy và trình điều khiển thiết bị đã truyền kí tự XoffChar để dừng việc nhận các byte. Nếu mang giá trị FALSE, việc truyền không tiếp tục cho đến khi bộ đệm vào trong phạm vi XonLim là rỗng và trình điều khiển thiết bị đã truyền kí tự XonChar để tiếp tục nhận. - fOutX Xác định xem điều khiển luồng XON/XOFF có được sử dụng trong suốt quá trình truyền. Nếu mang gía trị TRUE, việc truyền dừng khi nhận được kí tự XoffChar và bắt đầu lại khi nhận được kí tự XonChar. - fInX Xác định xem điều khiển luồng XON/XOFF được sử dụng trong suốt quá trình nhận. Nếu TRUE, kí tự XoffChar được gửi khi bộ đệm vào ở trong khoảng XoffLim là đầy, và kí tự XonChar được gửi khi bộ đệm vào XonLim là rỗng.
-fErrorChar
Xác định xem các byte đã nhận có lỗi chẵn lẽ được thay thế bằng các kí tự thuộc ErrorChar. Nếu TRUE và fParity TRUE, việc thay thế xảy ra. - fNull Xác định xem có bỏ qua byte rổng không. Nếu TRUE, thực hiện bỏ qua. - fRtsControl Xác định điều khiển luồng RTS (request-to-send). Có thể có các giá trị sau: RTS_CONTROL_DISABLE :Vô hiệu hóa dòng RTS.
RTS_CONTROL_ENABLE :Cho phép dòng RTS.RTS_CONTROL_HANDSHAKE :Cho phép chế độ bắt tay RTS. Trình điều khiển thiết bị nâng dòng RTS khi bộ đệm (vào) "type-ahead" bé hơn một nữa so với khi đầy và hạ dòng RTS khi bộ đệm lớn hơn ¾ so với khi đầy. Nếu chế độ bẳt tay được cho phép, thì sẽ gây lỗi cho ứng dụng nếu thực hiện tăng dòng sử dụng hàm EscapeCommFunction.RTS_CONTROL_TOGGLE :Xác định rằng dòng RTS sẽ ở trạng thái cao nếu byte sẵn sàng để truyền. Sau khi tất cả các byte trong bộ đệm được gửi, dòng RTS sẽ trở về trạng thái thấp.- fAbortOnError Xác định xem quá trình đọc ghi có bị dừng lại khi xảy ra lỗi hay không. Nếu TRUE, trình điều khiển thiết bị sẽ bỏ qua tất cả các thao tác đọc ghi cùng với một trạng thái lỗi. Trình điều khiển thiết bị sẽ không thực hiện bất kì thao tác đọc ghi nào cho đến khi ứng dụng xác nhận lỗi bằng cách gọi hàm ClearCommError. - fDummy2 Dành riêng, không sử dụng-wReserved Không sử dụng, mang giá trị 0. -XonLim Xác định số lượng tối thiểu các byte trong bộ đệm vào trước khi kích hoạt điều khiển luồng để ngăn chặn đầu gửi. Chú ý rằng đầu gửi có thể truyền các kí tự sau khi tín hiệu điều khiển luồng được kích hoạt, vì vậy giá trị này phải luôn khác 0. Điều này xem hoặc điều khiển luồng XON/XOFF, RTS, hay DTR được xác định trong fInX, fRtsControl, hay fDtrControl. -XoffLim Xác định số lượng tối đa các byte được phép ở trong bộ đệm vào trước khi điều khiển luồng được kích hoạt để cho phép truyền bởi đầu gửi. Xem như hoặc điều khiển luồng vào XON/XOFF, RTS, hay DTR được xác định trong fInX, fRtsControl, hay fDtrControl. Số lượng tối đa các byte được cho phép tính bằng cách trừ giá trị này với kích thước (byte) của bộ đệm vào. -ByteSize Xác định số bit/byte ở đầu nhận và gửi. -Parity Xác định mô hình chắn lẽ được dùng. Có các giá trị sau: EVENPARITY :Ngang bằngMARKPARITY :Đánh dấuNOPARITY :Không có
ODDPARITY :Lẽ
SPACEPARITY :Khoảng trắng-StopBits Xác định số lượng các bit dừng được sử dụng. Có thể có các giá trị sau ONESTOPBIT :1 bit dừngONE5STOPBITS :1.5 bit dừngTWOSTOPBITS :2 bit dừng-XonChar Xác định kí tự XON cho cả truyền và nhận. -XoffChar
Xác định kí tự XOFF cho cả truyền và nhận. -ErrorChar Xác định kí tự thay thế trong trường hợp lỗi chẵ lẽ. -EofChar Xác định kí tự kết thúc. -EvtChar Xác định kí tự tín hiệu. -wReserved1 Không dùng. Ghi chú :Khi một khối cấu trúc DCB được sử dụng để cấu hình 8250, các giá trị sau được chỉ định thiết lập thành phần ByteSize và StopBits: • Số lượng databit phải là 5 đến 8 bit. •Sử dụng 5 bit dữ liệu với 2 bit dừng là một sự kết hợp sai, cũng giống như 6, 7, hay 8 bit dữ liệu với 1.5 bit dừng.
3.6.1.5. Hàm GetCommState .Hàm nhận về thiết lập hiện thời của thiết bị thông tin hiện tại. BOOL GetCommState( HANDLE hFile, // trỏ đến thiết bị thông tin LPDCB lpDCB // khối điều khiển thiết bị);Các tham số- hFile [vào] Trỏ đến thiết bị thông tin. Hàm CreateFile trả về con trỏ này. - lpDCB [ra] Trỏ đến cấu trúc DCB nhận về thông tin thiết lập. Các giá trị trả vềGiá trị trả về khác không nếu thành công. ngược lại trả về 0, dùng hàm GetLastError để biết chi tiết lỗi.3.6.1.6. Hàm SetCommState. Hàm SetCommState cấu hình thiết bị thông tin dựa trên thông tin có trong khối DCB. Hàm thiết lập tất cả các giá trị phần cứng và điều khiển nhưng không xóa dữ liệu trong
bộ đệm. BOOL SetCommState( HANDLE hFile, // trỏ đến thiết bị thông tin LPDCB lpDCB // khối thông tin điều khiển);Các tham số- hFile Trỏ đến thiết bị thông tin. Hàm CreateFile trả về con trỏ này. - lpDCB Trỏ đến khối DCB chứa thông tin cấu hình thiết bị. Các giá trị trả vềHàm thành công nếu giá trị trả về khác 0.
Hàm thất bại nếu giá trị trả về bằng 0, dùng hàm GetLastError để lấy chi tiết lỗi.Ghi chú :Hàm SetCommState sử dụng khối DCB để xác định cấu hình mình muốn. Hàm GetCommState Trả về thiết lập hiện tại. Để thiết lập một vài tham số của khối cấu trúc DCB, bạn nên hiệu chỉnh khối DCB đã được điền bằng cách gọi GetCommState. Điều này bảo đảm rằng cấu trúc DCB có các giá trị phù hợp. Hàm SetCommState thất bại nếu thành phần XonChar của cấu trúc DCB bằng thành phần XoffChar. Khi hàm SetCommState được sử dụng để cấu hình 8250, ràng buộc được áp đặt cho thành phần ByteSize và StopBits của DCB: Số lượng bit dữ liệu phải từ 5 đến 8.
3.6.1.7. Cấu trúc COMSTATCấu trúc COMSTAT chứa thông tin về thiết bị truyền thông. cấu trúc này được điền bởi hàm ClearCommError. typedef struct _COMSTAT { DWORD fCtsHold : 1; DWORD fDsrHold : 1; DWORD fRlsdHold : 1; DWORD fXoffHold : 1; DWORD fXoffSent : 1; DWORD fEof : 1; DWORD fTxim : 1; DWORD fReserved : 25; DWORD cbInQue; DWORD cbOutQue; } COMSTAT, *LPCOMSTAT; Các thành phần- fCtsHold Xác định xem việc truyền có phải chờ tín hiệu CTS (clear-to-send). Nếu TRUE việc truyền phải chờ.
- fDsrHold
Xác định xem việc truyền có phải chờ tín hiệu DSR (data-set-ready) để được gửi hay không. Nếu TRUE, đang chờ. - fRlsdHold Xác định xe viêc truyền có phải chờ tín hiệu RLSD (receive-line-signal-detect) để được gửi hay không. Nếu TRUE, đang chờ. - fXoffHold Xác định xem việc truyền phải chờ vì nhận được kí tự XOFF hay không. Nếu TRUE, đang chờ.- fXoffSent Xác định xem quá trình truyền đang đợi vì kí tự XOFF đã được gửi hay không. Nếu TRUE, đang đợi. Treo quá trình truyền khi kí tự XOFF được truyền đến hệ thống mà hệ thống đó nhận kí tự tiếp theo như là XON mà không quan tâm đến kí tự hiện tại. - fEof
Xác định xem kí tự end-of-file (EOF) vừa được nhận hay không. Nếu TRUE, kí tự EOF vừa được nhận. - fTxim Nếu TRUE, có một kí tự được xếp hàng để truyền mà kí tự đó được gửi đến thiết bị bằng cách sử dụng hàm TransmitCommChar. Thiết bị thông tin truyền liên tục các kí tự trong bộ đệm ra của thiết bị. - fReserved Không sử dụng.- cbInQue Xác định số lượng các byte được nhận từ đầu gửi nối tiếpnhưng chưa được đọc bởi thao tác ReadFile. - cbOutQue Xác định số lượng byte dữ liệu người dùng còn lại cần truyền bằng thao tác ghi. Giá trị này bằng 0 cho việc ghi không phủ chồng.
3.6.1.8. Hàm ReadFile .Hàm ReadFile đọc dữ liệu từ một file, bắt đầu tại vị trí được xác định bởi con trỏ file. Sau khi quá trình đọc hoàn tất, con trỏ file tăng lên một số bằng số byte vừa đọc được, ngoại trừ trường hợp con trỏ file được tạo với thuộc tính phủ chồng (overlap). Nếu con trỏ file được tạo cho việc vào ra phủ chồng (I/O), Ứng dụng phải tự thực hiện tăng con trỏ file sau mỗi phép đọc file. Hàm này được thiết kế cho cả thao tác đồng bộ và không đồng bộ. Hàm ReadFileEx chỉ được thiết kế cho thao tác không đồng bộ. Nó cho phép ứng dụng thực hiện phép xử lí khác trong suốt quá trình đọc file.BOOL ReadFile( HANDLE hFile, // trỏ đến file LPVOID lpBuffer, &nb sp; // bộ đệm dữ liệu DWORD nNumberOfBytesToRead, // số lượng byte để đọc LPDWORD lpNumberOfBytesRead, // số lượng byte đọc được LPOVERLAPPED lpOverlapped // bộ đệm phủ lắp);Các tham số- hFile Trỏ đến file cần đọc. Con trỏ file phải được tạo với truy cập
GENERIC_READ. - lpBuffer Trỏ đến bộ đệm nhận dữ liệu đọc được từ file. - nNumberOfBytesToRead Xác định số byte cần đọc. - lpNumberOfBytesRead Trỏ đến một biến nhận giá trị là số byte đọc được. Hàm ReadFile đặt giá trị này về 0 trước khi thực hiện mọi thao tác hay kiểm lỗi. Nếu tham số này bằng 0 khi hàm ReadFile trả về TRUE trên một ống được đặt tên, đầu còn lại của ống thông điệp được gọi là hàm WriteFile với nNumberOfBytesToWrite đặt bằng 0. - lpOverlapped Trỏ đến một cấu trúc phủ chồng OVERLAPPED. Cấu trúc này được yêu cầu nếu hFile được tạo với cờ FILE_FLAG_OVERLAPPED. Nếu hFile được mở với cờ FILE_FLAG_OVERLAPPED, tham số lpOverlapped
phải khác NULL. Nó phải trỏ đến một cấu trúc OVERLAPPED phù hợp. Nếu hFile được tạo với cờ FILE_FLAG_OVERLAPPED và lpOverlapped bằng NULL, hàm có thể báo cáo sai rằng thao tác đọc đã hoàn tất. Nếu hFile được mở với cờ FILE_FLAG_OVERLAPPED và lpOverlapped khác NULL, thao tác đọc bắt đầu tại offset được xác định trong cấu trúc OVERLAPPED và ReadFile có thể trả về trước khi thao tác đọc file hoàn tất. Trong trường hợp này, ReadFile trả về FALSE và hàm GetLastError trả về lỗi ERROR_IO_PENDING. Điều này cho phép tiếp tục thực hiện tiến trình trong khi thao tác đọc hoàn tất. Sự kiện được xác định trong cấu trúc OVERLAPPED được đặt cho tín hiệu trạng thái trước khi việc đọc hoàn tất. Nếu hFile không được mở với FILE_FLAG_OVERLAPPED và lpOverlapped là NULL, thao tác đọc bắt đầu tại vị trí hiện tại của file và ReadFile không trả về cho đến khi việc đọc hoàn tất. Giá trị trả vềHàm thành công nếu giá trị trả về khác 0.Hàm thất bại nếu giá trị trả về bằng 0, dùng hàm GetLastError để lấy chi tiết lỗi.
3.6.1.9. Hàm WriteFile.Hàm WriteFile ghi dữ liệu vào một file, bắt đầu tại vị trí được xác định bởi con trỏ file. Sau khi quá trình ghi hoàn tất, con trỏ file tăng lên một số bằng số byte vừa ghi được, ngoại trừ trường hợp con trỏ file được tạo với thuộc tính phủ chồng (overlap). N
Các file đính kèm theo tài liệu này:
- Hướng dẫn lập trình VC++ 60, mô phỏng điều khiển, gia công CNC.doc