Mạng thu thập dữ liệu và quang báo

Với sự tiến bộ của khoa học kỹ thuật, việc thu thập và chia sẽ thông tin đang được quan tâm, cải tiến liên tục. Giải pháp tốt nhất cho công việc trên là sử dụng mạng. Ngày nay rất có nhiều loại mạng khác nhau: mạng truyền dữ liệu nối tiếp dùng chuẩn RS-485, mạng LAN, WAN, mạng Ethernet, mạng Internet Hiện nay, mạng Internet là mạng tiên tiến nhất, chúng chia sẽ một lượng thông tin vô cùng lớn. Trong nội dung đề tài này tôi chỉ giới thiệu mạng truyền dữ liệu nối tiếp dùng chuẩn RS-485 1. Nhiệm vụ đề tài: Mạng thu thập và xử lý dữ liệu từ các thiết bị sau:  Đọc mã vạch: dùng vào việc quản lý thời gian nhân viên ra vào công ty  Thermocouple: Thu thập và điều khiển nhiệt độ của lò nhiệt, do không có lò nhiệt, và sự đáp ứng chậm của nhiệt độ. Do thời gian bảo vệ luận văn không nhiều, nên không điều khiển thực tế mà chỉ thông qua mô phỏng, chương trình mô phỏng được thực hiện trên phần mềm Visual Basic  Quang Báoùng để thông báo tin tức của công ty, chữ trên bảng thông báo thay đổi được. 2. Thực Hiện: Thiết kế 3 kit AT89C51:  Kit thu thập và điều khiển nhiệt độ: - Điều khiển lò nhiệt, dùng điều kiển on-off, thông qua logic mờ - Dùng cảm biến: Thermocouple - Hoạt động của lò nhiệt: bán tự động  Kit đọc mã vạch: - Do không có thiết bị đọc mã vạch, dùng phím thay thế - Mục đích: Kiểm tra thời gian nhân viên ra, vào công ty làm việc  Kit quang báo: - Dùng hiển thị thông báo, thông báo tin tức Thiết kế chương trình điều khiển trên kit và PC

doc113 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2912 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Mạng thu thập dữ liệu và quang báo, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
push acc CJNE A,#3FH,T_NHAY_KEP MOV R0,#0 LAP_DAU_HOI: MOV A,R0 MOV DPTR,#DAU_HOI MOVC A,@A+DPTR CJNE R0,#5,LAP_DAU_HOI CALL INC_DPTR ;************************************************** ;* NHAY_KEP * ;**************************************************** T_NHAY_KEP: pop acc push acc CJNE A,#22H,T_PHAY MOV R0,#0 LAP_NHAY_KEP: MOV A,R0 MOV DPTR,#NHAY_KEP MOVC A,@A+DPTR CJNE R0,#5,LAP_NHAY_KEP CALL INC_DPTR ;******************************************************** ;* PHAY * ;******************************************************** T_PHAY: pop acc push acc CJNE A,#2CH,T_CHAM MOV R0,#0 LAP_PHAY: MOV A,R0 MOV DPTR,#PHAY MOVC A,@A+DPTR CJNE R0,#5,LAP_PHAY CALL INC_DPTR ;******************************************************** ;* CHAM * ;******************************************************** T_CHAM: pop acc push acc CJNE A,#2EH,T_MO_NGOAC MOV R0,#0 LAP_CHAM: MOV A,R0 MOV DPTR,#CHAM MOVC A,@A+DPTR CJNE R0,#5,LAP_CHAM CALL INC_DPTR ;******************************************************** ;* MO_NGOAC * ;******************************************************** T_MO_NGOAC: pop acc push acc CJNE A,#28H,T_DONG_NGOAC MOV R0,#0 LAP_MO_NGOAC: MOV A,R0 MOV DPTR,#MO_NGOAC MOVC A,@A+DPTR CJNE R0,#5,LAP_MO_NGOAC CALL INC_DPTR ;******************************************************** ;* DONG_NGOAC * ;******************************************************** T_DONG_NGOAC: pop acc push acc CJNE A,#29H,T_SAO MOV R0,#0 LAP_DONG_NGOAC: MOV A,R0 MOV DPTR,#DONG_NGOAC MOVC A,@A+DPTR CJNE R0,#5,LAP_DONG_NGOAC CALL INC_DPTR ;******************************************************** ;* SAO * ;******************************************************** T_SAO: pop acc push acc CJNE A,#2AH,T_TIM MOV R0,#0 LAP_SAO: MOV A,R0 MOV DPTR,#SAO MOVC A,@A+DPTR CJNE R0,#5,LAP_SAO CALL INC_DPTR ;******************************************************* ;* TIM * ;******************************************************* T_TIM: pop acc push acc CJNE A,#7BH,T_RO MOV R0,#0 LAP_TIM: MOV A,R0 MOV DPTR,#TIM MOVC A,@A+DPTR CJNE R0,#5,LAP_TIM CALL INC_DPTR ;******************************************************* ;* RO * ;******************************************************* T_RO: pop acc push acc CJNE A,#7CH,T_RO_CONG MOV R0,#0 LAP_RO: MOV A,R0 MOV DPTR,#RO MOVC A,@A+DPTR CJNE R0,#5,LAP_RO CALL INC_DPTR ;******************************************************* ;* RO_CONG * ;******************************************************* T_RO_CONG: pop acc push acc CJNE A,#7DH,T_NONEWORDS MOV R0,#0 LAP_RO_CONG: MOV A,R0 MOV DPTR,#RO_CONG MOVC A,@A+DPTR CJNE R0,#5,LAP_RO_CONG CALL INC_DPTR ;******************************************************* ;* NONEWORDS * ;******************************************************* T_NONEWORDS: pop acc JMP WORD_CON ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;*Tro den data ke cua bang SaveWords ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INC_DPTR: INC R2 CJNE R2,#00H,CON_INC_DPTR INC R1 CON_INC_DPTR: MOV DPH, R1 MOV DPL, R2 ;JMP WORD_CON RET ;*************************************** ; DISLED: ;*************************************** ;LOOP: DISLED: MOV R0, #0 MOV 3AH, #5 MOV 3BH, #0AH MOV 3CH, #0FH MOV 3DH, #14H LOOP1: ; Xuat led MOV DPTR, #0800H ; Tai addr 1CE0 MOV 3EH, R0 CALL INCDPTR MOV DPTR, #0A000H ; Addr 1 tu trai sang MOVX @DPTR, A MOV R7, 3AH MOV 3EH, R7 MOV DPTR, #0800H ; Tai addr 1CE0 CALL INCDPTR MOV DPTR, #8000H ; Addr 1 tu trai sang MOVX @DPTR, A INC R7 MOV 3AH, R7 MOV R7, 3BH MOV 3EH, R7 MOV DPTR, #0800H ; Tai addr 1CE0 CALL INCDPTR MOV DPTR, #6000H ; Addr 1 tu trai sang MOVX @DPTR, A INC R7 MOV 3BH, R7 MOV R7, 3CH MOV 3EH, R7 MOV DPTR, #0800H ; Tai addr 1CE0 CALL INCDPTR MOV DPTR, #4000H ; Addr 1 tu trai sang MOVX @DPTR, A INC R7 MOV 3CH, R7 MOV R7, 3DH MOV 3EH, R7 MOV DPTR, #0800H ; Tai addr 1CE0 CALL INCDPTR MOV DPTR, #2000H ; Addr 1 tu trai sang MOVX @DPTR, A INC R7 MOV 3DH, R7 ; COT MOV A, R0 MOV DPTR, #COT MOVC A, @A+DPTR MOV DPTR, #0C000H MOVX @DPTR, A ;CALL DELAY_3ms ;DELAY_3ms: MOV R1, #8 NHAN: MOV R7, #250 DJNZ R7, $ DJNZ R1, NHAN ;RET ; Xong ScanCot INC R0 CJNE R0, #5, LOOP1 CALL LEDRTI RET ;*************************************** ; LEDRTI: ;*************************************** LEDRTI: MOV 30H, #01H MOV 31H, #00H MOV B, 41H mov R2, 40H mov R3, 41H CALL CON_HIF RET CON_HIF: MOV DPL, 41H MOV DPH, 40H MOVX A, @DPTR CALL DEC_DPTR MOVX @DPTR, A MOV R3, 31H CJNE R6, #0FFH,HI_FF INC 40H HI_FF: INC B MOV 41H, B ;SS MOV A, R3 MOV 53H, B MOV R6, B CJNE R6, #0FFH, SSFF MOV 41H, #0FFH MOV 40H, #08H SSFF: CJNE A, 43H, EXITSS MOV A, R2 MOV 42H, 40H ;CO TROUB CJNE A, 42H, EXITSS MOV DPL, #0FFH MOV DPH, #08H MOVX A, @DPTR MOV DPL, R4 MOV DPH, R5 MOVX @DPTR, A JMP SHIFTONE EXITSS: JMP CON_HIF SHIFTONE: MOV DPL, R2 MOV DPH, R3 MOVX A, @DPTR CALL DEC_DPTR MOVX @DPTR, A RET ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_DPTR: MOV R5, DPL MOV R4, DPH DEC R5 MOV DPL, R5 CJNE R5, #0FFH, EXIT_DEC MOV R5, #0FFH DEC R4 MOV DPL, R5 MOV DPH, R4 EXIT_DEC: RET ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INCDPTR: MOV A, #0 CONIC: CJNE A, 3EH, NCDPRAB MOVX A, @DPTR RET NCDPRAB: INC DPTR INC A JMP CONIC ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;++++++++++++++++++++++++++++++++++++++++++++ ;************************** ; Bang co dinh chua trong ROM ;************************** COT: DB 0FEH, 0FDH, 0FBH, 0F7H, 0EFH K_TRANG: DB 00H, 00H, 00H, 00H, 00H SO_0: DB 3EH, 41H, 41H, 41H, 3EH SO_1: DB 44H, 42H, 7FH, 40H, 40H SO_2: DB 32H, 49H, 49H, 49H, 46H SO_3: DB 22H, 41H, 49H, 49H, 36H SO_4: DB 0FH, 08H, 08H, 08H, 7FH SO_5: DB 4FH, 49H, 49H, 49H, 79H SO_6: DB 3FH, 49H, 49H, 49H, 32H SO_7: DB 00H, 01H, 01H, 01H, 7FH SO_8: DB 36H, 49H, 49H, 49H, 36H SO_9: DB 26H, 49H, 49H, 49H, 3EH CHU_A: DB 7EH, 09H, 09H, 09H, 7EH CHU_B: DB 7EH, 49H, 49H, 49H, 36H CHU_C: DB 3EH, 41H, 41H, 41H, 22H CHU_D: DB 7FH, 41H, 41H, 41H, 3EH CHU_E: DB 7FH, 49H,49H, 49H, 00H CHU_F: DB 7FH, 09H, 09H, 09H, 00H CHU_G: DB 3EH, 41H, 49H, 49H, 3AH CHU_H: DB 7FH, 08H, 08H, 08H, 7FH CHU_I: DB 00H, 41H, 7FH, 41H, 00H CHU_J: DB 20H, 41H, 3FH, 41H, 20H CHU_K: DB 7FH, 08H, 14H, 22H, 41H CHU_L: DB 7FH, 40H, 40H, 40H, 40H CHU_M: DB 7FH, 02H, 04H, 02H, 7FH CHU_N: DB 7FH, 02H, 04H, 08H, 7FH CHU_O: DB 3EH, 41H, 41H, 41H, 3EH CHU_P: DB 7FH, 09H, 09H, 09H, 06H CHU_Q: DB 3EH, 41H, 51H, 61H, 7EH CHU_R: DB 7FH, 09H, 19H, 29H, 46H CHU_S: DB 26H, 49H, 49H, 49H, 36H CHU_T: DB 01H, 01H, 7FH, 01H, 01H CHU_U: DB 3FH, 40H, 40H, 40H, 3FH CHU_V: DB 1FH, 20H, 40H, 20H, 1FH CHU_W: DB 1FH, 20H, 78H, 20H, 1FH CHU_X: DB 22H, 14H, 18H, 14H, 22H CHU_Y: DB 27H, 48H, 48H, 48H, 3FH CHU_Z: DB 22H, 32H, 2AH, 26H, 22H HAI_CHAM: DB 00H, 00H, 36H, 00H, 00H CHAM_PHAY: DB 00H, 00H, 56H, 30H, 00H NHO_HON: DB 00H, 08H, 14H, 22H, 00H BANG: DB 00H, 14H, 14H, 14H, 00H LON_HON: DB 00H, 22H, 14H, 08H, 00H DAU_HOI: DB 06H, 01H, 39H, 09H, 06H NHAY_KEP: DB 00H, 04H, 02H, 04H, 02H PHAY: DB 00H, 50H, 30H, 00H, 00H CHAM: DB 60H, 60H, 60H, 00H, 00H MO_NGOAC: DB 3EH, 4EH, 00H, 00H, 00H DONG_NGOAC: DB 00H, 00H, 00H, 4EH, 3EH SAO: DB 2AH, 14H, 3EH, 14H, 2AH TIM: DB 0CH, 12H, 24H, 12H, 0CH ; Shift {, 7B RO: DB 08H, 24H, 22H, 24H, 08H ; Shift | , 7C RO_CONG: DB 08H, 2CH, 3EH, 2CH, 08H ; Shift } , 7D ;======================================= ;========== END ; Doan chuong trinh tren kit thu thap nhiet do ; Doan chuong trinh an phim va truyen data len PC giong ; kit Nhan Vien ;~~~~~~ ; Gia tri tam ;~~~~~~~~~~~ TEMP_UNIT EQU 30H TEMP_TEN EQU 31H TEMP_HUNDR EQU 32H TEMP_THOU EQU 33H TEMP_POL EQU 34H THOUHUND EQU 35H TENUNIT EQU 36H ;************************************* ; Khoi dong 8255 ;************************************* MOV DPTR, #0A003H MOV A, #10000000B MOVX @DPTR, A ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ; SAVEDATA: Lay gia tri tu 8255 luu vao o nho tam, xu ly ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOV DPTR, #0A000H MOV A, #12H MOVX @DPTR,A ; Tro Port A MOV TEMP_UNIT, A ;MOV TEMP_UNIT, #12H MOV DPTR, #0A001H MOV A, #02H MOVX @DPTR, A ; Tro Port B MOV TEMP_TEN, A ;MOV TEMP_TEN, #99H MOV DPTR, #0A002H MOV A, #78H MOVX @DPTR, A ; ; Tro Port C MOV TEMP_HUNDR, A ;MOV TEMP_HUNDR, #30H CALL SETTLEDATA MOV A, TEMP_POL CJNE A, #01H, ADDTOREAL CALL CONV_NEG ; Co cuc tinh INC R2 MOV TENUNIT, R2 MOV THOUHUND, R3 JMP OUTLED ADDTOREAL: CALL CONV_POS MOV TENUNIT, R2 MOV THOUHUND, R3 OUTLED: ;**************************************** ; OUTLED: ;**************************************** MOV A, TENUNIT ANL A, #0FH MOV DPTR, #TAB7SEG MOVC A, @A+DPTR MOV DPTR, #4000H MOVX @DPTR, A MOV DPTR, #6000H MOV A, #01H MOVX @DPTR, A CALL DELAY MOV A, TENUNIT SWAP A ANL A, #0FH MOV DPTR, #TAB7SEG MOVC A, @A+DPTR MOV DPTR, #4000H MOVX @DPTR, A MOV DPTR, #6000H MOV A, #02H MOVX @DPTR, A CALL DELAY MOV A, THOUHUND ANL A, #0FH MOV DPTR, #TAB7SEG MOVC A, @A+DPTR MOV DPTR, #4000H MOVX @DPTR, A MOV DPTR, #6000H MOV A, #04H MOVX @DPTR, A CALL DELAY MOV A, THOUHUND SWAP A ANL A, #0FH MOV DPTR, #TAB7SEG MOVC A, @A+DPTR MOV DPTR, #4000H MOVX @DPTR, A MOV DPTR, #6000H MOV A, #08H MOVX @DPTR, A CALL DELAY JMP OUTLED ;*************************************** ; SETTLEDATA: Doan chuong trinh xu ly so ;*************************************** SETTLEDATA: ;~~~~~~~~~ ; Xu ly hang don vi ;~~~~~~~~~~~~~~~~ MOV B,TEMP_UNIT ; Mov hang don vi vao B ANL B, #7FH ; Che bit AB(Hang nghin) MOV R0, #0 ; Bat dau kiem tra hang don vi la so may LOOP_UNIT: MOV A, R0 MOV DPTR, #TAB7SEG MOVC A, @A+DPTR CJNE A, B, CHECK_UNIT ; So sanh voi so trong bang, neu bang, gia tri do MOV A, R0 ; chinh la gia tri R0 MOV R2, A ; Mov donvi vao R2 JMP SETTLE_TEN CHECK_UNIT: INC R0 JMP LOOP_UNIT ;~~~~~~~~~ ; Xu ly hang chuc ;~~~~~~~~~~~~~~~~ SETTLE_TEN: MOV B,TEMP_TEN ; Mov hang chuc vao B ANL B, #7FH ; Che bit POL(Cuc Tinh) MOV R0, #0 ; Bat dau kiem tra hang chuc la so may LOOP_TEN: MOV A, R0 MOV DPTR, #TAB7SEG MOVC A, @A+DPTR CJNE A, B, CHECK_TEN ; So sanh voi so trong bang, neu bang, gia tri do ;MOV UNIT, R0 ; chinh la gia tri R0 MOV A, R0 ;ANL A, #0FH SWAP A ; A chua hang chuc, nam o byte cao CLR C ; Cac so tu 0 - 9 ADD A, R2 ; R2 chua hang don vi, nam o byte thap ;************************************** MOV R2, A ; R2 chua hang chuc va hang don vi ;************************************** JMP SETTLE_HUNDR CHECK_TEN: INC R0 JMP LOOP_TEN ;~~~~~~~~~ ; Xu ly hang tram ;~~~~~~~~~~~~~~~~ SETTLE_HUNDR: MOV B,TEMP_HUNDR ; Mov hang tram vao B ANL B, #7FH ; MOV R0, #0 ; Bat dau kiem tra hang tram la so may LOOP_HUNDR: MOV A, R0 MOV DPTR, #TAB7SEG MOVC A, @A+DPTR CJNE A, B, CHECK_HUNDR ; So sanh voi so trong bang, neu bang, gia tri do MOV A, R0 ; chinh la gia tri R0 MOV R3, A ; R3 chua hang tram, nam chi o byte thap(do 0-9) JMP SETTLE_THOU CHECK_HUNDR: INC R0 JMP LOOP_HUNDR ;~~~~~~~~ ; Xu ly hang ngan ;~~~~~~~~~~~~~~ ;Lay data tu o nho tam don vi (TEMP_UNIT) SETTLE_THOU: MOV A, TEMP_UNIT ANL A, #80H JNZ THOU ; do ngo ra cua 7107 tich cuc thap MOV TEMP_THOU, #1 ;Neu A =0 thi co hang nghin(save vao THOU =1) MOV A, #00010000B ADD A, R3 ;******************************************* MOV R3, A ;******************************************* JMP SETTLE_POL THOU: MOV TEMP_THOU, #0 ;Neu A = 1 thi khong co hang nghin ;~~~~~~~ ; Kiem tra cuc tinh ;~~~~~~~~~~~~~ ;Lay data tu o nho tam hang chuc SETTLE_POL: MOV A, TEMP_TEN ANL A, #80H JNZ POL ; do ngo ra cua 7107 tich cuc thap MOV TEMP_POL, #1 ; A= 0 co cuc tinh ( o nho tam POL =1 ) RET POL: MOV TEMP_POL, #0 RET ;************************************* ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ; Tru 2 so thap phan 4 chu so : ; R3 chua hang nghin va hang tram, R2 chua hang chuc va hang don vi( none settle) ; R3:R2=1A:9A - INC(R3):R2 . Day chinh la gia tri thuc ngo vao Analog ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;REAL_IN: CONV_NEG: MOV A, R2 ANL A, #01H JNZ SS_1mV INC R2 SS_1mV: MOV A, #9AH SUBB A, R2 MOV R2, A INC R3 MOV A, #1AH SUBB A, R3 MOV R3,A RET ;************************************** ;~~~~~~~~~~~~~~~~~~~~~~ ; Cong 2 so thap phan 4 chu so ; R3:R2=20:00+R3:R2 ;~~~~~~~~~~~~~~~~~~~~~~ CONV_POS: MOV A, #00H ADD A, R2 MOV R2, A MOV A, #20H ADD A, R3 MOV R3, A RET ;********************************** DELAY: MOV R2,#6 LAP: MOV R3,#250 DJNZ R3,$ DJNZ R2,LAP RET TAB7SEG: DB 40H, 79H, 24H, 30H, 19H, 12H, 02H, 78H, 00H, 10H DB 08H, 03H, 46H, 21H, 06H, 0EH END Caáu truùc chöông trình : Chöông trình treân form Main: Option Explicit Dim i% Dim hMenu, hSubMenu, menuID, x Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function GetSubMenu Lib "user32" _ (ByVal hMenu As Long, ByVal nPos As Long) As Long Private Declare Function GetMenuItemID Lib "user32" _ (ByVal hMenu As Long, ByVal nPos As Long) As Long Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" _ (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _ ByVal wIDNewItem As Long, ByVal lpString As String) As Long Private Declare Function SetMenuItemBitmaps Lib "user32" _ (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _ ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long Private Declare Function GetMenuCheckMarkDimensions Lib "user32" () As Long Private Declare Function GetDC Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function CreateCompatibleDC Lib "gdi32" _ (ByVal hdc As Long) As Long Private Declare Function CreateCompatibleBitmap Lib "gdi32" _ (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Private Declare Function SelectObject Lib "gdi32" _ (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function CreateBitmap Lib "gdi32" _ (ByVal nWidth As Long, ByVal nHeight As Long, _ ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function PatBlt Lib "gdi32" _ (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _ ByVal nWidth As Long, ByVal nHeight As Long, ByVal dwRop As Long) As Long Private Declare Function GetSystemMetrics Lib "user32" _ (ByVal nIndex As Long) As Long Private Sub abLOK_Click() On Error GoTo None Close #2 SelectFile DataFile = cdl.FileName If optNSave(1).Value = True Then If optNOver(0).Value = True Then Open DataFile For Append As #2 Else Open DataFile For Output As #2 End If End If None: End Sub Private Sub abNOK_Click() On Error GoTo None Close #1 SelectFile DataFile = cdl.FileName If optNSave(1).Value = True Then If optNOver(0).Value = True Then Open DataFile For Append As #1 Else Open DataFile For Output As #1 End If End If None: End Sub Private Sub abNVOK_Click() On Error GoTo None Close #3 SelectFile DataFile = cdl.FileName If optNSave(1).Value = True Then If optNOver(0).Value = True Then Open DataFile For Append As #3 Else Open DataFile For Output As #3 End If End If None: End Sub Private Sub Form_Load() hMenu = GetMenu(hwnd) hSubMenu = GetSubMenu(hMenu, 0) '1 for "Other" menu etcetera menuID = GetMenuItemID(hSubMenu, 2) x = SetMenuItemBitmaps(hMenu, menuID, 0, img.ListImages(2).Picture, 0&) Main.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 optNSave(1).Value = True optLSave(1).Value = True optNVSave(1).Value = True ForceKey tmrTran.Enabled = False QLNhanVien.tmrNhanID.Enabled = False End Sub Public Sub IniComPort() Dim PortNumber, Baund As String If MSC.PortOpen = True Then M = MsgBox(" Coång ñang môû ", vbOKOnly, "SelectCom") MSC.PortOpen = False End If PortNumber = Right(cboChonCong.Text, 1) MSC.CommPort = PortNumber Baund = CboBaudrate.Text MSC.Settings = Baund + ",N,8,1" MSC.InputLen = 0 'MSC.InputLen = 1 'Doc mot byte tai thoi diem mo port MSC.InBufferSize = 256 'luu du lieu vao duoi dang text MSC.InputMode = comInputModeText MSC.Handshaking = comNone MSC.OutBufferSize = 256 MSC.EOFEnable = False MSC.RThreshold = 0 MSC.SThreshold = 0 End Sub Private Sub ForceKey() cmd1ChonCong.Visible = False Main.Move _ (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 TabMain.Tab = 1 'NewNode End Sub Private Sub CboBaudrate_DropDown() If MSC.PortOpen = False Then GoTo thoat Else cmd1ChonCong_Click thoat: End If End Sub Private Sub cboChonCong_DropDown() If MSC.PortOpen = False Then GoTo thoat Else cmd1ChonCong_Click thoat: End If End Sub Private Sub cboDataBit_dropdown() If MSC.PortOpen = False Then GoTo thoat Else cmd1ChonCong_Click thoat: End If End Sub Private Sub cboParity_DropDown() If MSC.PortOpen = False Then GoTo thoat Else cmd1ChonCong_Click thoat: End If End Sub Private Sub cboStopBit_DropDown() If MSC.PortOpen = False Then GoTo thoat Else cmd1ChonCong_Click thoat: End If End Sub Private Sub ebThemNode_Click() 'CboNode.AddItem (" asd") On Error GoTo None frmThemNode.Show None: End Sub Private Sub imgOpenPort_Click() MSC.PortOpen = False imgOpenPort.Visible = True imgClosePort.Visible = True cmd1ChonCong.Visible = False cmdChonCong.Visible = True DSbar End Sub Private Sub imgClosePort_Click() MSC.PortOpen = True imgOpenPort.Visible = True imgClosePort.Visible = False cmd1ChonCong.Visible = True cmdChonCong.Visible = False ESbar End Sub Private Sub cmdChonCong_Click() On Error GoTo Quit 'QLNhanVien.tmrNhanID = True IniComPort MSC.PortOpen = True cmd1ChonCong.Visible = True cmdChonCong.Visible = False ESbar imgClosePort.Visible = False imgOpenPort.Visible = True Exit Sub Quit: M = MsgBox("COM Busy ... ", vbOKOnly, "Select other COM ") 'cmd1ChonCong_Click End Sub Private Sub cmd1ChonCong_Click() QLNhanVien.tmrNhanID = False MSC.PortOpen = False cmdChonCong.Visible = True cmd1ChonCong.Visible = False imgOpenPort.Visible = False imgClosePort.Visible = True DSbar End Sub Private Sub ESbar() With SBar With .Panels(1) .Text = " Connecting ..." .ToolTipText = " Ñang Keát Noái " End With With .Panels(2) .Text = " PortOpen " .ToolTipText = " Coång Ñaõ Môû " End With End With End Sub Private Sub DSbar() With SBar With .Panels(1) .Text = " DisConnecting " .ToolTipText = " Chöa Keát Noái " End With With .Panels(2) .Text = " ClosePort " .ToolTipText = " Coång Ñang Ñoùng " End With End With End Sub Private Sub mnuAddNodes_Click() frmNodes.Show End Sub Private Sub mnuAdd_Click() frmThemNode.Show Main.Hide End Sub Private Sub mnuLed_Click() Led.Show Main.Hide End Sub Private Sub mnuMNhanVien_Click() QLNhanVien.Show Main.Hide End Sub Private Sub mnuNhiet_Click() Nhiet.Show Main.Hide End Sub Private Sub mnunodes_Click() On Error GoTo NoneOpenComm If MSC.PortOpen = False Then M = MsgBox(" Baïn Chöa Môû Coång ", vbOKOnly, "Môû Coång") End If NoneOpenComm: End Sub Private Sub mnuNoiDung_Click() frmHelp.Show Main.Hide End Sub Private Sub mnuRun_Click() If MSC.PortOpen = False Then M = MsgBox(" Baïn Chöa Môû Coång ", vbOKOnly, "Môû Coång") Exit Sub End If End Sub Private Sub mnuStart_Click() 'tmrTran.Enabled = True QLNhanVien.tmrNhanID = True End Sub Private Sub mnuStop_Click() MSC.PortOpen = False imgOpenPort.Visible = True imgClosePort.Visible = True cmd1ChonCong.Visible = False cmdChonCong.Visible = True DSbar End Sub Private Sub cmdChonAddr_Click() AddrNhiet = Left(CboAddrNhiet.Text, 3) AddrLed = Left(CboAddrLed.Text, 3) AddrMaVach = Left(CboAddrMaVach.Text, 3) 'Text2.Text = Str(Asc(AddrNhiet)) If AddrNhiet = AddrLed Or AddrNhiet = AddrMaVach Then M = MsgBox("Baïn Choïn Truøng Ñòa Chæ, Môøi Baïn Choïn Laïi", vbOKOnly, "Select Again") End If If AddrLed = AddrMaVach Then M = MsgBox("Baïn Choïn Truøng Ñòa Chæ, Môøi Baïn Choïn Laïi", vbOKOnly, "Select Again") End If End Sub Private Sub WriteResultsToFile() 'Save received data and time in a file. Dim count As Integer For count = 1 To NumNode 'Skip if the node isn't selected (active) on the Nodes form. If Nodes.Active(count) = 1 Then Write #2, _ count, _ Nodes.LastAccess(count), _ Nodes.DataOut1(count), _ Nodes.DataOut2(count), _ Nodes.DataIn1(count), _ Nodes.DataIn2(count), _ Nodes.Status(count) End If Next count End Sub Sub SelectFile() With Main.cdl .Filter = "All files (*.txt)|*.txt" .FileName = DataFile .Flags = cdlOFNPathMustExist .Flags = cdlOFNOverwritePrompt .Flags = cdlOFNCreatePrompt 'Get the selected file from the common dialog box. .ShowOpen End With End Sub Private Sub mnuLSaveAs_Click() mnuLSave_Click End Sub Private Sub mnuLSave_Click() Dim n As Integer On Error GoTo ErSave If txtNhapChu.Text = "" Then M = MsgBox("Baïn Khoâng Coù Gì Ñeå Save haû !", vbOKOnly, "Save Empty") Else lap: cdlQLNhanVien.Filter = "Text files (*.TXT)|*.TXT" cdlQLNhanVien.FileName = "" cdlQLNhanVien.Action = 2 'Hay cdl.ShowSave If cdlQLNhanVien.FileName "" Then Source = cdlQLNhanVien.FileName If Dir(cdlQLNhanVien.FileName) "" Then n = MsgBox("Do you want to replace the existing " + _ cdlQLNhanVien.FileName + " ?", vbYesNoCancel + vbQuestion, "Save") Select Case n Case 6: Save ts.Write (txtNhapChu.Text) ts.Close Case 7: GoTo lap End Select Else Save ts.Write (txtNhapChu.Text) ts.Close End If End If End If ErSave: Exit Sub End Sub Private Sub mnuThoat_Click() Unload Me 'cmdChonCong_Click End Sub Private Sub optLSave_Click(Index As Integer) If optLSave(0).Value = True Then optLSave(1).Value = False optLOver(0).Enabled = False optLOver(1).Enabled = False abLOK.Enabled = False Else optLSave(1).Value = True optLOver(0).Enabled = True optLOver(1).Enabled = True optLOver(0).Value = True abLOK.Enabled = True End If End Sub Private Sub optNSave_Click(Index As Integer) If optNSave(0).Value = True Then optNSave(1).Value = False optNOver(0).Enabled = False optNOver(1).Enabled = False abNOK.Enabled = False Else optNSave(1).Value = True optNOver(0).Enabled = True optNOver(1).Enabled = True optNOver(0).Value = True abNOK.Enabled = True End If End Sub Private Sub optNVSave_Click(Index As Integer) If optNVSave(0).Value = True Then optNVSave(1).Value = False optNVOver(0).Enabled = False optNVOver(1).Enabled = False abNVOK.Enabled = False Else optNVSave(1).Value = True optNVOver(0).Enabled = True optNVOver(1).Enabled = True optNVOver(0).Value = True abNVOK.Enabled = True End If End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) If MSC.PortOpen = False Then M = MsgBox(" Baïn Chöa Môû Coång ", vbOKOnly, "Môû Coång") GoTo NoneOpenComm End If Select Case Button.Key Case "Nhiet" mnuNhiet_Click Case "Led" mnuLed_Click Case "NhanVien" mnuMNhanVien_Click Case "Add" mnuAdd_Click Case "Play" mnuStart_Click Case "Stop" mnuStop_Click Case "Help" mnuNoiDung_Click End Select NoneOpenComm: End Sub ‘************************************************************** Form Led Dim i As Integer Private Sub Command1_Click() Dim S As Double Main.MSC.PortOpen = False S = Shell("E:\Send1.exe") End Sub Private Sub Form_Load() Led.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Private Sub LText1_Change() On Error GoTo None LText2.Text = " " i = Len(LText1.Text) LText2.Text = Mid(UCase(LText1.Text), i, 1) Main.MSC.Output = LText2.Text None: End Sub Private Sub cmdHienThi_Click() 'Close #2 Main.MSC.Output = "$" LText2.Text = " " 'Write #2, LText1.Text End Sub Private Sub ebClear_Click() LText1.Text = " " LText2.Text = "" End Sub Private Sub mnuLMain_Click() Main.Show Led.Hide End Sub Private Sub mnuLNhanVien_Click() QLNhanVien.Show Led.Hide End Sub Private Sub mnuLNhiet_Click() Nhiet.Show Led.Hide End Sub Private Sub mnuLOpen_Click() On Error GoTo ErOpen With Main.cdl .Filter = "Text Files (*.TXT)|*.TXT|" .FilterIndex = 2 .ShowOpen 'Hay cdl.Action = 1 Set txtfile = tsv.GetFile(.FileName) Set ts = txtfile.OpenAsTextStream(ForReading) LText1.Text = ts.ReadAll ts.Close End With ErOpen: Exit Sub End Sub Private Sub mnuLSave_Click() Dim n As Integer On Error GoTo ErSave If LText1.Text = "" Then M = MsgBox("Baïn Khoâng Coù Gì Ñeå Save haû !", vbOKOnly, "Save Empty") Else lap: Main.cdl.Filter = "Text files (*.TXT)|*.TXT" Main.cdl.FileName = "" Main.cdl.Action = 2 'Hay cdl.ShowSave If Main.cdl.FileName "" Then Source = Main.cdl.FileName If Dir(Main.cdl.FileName) "" Then n = MsgBox("Do you want to replace the existing " + _ Main.cdl.FileName + " ?", vbYesNoCancel + vbQuestion, "Save") Select Case n Case 6: Save ts.Write (LText1.Text) 'Write #2, LText1.Text ts.Close Case 7: GoTo lap End Select Else Save ts.Write (LText1.Text) 'Write #2, LText1.Text ts.Close End If End If End If ErSave: Exit Sub End Sub Private Sub mnuLThoaùt_Click() Unload Me Main.Show End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case "Save" mnuLSave_Click Case "Open" mnuLOpen_Click Case "Main" mnuLMain_Click Case "Nhiet" mnuLNhiet_Click Case "nhanvien" mnuLNhanVien_Click End Select End Sub ‘************************************************************* From Quan ly nhan vien Option Explicit Private Type typID ID(0 To numID) As Double NameNV(0 To numID) As String End Type Dim NhanVien As typID Dim ID1, ID2, ID3, ID4, ID5, ID6, ID7, ID8, ID9, ID10, ID11, ID12, ID13, ID14, ID15 As String Private Sub cmdTimerID_Click() tmrNhanID.Enabled = True End Sub Private Sub Form_Load() DisIni DisUpdate QLNhanVien.Move _ (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 'tmrNhanID.Enabled = True End Sub Private Sub DisIni() With MSNVTime .TextMatrix(0, 0) = " Maõ Soá (ID)" .TextMatrix(0, 1) = " Hoï vaø Teân" .TextMatrix(0, 2) = " Giôø Laøm" End With End Sub Private Sub DisUpdate() For i = 1 To numID NhanVien.ID(i) = FindNhanVien.MSHFlexGrid1.TextArray(2 * i) ' NhanVien.NameNV(i) = FindNhanVien.MSHFlexGrid1.TextArray(i + 2) Next i For j = 1 To numID 'NhanVien.ID(i) = FindNhanVien.MSHFlexGrid1.TextArray(2 * i) NhanVien.NameNV(j) = FindNhanVien.MSHFlexGrid1.TextArray(2 * j + 1) Next j End Sub Private Sub Form_Resize() With Me.MSNVTime '.Top = 1000 '.Left = 500 '.Width = .ColWidth(0) = .Width * 0.2 .ColWidth(1) = .Width * 0.4 .ColWidth(2) = .Width * 0.365 End With End Sub Private Sub mnuGioTrongNgay_Click() QLGioTrongNgay.Show QLNhanVien.Hide End Sub Private Sub mnuQLAddr_Click() Main.TabMain.Tab = 2 Main.Show QLNhanVien.Show End Sub Private Sub mnuQLAppend_Click() On Error GoTo None SelectFile DataFile = Main.cdl.FileName Open DataFile For Append As #3 None: M = MsgBox("Baïn Khoâng Save ?", vbOKCancel, "Quaûn Lyù Nhaân Vieân") End Sub Private Sub mnuQLFind_Click() FindNhanVien.Show 'NhanVien.Show End Sub Private Sub mnuQLLed_Click() Led.Show QLNhanVien.Hide End Sub Private Sub mnuQLList_Click() ListNhanVien.Show End Sub Private Sub mnuQLMain_Click() Main.Show QLNhanVien.Hide End Sub Private Sub mnuQLNhiet_Click() Nhiet.Show QLNhanVien.Hide End Sub Private Sub mnuQLOpen_Click() On Error GoTo ErOpen With Main.cdl .Filter = "Text Files (*.TXT)|*.TXT|" .FilterIndex = 3 .ShowOpen 'Hay cdl.Action = 1 Set txtfile = tsv.GetFile(.FileName) Set ts = txtfile.OpenAsTextStream(ForReading) QLGioTrongNgay.Show QLGioTrongNgay.txtQLGio.Text = ts.ReadAll QLGioTrongNgay.rtxGioTrongNgay.Visible = False QLGioTrongNgay.txtQLGio.Visible = True 'rtxGio.Text = ts.ReadAll ts.Close End With ErOpen: Exit Sub End Sub Private Sub mnuQLOverrite_Click() On Error GoTo NoneO SelectFile DataFile = Main.cdl.FileName Open DataFile For Output As #3 NoneO: M = MsgBox("Baïn Khoâng Save ?", vbOKCancel, "Quaûn Lyù Nhaân Vieân") End Sub Private Sub mnuQLThem_Click() frmNhanVien.Show 'QLNhanVien.Hide End Sub Private Sub mnuQLThoat_Click() Main.Show QLNhanVien.Hide End Sub Private Sub mnuQLTime_Click() tmrNhanID.Enabled = False ChinhGio.Show QLNhanVien.Hide End Sub Private Sub tmrNhanID_Timer() 'Main.MSC.InputLen = 0 Main.MSC.Output = "!" Text1.Text = Text1.Text & Main.MSC.Input DisCheck Text1.Text = "" 'HideDis 'ddd End Sub Private Sub HideDis(i As Byte) 'Main.MSC.Output = "!" 'Text1.Text = Text1.Text & Main.MSC.Input With rtxGio '.SelText = "Ngaøy: " & Format(dddd) & vbCrLf 'For i = 1 To numID .SelStart = Len(.Text) .SelText = MSNVTime.TextMatrix(i, 0) & Chr(vbKeyTab) & " " _ & MSNVTime.TextMatrix(i, 1) & Chr(vbKeyTab) & " " _ & MSNVTime.TextMatrix(i, 2) & Chr(vbKeyTab) & Chr(vbKeyTab) & vbCrLf 'Next i 'Next i End With End Sub Private Sub DisCheck() With MSNVTime Select Case Text1.Text Case NhanVien.ID(1) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(1, 0) = NhanVien.ID(1) .TextMatrix(1, 1) = NhanVien.NameNV(1) .TextMatrix(1, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (1) Text1.Text = "" Case NhanVien.ID(2) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(2, 0) = NhanVien.ID(2) .TextMatrix(2, 1) = NhanVien.NameNV(2) .TextMatrix(2, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (2) Text1.Text = "" Case NhanVien.ID(3) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(3, 0) = NhanVien.ID(3) .TextMatrix(3, 1) = NhanVien.NameNV(3) .TextMatrix(3, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (3) Text1.Text = "" Case NhanVien.ID(4) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(4, 0) = NhanVien.ID(4) .TextMatrix(4, 1) = NhanVien.NameNV(4) .TextMatrix(4, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (4) Text1.Text = "" Case NhanVien.ID(5) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(5, 0) = NhanVien.ID(5) .TextMatrix(5, 1) = NhanVien.NameNV(5) .TextMatrix(5, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (5) Text1.Text = "" Case NhanVien.ID(6) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(6, 0) = NhanVien.ID(6) .TextMatrix(6, 1) = NhanVien.NameNV(6) .TextMatrix(6, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (6) Text1.Text = "" Case NhanVien.ID(7) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(7, 0) = NhanVien.ID(7) .TextMatrix(7, 1) = NhanVien.NameNV(7) .TextMatrix(7, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (7) Text1.Text = "" Case NhanVien.ID(8) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(8, 0) = NhanVien.ID(8) .TextMatrix(8, 1) = NhanVien.NameNV(8) .TextMatrix(8, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (8) Text1.Text = "" Case NhanVien.ID(9) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(9, 0) = NhanVien.ID(9) .TextMatrix(9, 1) = NhanVien.NameNV(9) .TextMatrix(9, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (9) Text1.Text = "" Case NhanVien.ID(10) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(10, 0) = NhanVien.ID(10) .TextMatrix(10, 1) = NhanVien.NameNV(10) .TextMatrix(10, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (10) Text1.Text = "" Case NhanVien.ID(11) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(11, 0) = NhanVien.ID(11) .TextMatrix(11, 1) = NhanVien.NameNV(11) .TextMatrix(11, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (11) Text1.Text = "" Case NhanVien.ID(12) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(12, 0) = NhanVien.ID(12) .TextMatrix(12, 1) = NhanVien.NameNV(12) .TextMatrix(12, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (12) Text1.Text = "" Case NhanVien.ID(13) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(13, 0) = NhanVien.ID(13) .TextMatrix(13, 1) = NhanVien.NameNV(13) .TextMatrix(13, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (13) Text1.Text = "" Case NhanVien.ID(14) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(14, 0) = NhanVien.ID(14) .TextMatrix(14, 1) = NhanVien.NameNV(14) .TextMatrix(14, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (14) Text1.Text = "" Case NhanVien.ID(15) Main.MSC.Output = "#" Main.MSC.Output = "@" .TextMatrix(15, 0) = NhanVien.ID(15) .TextMatrix(15, 1) = NhanVien.NameNV(15) .TextMatrix(15, 2) = Format(Time) & " " & Format(Now, "m/d/yy") HideDis (15) Text1.Text = "" End Select End With End Sub Private Sub ddd() For i = 1 To numID Select Case Text1.Text Case NhanVien.ID(i) Main.MSC.Output = "#" Main.MSC.Output = "@" MSNVTime.TextMatrix(i, 0) = NhanVien.ID(i) MSNVTime.TextMatrix(i, 1) = NhanVien.NameNV(i) MSNVTime.TextMatrix(i, 2) = Time End Select Next i End Sub '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' Save data '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub SelectFile() With Main.cdl .Filter = "All files (*.txt)|*.txt" .FileName = DataFile .Flags = cdlOFNPathMustExist .Flags = cdlOFNOverwritePrompt .Flags = cdlOFNCreatePrompt 'Get the selected file from the common dialog box. .ShowOpen End With End Sub Private Sub mnuLSaveAs_Click() mnuLSave_Click End Sub Private Sub mnuLSave_Click() Dim n As Integer On Error GoTo ErSave If txtNhapChu.Text = "" Then M = MsgBox("Baïn Khoâng Coù Gì Ñeå Save haû !", vbOKOnly, "Save Empty") Else lap: cdlQLNhanVien.Filter = "Text files (*.TXT)|*.TXT" cdlQLNhanVien.FileName = "" cdlQLNhanVien.Action = 2 'Hay cdl.ShowSave If cdlQLNhanVien.FileName "" Then Source = cdlQLNhanVien.FileName If Dir(cdlQLNhanVien.FileName) "" Then n = MsgBox("Do you want to replace the existing " + _ cdlQLNhanVien.FileName + " ?", vbYesNoCancel + vbQuestion, "Save") Select Case n Case 6: Save ts.Write (txtNhapChu.Text) ts.Close Case 7: GoTo lap End Select Else Save ts.Write (txtNhapChu.Text) ts.Close End If End If End If ErSave: Exit Sub End Sub ‘************************************************************ Them so nhan vien Public Key As String Private Sub ADONavBar1_Error(Number As Variant, Description As Variant, Source As Variant) ' MsgBox CStr(Number) & vbCrLf & Description & vbCrLf & Source, vbCritical, "ADONavBar Error!" ' End Sub Private Sub ADOActionBar1_Error(Number As Variant, Description As Variant, Source As Variant) ' MsgBox CStr(Number) & vbCrLf & Description & vbCrLf & Source, vbCritical, "ADOActionBar Error!" ' End Sub Private Sub cmdFind_Click() ' ' call find pop-up dialog ' Me.Key = "" ' FindNhanVien.Show vbModal ' If Me.Key "" Then With deNhanVien.rscomNhanVien .MoveFirst .Find "ID='" & Me.Key & "'" End With End If ' Unload FindNhanVien ' End Sub Private Sub cmdList_Click() ListNhanVien.Show End Sub Private Sub Form_Resize() ' ' adjust custom ADO button controls ' With Me.ADOActionBar1 .Width = Me.ScaleWidth .Height = 600 .Left = 0 .Top = 0 End With ' With Me.ADONavBar1 .Width = Me.ScaleWidth .Height = 600 .Left = 0 .Top = Me.ScaleHeight - 600 End With ' End Sub Private Sub Form_Load() ' ' set starting mode ' ADONavBar1.ADORecordset = deNhanVien.rscomNhanVien ' With ADOActionBar1 .ADORecordset = deNhanVien.rscomNhanVien .FormMode = Edit End With ' frmNhanVien.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Private Sub mnuNVExit_Click() Main.Show frmNhanVien.Hide End Sub Private Sub mnuNVLed_Click() Led.Show frmNhanVien.Hide End Sub Private Sub mnuNVMain_Click() Main.Show frmNhanVien.Hide End Sub Private Sub mnuNVNhanVien_Click() QLNhanVien.Show frmNhanVien.Hide End Sub Private Sub mnuNVNhiet_Click() Nhiet.Show frmNhanVien.Hide End Sub ‘******************************************* ‘Tim nhan vien Private Sub Form_Load() FindNhanVien.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Private Sub Form_Resize() ' ' adjust grid and columns ' With Me.MSHFlexGrid1 .Left = 0 .Top = 0 .Height = Me.ScaleHeight .Width = Me.ScaleWidth .ColWidth(0) = .Width * 0.33 .ColWidth(1) = .Width * 0.67 End With ' End Sub Private Sub MSHFlexGrid1_DblClick() ' ' pass selected record to caller ' With Me.MSHFlexGrid1 If .Col = 0 Then frmNhanVien.Key = .Text Me.Hide End If End With ' frmNhanVien.Show End Sub ‘************************************************** ‘ Danh sach nhan vien Private Sub Command1_Click() MSHFlexGrid1.TextArray(11) = Text1.Text End Sub Private Sub Form_Load() With Me .Left = 0 .Top = 0 .Width = 12000 .Height = 9000 End With With MSHFlexGrid1 .ColWidth(0) = .Width * 0.2 .ColWidth(1) = .Width * 0.13 End With ListNhanVien.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Private Sub Form_Resize() ' ' adjust grid to form ' With Me.MSHFlexGrid1 .Left = 0 .Top = 0 .Width = Me.ScaleWidth .Height = Me.ScaleHeight End With End Sub ‘******************************************************* ‘ Quan ly gio trong ngay Option Explicit Private Type typID ID(1 To numID) As Double NameNV(1 To numID) As String End Type Dim NhanVien As typID Private Sub Command1_Click() txtQLGio.Visible = False rtxGioTrongNgay.Visible = True End Sub Private Sub Form_Resize() With Me.MSHFlexGrid1 '.Top = 1000 '.Left = 500 '.Width = .ColWidth(0) = .Width * 0.2 .ColWidth(1) = .Width * 0.4 .ColWidth(2) = .Width * 0.39 End With End Sub Private Sub Form_Load() tmrQLGioTrongNgay.Enabled = False txtQLGio.Visible = False With MSHFlexGrid1 .TextMatrix(0, 0) = " Maõ Soá" .TextMatrix(0, 1) = " Hoï vaø Teân" .TextMatrix(0, 2) = " Giôø Laøm" End With rtxGioTrongNgay.SelText = "Maõ Soá" & Chr(vbKeyTab) & "Hoï vaø Teân" _ & Chr(vbKeyTab) & Chr(vbKeyTab) & "Giôø Laøm" & vbCrLf rtxGioTrongNgay.Text = rtxGioTrongNgay.SelText & QLNhanVien.rtxGio.Text QLGioTrongNgay.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Private Sub Form_Unload(Cancel As Integer) On Error GoTo None Write #3, QLNhanVien.rtxGio.Text QLNhanVien.Show None: End Sub Private Sub mnuQLGLed_Click() Led.Show QLGioTrongNgay.Hide End Sub Private Sub mnuQLGMain_Click() QLGioTrongNgay.Hide QLNhanVien.Hide Main.Show End Sub Private Sub mnuQLGNhanVien_Click() QLNhanVien.Show QLGioTrongNgay.Hide End Sub Private Sub mnuQLGNhiet_Click() Nhiet.Show QLGioTrongNgay.Hide End Sub Private Sub mnuQLGOpen_Click() On Error GoTo ErOpen rtxGioTrongNgay.Visible = False txtQLGio.Visible = True With Main.cdl .Filter = "Text Files (*.TXT)|*.TXT|" .FilterIndex = 3 .ShowOpen 'Hay cdl.Action = 1 Set txtfile = tsv.GetFile(.FileName) Set ts = txtfile.OpenAsTextStream(ForReading) txtQLGio.Text = ts.ReadAll ts.Close End With ErOpen: Exit Sub End Sub Private Sub mnuQLGThoat_Click() Unload Me 'Write #3, rtxGioTrongNgay.Text QLNhanVien.Show End Sub Private Sub tmrQLGioTrongNgay_Timer() With rtxGioTrongNgay '.SelStart = Len(.Text) .SelText = QLNhanVien.MSNVTime.TextMatrix(0, 0) & Chr(vbKeyTab) _ & QLNhanVien.MSNVTime.TextMatrix(0, 1) & Chr(vbKeyTab) _ & QLNhanVien.MSNVTime.TextMatrix(0, 2) & Chr(vbKeyTab) & Chr(vbKeyTab) & vbCrLf For j = 1 To 2 'For i = 3 To numID Step 3 .SelStart = Len(.Text) .SelText = QLNhanVien.MSNVTime.TextMatrix(j, 0) & Chr(vbKeyTab) _ & QLNhanVien.MSNVTime.TextMatrix(j, 1) & Chr(vbKeyTab) _ & QLNhanVien.MSNVTime.TextMatrix(j, 2) & Chr(vbKeyTab) & Chr(vbKeyTab) & vbCrLf 'Next i Next j End With End Sub ‘****************************************************** ‘ Chinh gio Dim TDATA1, TDATA2, TDATA3, TDATA4 As String Dim n As Integer Private Sub ebChinhGio_Click() If txtGio.Text = "" Or txtPhut.Text = "" Then M = MsgBox("Môøi Baïn Nhaäp Ñaày Ñuû", vbOKOnly, "Chænh Giôø") Else ChinhGio.Hide QLNhanVien.Show QLNhanVien.tmrNhanID.Enabled = True End If End Sub Private Sub Form_Load() Main.MSC.Output = "i" delay (200) Main.MSC.Output = "T" delay (200) Main.MSC.Output = "O" delay (200) ChinhGio.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Private Sub sbReset_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Main.MSC.Output = "i" delay (500) Main.MSC.Output = "T" delay (500) Main.MSC.Output = "O" delay (500) 'txtGio.Text = "" 'txtPhut.Text = "" End Sub Private Sub txtGio_Change() Text1.Text = "" n = Len(txtGio.Text) Text1.Text = Mid(UCase(txtGio.Text), n, 1) Main.MSC.Output = Text1.Text TDATA1 = Mid(txtGio.Text, 1, 1) TDATA2 = Mid(txtGio.Text, 2, 1) End Sub Private Sub txtPhut_Change() Text1.Text = "" n = Len(txtPhut.Text) Text1.Text = Mid(UCase(txtPhut.Text), n, 1) Main.MSC.Output = Text1.Text End Sub ‘*********************************************************** ‘ Form Nhiet Private Sub Form_Load() Nhiet.Move _ (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Private Sub mnuNCont_Click() frmHelp.Show End Sub Private Sub mnuNHthang_Click() HinhThang.Show Nhiet.Hide End Sub Private Sub mnuNLed_Click() Nhiet.Hide Led.Show End Sub Private Sub mnuNMain_Click() Nhiet.Hide Main.Show End Sub Private Sub mnuNNhanVien_Click() Nhiet.Hide QLNhanVien.Show End Sub Private Sub mnuNOpen_Click() On Error GoTo ErOpen With Main.cdl .Filter = "Text Files (*.*)|*.*|" .FilterIndex = 1 .ShowOpen 'Hay cdl.Action = 1 Set txtfile = tsv.GetFile(.FileName) Set ts = txtfile.OpenAsTextStream(ForReading) 'TC.Repaint = ts.ReadAll ts.Close End With ErOpen: Exit Sub End Sub Private Sub mnuNPrint_Click() M = MsgBox("Môøi Baïn Laép Ñaët Maùy In Vaøo ", vbOKOnly, "Thu Thaäp Nhieät Ñoä") End Sub Private Sub mnuNSave_Click() Dim n As Integer On Error GoTo ErSave If TC.Canvas = "" Then M = MsgBox("Baïn Khoâng Coù Gì Ñeå Save haû !", vbOKOnly, "Save Empty") Else lap: Main.cdl.Filter = "Text files (*.*)|*.*" Main.cdl.FileName = "" Main.cdl.Action = 2 'Hay cdl.ShowSave If Main.cdl.FileName "" Then Source = Main.cdl.FileName If Dir(Main.cdl.FileName) "" Then n = MsgBox("Do you want to replace the existing " + _ Main.cdl.FileName + " ?", vbYesNoCancel + vbQuestion, "Save") Select Case n Case 6: Save ts.Write (LText1.Text) 'Write #2, LText1.Text ts.Close Case 7: GoTo lap End Select Else Save ts.Write (LText1.Text) 'Write #2, LText1.Text ts.Close End If End If End If ErSave: Exit Sub End Sub Private Sub mnuNTgiac_Click() ThongSoFz.Show Nhiet.Hide End Sub Private Sub mnuNThoat_Click() Nhiet.Hide Main.Show End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case "n1" mnuNOpen_Click Case "n2" mnuNSave_Click Case "n3" mnuNPrint_Click Case "n4" mnuNMain_Click Case "n5" mnuNLed_Click Case "n6" mnuNNhanVien_Click Case "n7" mnuNTgiac_Click Case "n8" mnuNHthang_Click Case "n9" mnuNCont_Click End Select End Sub ‘********************************************************* ‘ Chon ham lien thuoc dang tam giac Option Explicit 'Hang so Const max_input = 4 Const max_output = 2 Const max_mf_in = 5 Const max_mf_out = 7 Const max_rule = 625 'Cau truc du lieu Private Type mfType Name As String Shape As Byte Par(1 To 4) As Double End Type Dim InType(1 To max_input) As Double Dim inVar(1 To max_input) As Double 'Dim outVar(1 To max_output) As Double Dim RuleType(1 To max_input + max_output) As Byte Dim r(1 To max_input + max_output) As Byte 'Dim Weight As Double 'Cac bien Dim n_in As Byte Dim n_out As Byte Dim n_mf_in(1 To max_input) As Byte Dim n_mf_out(1 To max_output) As Byte Dim n_rule As Integer Dim mf_in(1 To max_input, 1 To max_mf_in) As mfType Dim mf_out(1 To max_output, 1 To max_mf_out) As mfType Dim Rule(1 To max_rule, 1 To max_input + max_output) As Byte 'Khoi dong cac bien 'Nhap tu giao dien 'n_in=2 'n_out=1 'n_mf_in(1)=3 so tap mo o ngo vao 1 'n_mf_in(2)=3 so tap mo o ngo vao 2 'n_mf_out(1)=5 so tap mo o ngo ra la 5 'n_rule=9 Private Sub KD3() n_in = txtnIn n_out = txtnOut n_mf_in(1) = 3 n_mf_in(2) = 3 n_mf_out(1) = 5 'For i = 1 To max_input 'n_mf_in(i) = txtmfin 'Next i 'For j = 1 To max_output 'n_mf_out(j) = txtmfout 'Next j n_rule = 9 'n_mf_in(1) ^ n_in 'Khoi dong gia tri ban dau cho cac tap mo o ngo vao 1 mf_in(1, 1).Name = "NE" mf_in(1, 1).Shape = 1 mf_in(1, 1).Par(1) = -2 mf_in(1, 1).Par(2) = -1 mf_in(1, 1).Par(3) = 0 mf_in(1, 2).Name = "ZE" mf_in(1, 2).Shape = 1 mf_in(1, 2).Par(1) = -1 mf_in(1, 2).Par(2) = 0 mf_in(1, 2).Par(3) = 1 mf_in(1, 3).Name = "PO" mf_in(1, 3).Shape = 1 mf_in(1, 3).Par(1) = 0 mf_in(1, 3).Par(2) = 1 mf_in(1, 3).Par(3) = 2 'Khoi dong gia tri ban dau cho cac tap mo o ngo vao 2 mf_in(2, 1).Name = "NE" mf_in(2, 1).Shape = 1 mf_in(2, 1).Par(1) = -2 mf_in(2, 1).Par(2) = -1 mf_in(2, 1).Par(3) = 0 mf_in(2, 2).Name = "ZE" mf_in(2, 2).Shape = 1 mf_in(2, 2).Par(1) = -1 mf_in(2, 2).Par(2) = 0 mf_in(2, 2).Par(3) = 1 mf_in(2, 3).Name = "PO" mf_in(2, 3).Shape = 1 mf_in(2, 3).Par(1) = 0 mf_in(2, 3).Par(2) = 1 mf_in(2, 3).Par(3) = 2 'Khoi dong gia tri ban dau cho cac tap mo o ngo vao 2 mf_out(1, 1).Name = "NB" mf_out(1, 1).Shape = 0 mf_out(1, 1).Par(1) = -1 mf_out(1, 1).Name = "NS" mf_out(1, 1).Shape = 0 mf_out(1, 1).Par(1) = -0.5 mf_out(1, 1).Name = "ZE" mf_out(1, 1).Shape = 0 mf_out(1, 1).Par(1) = 0 mf_out(1, 1).Name = "PS" mf_out(1, 1).Shape = 0 mf_out(1, 1).Par(1) = 0.5 mf_out(1, 1).Name = "PB" mf_out(1, 1).Shape = 0 mf_out(1, 1).Par(1) = 1 'He qui tac mo 'Neu nhiet la ZE va Nhietdot la ZE thi voltage la ZE Rule(1, 1) = 1 Rule(1, 2) = 2 Rule(1, 3) = 3 'Neu nhiet la ZE va Nhietdot la NE thi voltage la NS Rule(2, 1) = 2 Rule(2, 2) = 3 Rule(2, 3) = 4 'Neu nhiet la ZE va Nhietdot la PO thi voltage la PS Rule(1, 1) = 2 Rule(1, 2) = 3 Rule(1, 3) = 4 'Neu nhiet la NE va Nhietdot la ZE thi voltage la NS Rule(1, 1) = 1 Rule(1, 2) = 2 Rule(1, 3) = 2 End Sub 'Ham mo hoa doi voi ham lien thuoc dang tam giac Private Function mftri(xx As Double, ll As Double, cc As Double, rr As Double) As Double If ((xx = rr)) Then mftri = 0 End If If ((xx > ll) And (xx <= cc)) Then mftri = (xx - ll) / (cc - ll) End If If ((xx > cc) And (xx < rr)) Then mftri = (rr - xx) / (rr - cc) End If End Function 'Ket qua suy dien cua 1 quy tac mo '(dung toan tu PROD de thuc hien toan tu AND) 'Private Sub one_rule_inference(r, inVar) Private Sub rWeight(r, inVar) 'Dim outVar(1 To max_output) As Double Dim riWeight As Double Dim x, y As Byte 'Dim r(1 To max_input + max_output) As Byte riWeight = 1 For x = 1 To n_in If mf_in(i, r(i)).Shape = 1 Then riWeight = riWeight * mftri(inVar(i), mf_in(i, r(i)).Par(1), mf_in(i, r(i)).Par(2), mf_in(i, r(i).Par(3))) End If Next x rWeight = riWeight End Sub Private Sub routVar(r, inVar) Dim Weight As Double Weight = rWeight(r, inVar) For y = 1 To n_out If mf_out(i, r(n_in + i)).Shape = 0 Then OutVar = mf_out(i, r(n_in + i)).Par(1) * Weight End If Next y 'Ngoai ra con cac dang ham lien thuoc khac routVar = OutVar End Sub 'Ket qua suy dien cua he qui tac mo Private Sub all_rule_inference(inVar) Dim wtsum, Weight As Double Dim tempOut(1 To max_output) As Double Dim OutVar(1 To max_output) As Double Dim x, y As Byte For x = 1 To n_out OutVar(x) = 0 wtsum = 0 For x = 1 To n_rule Weight = rWeight(Rule(i), inVar) tempOut = routVar(Rule(i), inVar) wtsum = wtsum + Weight For y = 1 To n_out OutVar(y) = OutVar(y) + tempOut(y) Next y Next x For x = 1 To n_out OutVar(x) = OutVar(x) / Weight Next x all_rule_inference = OutVar End Sub Private Sub chkBangLuat_Click() On Error GoTo ErOpen With Main.cdl .Filter = "Text Files (*.TXT)|*.TXT|" .FilterIndex = 4 .ShowOpen 'Hay cdl.Action = 1 Set txtfile = tsv.GetFile(.FileName) Set ts = txtfile.OpenAsTextStream(ForReading) Text1.Text = ts.ReadAll ts.Close End With ErOpen: Exit Sub 'With Main.cdl '.FileName = "c:\as.txt" 'Set txtfile = tsv.GetFile(Main.cdl.FileName) 'Set ts = txtfile.OpenAsTextStream(ForReading) 'Text1.Text = ts.ReadAll 'End With chkBangLuat.Value = 1 End Sub Private Sub Command1_Click() KD3 End Sub Private Sub ebBangLuatOK_Click() ThongSoFz.Hide Nhiet.Show End Sub Private Sub Form_Load() With MSBangDK .ColWidth(0) = 1300 .ColWidth(1) = 1300 .ColWidth(2) = 1500 .TextMatrix(0, 0) = "ET" .TextMatrix(0, 1) = "DET" .TextMatrix(0, 2) = "OUT" End With ThongSoFz.Move _ (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Phaàn source chöông trình coù treân ñóa CD, xem seõ deã daøng vaø ñaày ñuû hôn.

Các file đính kèm theo tài liệu này:

  • docPro.doc
  • 001gtdetai.001
  • 002gtdetai.002
  • txtLED.txt
  • batMerge gtdetai.bat
  • txtNhanVien.txt
  • txtNHIET.txt
  • docPC.doc
  • zipPro.zip
  • docThesis.doc
  • rarVisual Basic.rar