110
Chinh sua boi: [email protected] PHAÀN CHÖÔNG TRÌNH VIEÁT TREÂN VI XÖÛ LYÙ

c1CT Cho VXL-cho VB-cho PLC Cai Tien

Embed Size (px)

DESCRIPTION

phone

Citation preview

Page 1: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

PHAÀN CHÖÔNG TRÌNH VIEÁT TREÂN

VI XÖÛ LYÙ

Page 2: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;;;;;;;;;;;;;;;;CHÖÔNG TRÌNH VIEÁT CHO PLC NEÀN;;;;;;;;;;;;;;;;;;;VIET NGAY 04/11/2000;CHUONG TRINH CHO PHEP GIAO TIEP VOI BOARD GIAO DIEN VA MAY TINH ;O CHE DO SLAVE VA IO PLC O CHE DO MASTER;DIEU KHIEN BANG SWITCH CHON MODE HOAT DONG ;*********************************************************;- Chuong trinh nhan phat du lieu tu port noi tiep; voi toc do 9600 1 start bit ,1 stop bit,bit thu 9;- Chuong trinh viet theo kieu ngat.Cu 1S goi 10 byte ; du lieu den Slave , nhan ve 10 byte;- Byte dau tien la byte dia chi, 8 byte du lieu, byte; cuoi cung la 0DH; Neu byte thu 10 khong phai la 0DH thi bao loi ;- Vung dem thu bat dau tu 50H;- Vung dem phat bat dau tu 60H;*********************************************************; CHUONG TRINH CHO MASTER CO DIA CHI 00H; CHUONG TRINH CHO SLAVER CO DIA CHI 01H;++++++++++++++++++KHAI BAO CAC BIEN VA HANG++++++++++++++;*********************************************************;NGO VAO:lay gia tri tu byte dem thu chep vao IN_ST;---------------------------------------------------------IN_ST EQU 22H ;BYTE TRANG THAI NGO VAOIN1 BIT 10H ;BIT=1:DONG,BIT=0:NGATIN2 BIT 11HIN3 BIT 12HIN4 BIT 13HIN5 BIT 14HIN6 BIT 15H;*********************************************************;NGO RA :xuat ra OUT_ST roi chep vao byte dem phat;---------------------------------------------------------OUT_ST EQU 23H ;BYTE TRANG THAI NGO RAOUT1 BIT 18H ;BIT=1:DONG,BIT=0:NGATOUT2 BIT 19HOUT3 BIT 1AHOUT4 BIT 1BHLOI BIT 1FH;********************************************************** dcMas EQU 00H dcSle EQU 01H DCMPLC EQU 02H DCSPLC EQU 03H demt EQU 50H demp EQU 60H bien1 EQU 5EH bien2 EQU 5FH bien3 EQU 5CH bien4 EQU 5BH ;chua d/c Slave bien5 EQU 5AH ;chua THOI GIAN CHO count EQU 10000 chon1 EQU 2 chon2 EQU 1 th EQU 1 ;----------------------------------------------RUN BIT P3.4 ;LED RUNNAP BIT P3.5 ;LED NAPPRO_G BIT P3.3 ;CONG TAC NAP CHUONG TRINHRUN_G BIT P3.2 ;CONG TAC CHAY CHUONG TRINHTAM1 BIT 00H ;BIT TAM NGO VAO

Page 3: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

TAM2 BIT 01H ;BIT TAM NGO VAOTAM3 BIT 02H ;BIT TAM DE XUAT NGO RACO_1 BIT 03H ; CO_2 BIT 04H ; CO_T1 BIT 05H ; CO_T2 BIT 06H ; CO_L1 BIT 07H ; KT BIT 08H ;CO KET THUC (LENH END)CO_3 BIT 09H ;BIT PHAT HIEN STARTCO_X BIT 0AH ;co bao che do quet va che do loadCO_TAM1 BIT 0BHCO_TAM2 BIT 0CHTAM4 BIT 0DHCO_L2 BIT 0EHCO_S1 BIT 0FHCO_S2 BIT 20H;--------------------------------------FLOAT EQU 3FH ;byte tamZ EQU 3EH ;BYTE TAM CHUA DIA CHI KHOIVAR1 EQU 3DH ;BIEN LUU TRU DU LIEU CUA TIMER,COUNTERVAR2 EQU 3CH ;BIEN XU LY CUA TIMER,COUNTERVAR3 EQU 3BH ;DX EQU 3AH ;BIEN DEM TIMERTEMP EQU 39HTEMP1 EQU 38H ;LUU DIA CHI KHOI(DPH)TEMP2 EQU 37H ;LUU DIA CHI KHOI(DPL)RISE EQU 36H ;chua dungREPL EQU 35H ;byte tamBITH EQU 34H ;byte cao cua data pointer dung cho dem bitBITL EQU 33H ;byte thap cua data pointer dung cho dem bitLUU_B EQU 32H ;byte luu bit tamBCAO EQU 31H ;DIA CHI DAU VUNG CHO TIMER,COUNTERBTHAP EQU 30H;--------------------------------------------------------------------STEP1

EQU 40H ;luu tru byte tam cua chuong trinh dem bitSTEP2 EQU 41H ;-----------------------------------------DBITC EQU 42H ;bien tang bitDMT EQU 43H ;DEMNEN EQU 44H ; FIRSTH EQU 45H ;BIEN LUU DIA CHI RAM DAU TIEN CUA DATA PLCFIRSTL EQU 46H;--------------------------------------------------------------------GIAY EQU 47HPHUT EQU 48HGIO EQU 49HTHU EQU 4AHNGAY EQU 4BHTHANG EQU 4CHNAM EQU 4DHCOMP1 EQU 4EHCOMP2 EQU 4FHCHU_X EQU 78H;--------------------------------------------------------- ORG 0000H LJMP BEGIN ORG 000BH LJMP T0ISR ORG 0023H LJMP SPISR ORG 30HBEGIN:

Page 4: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;________________________________________________;DOAN CHUONG TRINH RESET CAC GIA TRI BAN DAU ;********** START ***************************** CLR F0 CLR CO_1 CLR CO_2 CLR CO_L1 CLR CO_L2 CLR CO_T1 CLR CO_T2

CLR KT ;XOA BIT KET THUCCLR CO_XCLR P2.5MOV FIRSTH,#00HMOV FIRSTL,#00HMOV DPTR,#0400HMOV BCAO,DPHMOV BTHAP,DPLMOV DPTR,#0100HMOV BITH,DPHMOV BITL,DPL

;-------------------------------------; MOV DPTR,#1E00H ;BYTE 1E00H O RAM NGOAI LUU ANH OUTPUT

MOV IN_ST,#00HMOV OUT_ST,#00HMOV R0,#DEMTMOV DBITC,#0MOV DX,#0MOV Z,#50H ;Z CHUA MA TB

;-------------------------- MOV bien1,#0 MOV bien2,#chon1 MOV bien3,#chon2 MOV bien4,#0 MOV bien5,#chon1;------------------------- MOV A,87H ;TOC DO 19200 SETB ACC.7 MOV 87H,A;-------------------------- MOV SCON,#11110000B MOV TMOD,#21H MOV TH1,#-3 SETB TR1 SETB IP.1 MOV IE,#92H SETB TF0 ;************ END ******************************

;***********************************************; DOAN CHUONG TRINH CHINH; DOAN CHUONG TRINH NAY LUON ; QUET CHOUNG TRINH SAU 1MS;**************** START ************************XET:

JNB F0,$ CLR F0

JNB PRO_G,STOP_CT JNB RUN_G,CHAY_CTSETB RUN ;DEN SANG O CHE DO LOADSETB NAP

Page 5: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

LCALL GT_PRGMOV IN_ST,#00HMOV OUT_ST,#00HMOV DPTR,#1E00H ;RESET LAI ANH OUTPUTMOV A,#00HMOVX @DPTR,ASJMP XET

CHAY_CT: CLR RUN ;DEN SANG O CHE DO RUN

SETB NAPLCALL GT_IOSJMP XET

STOP_CT:CLR NAP ;DEN SANG CHE DO LOADSETB RUNMOV IN_ST,#00HMOV OUT_ST,#00HMOV DPTR,#1E00H ;RESET LAI ANH OUTPUTMOV A,#00HMOVX @DPTR,A

SJMP XET

;******************************************************************;CHUONG TRINH CON GIAO TIEP VOI BOARD GIAO DIEN; VA MAY TINH,LUC NAY PLC DANG O CHE DO SLAVE;*******************************************************************GT_PRG:

JNB CO_1,XETTCLR CO_1LCALL ANSWERSETB SM2SETB TI

XETT:JNB CO_2,ZCXCLR CO_2

ZCX: RET;**************************************************;CHUONG TRINH CON GIAO TIEP VOI IO PLC;**************************************************GT_IO: MOV DPTR,#1E00H ;LAY ANH OUTPUT TU RAM MOVX A,@DPTR MOV OUT_ST,A LCALL MAU ;LAY MAU PHAT LCALL CHO_NHAN ;CHO NHAN DU 3 BYTE MOV R1,#DEMT MOV IN_ST,@R1 ;LAY ANH INPUT TU BUFFER RECEIVE LCALL QUETCT MOV R1,#DEMP MOV @R1,OUT_ST ;XUAT ANH OUTPUT VAO BUFFER TRANSMIT MOV DPTR,#1E00H ;LUU ANH OUTPUT VAO RAM MOV A,OUT_ST MOVX @DPTR,ARET;****************************************; Chuong trinh tao ngat 1mS;**************START*********************T0ISR: PUSH ACC MOV CO_T1,C SETB F0 CLR TR0

Page 6: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV TH0,#HIGH(-count) MOV TL0,#LOW(-count) SETB TR0 POP ACC MOV C,CO_T1 RETI;***************END***********************;;*****************************************;DOAN CHUONG TRINH CON NGAT CONG NOI TIEP;************ START **********************SPISR:

PUSH ACCMOV CO_T2,CJNB PRO_G,SPICJNB RUN_G,NGAT_SJNB RI,SPI1LCALL CTNHANSSJMP SPIC

SPI1:LCALL CTRUYENSSJMP SPIC

NGAT_S:JNB RI,SPI2LCALL CTNHANM

SJMP SPICSPI2:

LCALL CTRUYENMSPIC:

POP ACCMOV C,CO_T2

RETI;**************END***************************************;;*******************************************************; CHUONG TRINH NHAN 10 BYTE,CHE DO SLAVE;**************START*************************************CTNHANS: JNB RI,$ CLR RI JNB RB8,CNT1S MOV A,SBUF CJNE A,#dcSle,CNTCS CLR SM2 MOV R0,#demt SJMP CNTCS CNT1S: MOV A,SBUF CJNE R0,#demt+8,CNT2S SETB SM2 CJNE A,#0DH,CNT3S LCALL ST_START LCALL KT_END SETB CO_1 SJMP CNTCSCNT2S: MOV @R0,A INC R0 SJMP CNTCSCNT3S: SETB CO_L1CNTCS: RET;************END**************************************;------------------------------------------------------

Page 7: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;CT CON CHEP DU LIEU VUA NHAN DUOC VAO VUNG DEMP;------------------------------------------------------ANSWER:

PUSH 00HPUSH 01HMOV R1,#DEMPMOV R0,#DEMT

WRITE:MOV A,@R0MOV @R1,AINC R0INC R1CJNE R0,#DEMT+8,WRITEPOP 01HPOP 00H RET

;*********************************************; CHUONG TRINH TRUYEN 10 BYTE,CHE DO SLAVE;**************START**************************CTRUYENS: JNB TI,$ CLR TI mov A,bien1 cjne A,#10,ctrS mov bien1,#0 sjmp ctrcSctrS: INC bien1 MOV A,bien1 CJNE A,#1,CTR1S SETB TB8 MOV SBUF,#dcMas MOV R0,#demp SJMP CTRCSCTR1S: CJNE A,#10,CTR2S CLR TB8 MOV SBUF,#0DH SETB CO_2 SJMP CTRCSCTR2S: CLR TB8 MOV A,@R0 MOV SBUF,A INC R0CTRCS: RET;************END*********************************;************************************************;CHUONG TRINH CON NHAN CHUOI START;NEU NHAN DUOC CHUOI START THI KHONG GHI VAO RAM;NOI MA BAT DAU LAI TU DIA CHI 80H;************************************************ST_START:

PUSH 00HPUSH ACCMOV R0,#DEMTMOV A,@R0CJNE A,#53H,QQQINC R0MOV A,@R0

Page 8: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

CJNE A,#74H,QQQINC R0MOV A,@R0CJNE A,#61H,QQQINC R0MOV A,@R0CJNE A,#72H,QQQINC R0MOV A,@R0CJNE A,#74H,QQQSETB CO_3

QQQ:JB CO_3,MMM ;CO_3=1 KHI START

MOV R0,#DEMT MOV DPH,FIRSTH ;LAY DIA CHI TRONG RAM

MOV DPL,FIRSTL ;---------------------UUU: MOV A,@R0 ;LAY DATA TU VUNG DEM THU

MOVX @DPTR,A ;GHI VAO RAM 8KNOP

INC R0 INC DPTR CJNE R0,#DEMT+8,UUU

MOV FIRSTH,DPH ;LUU DIA CHI TRONG RAMMOV FIRSTL,DPL ;---------------------SJMP QQC

MMM: MOV FIRSTH,#00H ;DAT LAI VUNG NHO DAUMOV FIRSTL,#00HCLR CO_3

QQC: POP ACCPOP 00HRET

Page 9: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;*************************************************;CHUONG TRINH CON KIEM TRA CHUOI END(MA LA FCH);*************************************************KT_END:

PUSH ACCpush 00HMOV R0,#DEMTMOV A,@R0CJNE A,#45H,KKKINC R0MOV A,@R0CJNE A,#4EH,KKKINC R0MOV A,@R0CJNE A,#44H,KKKSETB CO_XSETB TIMOV 60H,#00H ;RESET LAI DIA CHI DAU VUNG DEM PHATSETB RUN ;DEN SANG MAU VANGSETB NAP

KKK: POP 00HPOP ACCRET

;******************************************; CHUONG TRINH NHAN 3 BYTE,CHE DO MASTER;**************START***********************CTNHANM: JNB RI,$ CLR RI JNB RB8,CNT1 MOV A,SBUF CJNE A,#DCMPLC,CNTC CLR SM2 MOV R0,#demt SJMP CNTC CNT1: MOV A,SBUF CJNE R0,#demt+1,CNT2 SETB SM2 CJNE A,#0DH,CNT3 SETB CO_1 SJMP CNTCCNT2: MOV @R0,A INC R0 SJMP CNTCCNT3: SETB CO_L1CNTC: RET;************END************************;*************************************************; CHUONG TRINH TRUYEN 1 BYTE,CHE DO MASTER;**************START****************************CTRUYENM: JNB TI,$ CLR TI mov A,bien1 cjne A,#3,ctr3 mov bien1,#0 sjmp ctrcctr3: INC bien1 MOV A,bien1

Page 10: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

CJNE A,#1,CTR1 SETB TB8 MOV SBUF,#DCSPLC MOV R0,#demp SJMP CTRCCTR1: CJNE A,#3,CTR2 CLR TB8 MOV SBUF,#0DH SETB CO_2 SJMP CTRCCTR2: CLR TB8 MOV A,@R0 MOV SBUF,A INC R0CTRC: RET;************END************************;*****************************************; CHUONG TRINH TAO MAU 1S;****************START********************MAU: DJNZ bien2,MAUC MOV bien2,#chon1 DJNZ bien3,MAUC MOV bien3,#chon2 INC bien4 MOV A,bien4 CJNE A,#th+1,MAU1 MOV bien4,#1MAU1: SETB SM2 SETB TIMAUC: RET;*****************END***************************;***********************************************; CHUONG TRINH CHO NHAN DU LIEU;*****************START*************************CHO_NHAN: JNB CO_2,CANC JNB CO_1,CAN1 CLR CO_1 CLR CO_2 MOV bien5,#chon1 SJMP CANCCAN1: DJNZ bien5,CANC CLR CO_2 SETB CO_L1CANC: RET;*******************END****************************;**********************************************;CHUONG TRINH CON QUET CHUONG TRINH TRONG RAM ;NGOAI VOI DIA CHI BAT DAU LA 0000H ;**********************************************QUETCT:

MOV DBITC,#0MOV DX,#0MOV Z,#50H ;Z CHUA MA TB

Page 11: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

XRL OUT_ST,#00H MOV TEMP1,#00HMOV TEMP2,#00HMOV DPTR,#0000H ;X CHUA DIA CHI HIEN TAI

QUET_LAI:MOVX A,@DPTRCJNE A,Z,BLOIINC ZINC DPTRLCALL DE_CODEJNB KT,QUET_LAICLR LOICLR KTMOV DX,#0SJMP RA

BLOI: SETB LOIRA: RET;*******************************************;CHUONG TRINH CON NHAN DANG MA LENH;ma lenh chuong trinh tu F0-->FC;*******************************************DE_CODE:

MOVX A,@DPTRCJNE A,#0F0H,LAM2LCALL COM_ANDSJMP DONE

LAM2:CJNE A,#0F1H,LAM3LCALL COM_ORSJMP DONE

LAM3:CJNE A,#0F2H,LAM4LCALL COM_NANDSJMP DONE

LAM4:CJNE A,#0F3H,LAM5LCALL COM_NORSJMP DONE

LAM5:CJNE A,#0F4H,LAM6LCALL COM_NOTSJMP DONE

LAM6:CJNE A,#0F5H,LAM7LCALL COM_SRSJMP DONE

LAM7:CJNE A,#0F6H,LAM8LCALL COM_ONSJMP DONE

LAM8:CJNE A,#0F7H,LAM9LCALL COM_OFFSJMP DONE

LAM9:CJNE A,#0F8H,LAM10LCALL COM_PULSESJMP DONE

LAM10:CJNE A,#0F9H,LAM11LCALL COM_RETSJMP DONE

LAM11:CJNE A,#0FAH,LAM12LCALL COM_COUNTSJMP DONE

LAM12:CJNE A,#0FBH,LAM13LCALL COM_MOVSJMP DONE

LAM13:CJNE A,#0FDH,LAM14LCALL CLOCK_ON

Page 12: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

SJMP DONELAM14:CJNE A,#0FEH,LAM15

LCALL CLOCK_OFFSJMP DONE

LAM15:CJNE A,#0FFH,LAM16LCALL CLOCK_SETSJMP DONE

LAM16:CJNE A,#0D0H,LAM17LCALL MOV_EXTSJMP DONE

LAM17: CJNE A,#0FCH,DONESETB KT

DONE: RET;*******************************************;chuong trinh con lenh OR;*******************************************COM_OR:

INC DPTRMOVX A,@DPTR CJNE A,#78H,NIP5CLR TAM1SJMP FR1

NIP5: LCALL GOI_MAMOV TAM1,C

FR1: INC DPTRMOVX A,@DPTRCJNE A,#78H,NIP6CLR TAM2SJMP FR2

NIP6: LCALL GOI_MAMOV TAM2,C

FR2: INC DPTRMOVX A,@DPTRCJNE A,#78H,NIP7CLR CSJMP FR3

NIP7: LCALL GOI_MAFR3: ORL C,TAM1

ORL C,TAM2MOV TAM3,CINC DPTRMOVX A,@DPTRCJNE A,#78H,NIP8LCALL XUAT_TBSJMP QUIT1

NIP8: LCALL OUTPUTQUIT1:INC DPTR

MOV TEMP1,DPHMOV TEMP2,DPLRET

;*******************************************;CHUONG TRINH CON LENH AND;*******************************************COM_AND:

INC DPTRMOVX A,@DPTR CJNE A,#78H,NIP1SETB TAM1SJMP FOR1

NIP1:LCALL GOI_MAMOV TAM1,C

Page 13: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

FOR1: INC DPTRMOVX A,@DPTRCJNE A,#78H,NIP2SETB TAM2SJMP FOR2

NIP2: LCALL GOI_MAMOV TAM2,C

FOR2: INC DPTRMOVX A,@DPTRCJNE A,#78H,NIP3SETB CSJMP FOR3

NIP3: LCALL GOI_MAFOR3: ANL C,TAM1

ANL C,TAM2MOV TAM3,CINC DPTRMOVX A,@DPTRCJNE A,#78H,NIP4LCALL XUAT_TBSJMP QUIT

NIP4: LCALL OUTPUTQUIT: INC DPTR

MOV TEMP1,DPHMOV TEMP2,DPLRET

;********************************************;CHUONG TRINH CON LENH NAND;********************************************COM_NAND:

INC DPTRMOVX A,@DPTR CJNE A,#78H,SKP1SETB TAM1SJMP FUR1

SKP1: LCALL GOI_MAMOV TAM1,C

FUR1: INC DPTRMOVX A,@DPTRCJNE A,#78H,SKP2SETB TAM2SJMP FUR2

SKP2: LCALL GOI_MAMOV TAM2,C

FUR2: INC DPTRMOVX A,@DPTRCJNE A,#78H,SKP3SETB CSJMP FUR3

SKP3: LCALL GOI_MAFUR3: ANL C,TAM1

ANL C,TAM2CPL CMOV TAM3,CINC DPTRMOVX A,@DPTRCJNE A,#78H,SKP4LCALL XUAT_TBSJMP QUITT

SKP4: LCALL OUTPUTQUITT: INC DPTR

Page 14: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV TEMP1,DPHMOV TEMP2,DPLRET

;********************************************;CHUONG TRINH CON LENH NOR;*********************************************COM_NOR:

INC DPTRMOVX A,@DPTR CJNE A,#78H,SKP5CLR TAM1SJMP FRR1

SKP5: LCALL GOI_MAMOV TAM1,C

FRR1: INC DPTRMOVX A,@DPTRCJNE A,#78H,SKP6CLR TAM2SJMP FRR2

SKP6: LCALL GOI_MAMOV TAM2,C

FRR2: INC DPTRMOVX A,@DPTRCJNE A,#78H,SKP7CLR CSJMP FRR3

SKP7: LCALL GOI_MAFRR3: ORL C,TAM1

ORL C,TAM2CPL CMOV TAM3,CINC DPTRMOVX A,@DPTRCJNE A,#78H,SKP8LCALL XUAT_TBSJMP QUITT1

SKP8: LCALL OUTPUTQUITT1: INC DPTR

MOV TEMP1,DPHMOV TEMP2,DPLRET

;****************************************************;CHUONG TRINH CON ON DELAY;byte du lieu co the lay tu M1-->M16(70H--->7FH);hoac co the lay truc tiep tu #00-->#99;VAR1:byte dem chua gia tri dat cua on_delay timer;VAR2,VAR3:byte dem co danh cho on_delay ;****************************************************COM_ON:

inc DX ;dem timerlcall DEMTR INC DPTR ;DOC NGO VAOMOVX A,@DPTRLCALL GOI_MAMOV TAM1,CINC DPTR ;DOC BYTE DU LIEUMOVX A,@DPTRCJNE A,#100,ABB

ABB: JNC SSMOV VAR1,ASJMP DEN

Page 15: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

SS: PUSH 01HMOV R1,AMOV VAR1,@R1POP 01H

DEN: JNB TAM1,NHAY1MOV R2,VAR2INC R2CJNE R2,#100,NHAY2MOV VAR2,#0lcall traveMOV A,VAR3INC ACJNE A,VAR1,NHAY3MOV VAR3,#0lcall traveSETB TAM3INC DPTRMOVX A,@DPTRCJNE A,#78H,HALCALL XUAT_TBSJMP TANG

HA: LCALL OUTPUTSJMP TANG

NHAY1: MOV VAR2,#0MOV VAR3,#0lcall traveCLR TAM3INC DPTRMOVX A,@DPTRCJNE A,#78H,HA1LCALL XUAT_TBSJMP TANG

HA1: LCALL OUTPUTSJMP TANG

NHAY2:MOV VAR2,R2lcall traveINC DPTRSJMP TANG

NHAY3:MOV VAR3,Alcall traveINC DPTR

TANG:INC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;***********************************************************;CHUONG TRINH CON OFF_DELAY;byte du lieu co the lay tu M1-->M16(70H--->7FH);hoac co the lay truc tiep tu #00-->#99;VAR1:byte dem chua gia tri dat cua OFF_delay timer;VAR2,VAR3:byte dem co danh cho OFF_delay ;**********************************************************COM_OFF:

INC DXlcall demtrINC DPTRMOVX A,@DPTRLCALL GOI_MA

Page 16: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV TAM1,CINC DPTRMOVX A,@DPTRCJNE A,#100,ABC

ABC: JNC SASMOV VAR1,ASJMP TIEPP

SAS: PUSH 01HMOV R1,AMOV VAR1,@R1POP 01H

TIEPP: JB TAM1,NHAY4MOV R2,VAR2INC R2CJNE R2,#100,NHAY5MOV VAR2,#0LCALL TRAVEMOV A,VAR3INC ACJNE A,VAR1,NHAY6MOV VAR3,#0CLR TAM3lcall traveINC DPTRMOVX A,@DPTRCJNE A,#78H,HANLCALL XUAT_TBSJMP TANG1

HAN: LCALL OUTPUTSJMP TANG1

NHAY4:MOV VAR2,#0MOV VAR3,#0LCALL TRAVESETB TAM3INC DPTRMOVX A,@DPTRCJNE A,#78H,HAN1LCALL XUAT_TBSJMP TANG1

HAN1: LCALL OUTPUTSJMP TANG1

NHAY5:MOV VAR2,R2LCALL TRAVEINC DPTRSJMP TANG1

NHAY6:MOV VAR3,ALCALL TRAVEINC DPTR

TANG1:INC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;******************************************************;CHUONG TRINH CON PULSE_DELAY;:bit phat hien canh len cua pulse_delay;:bit trang thai cua pulse_delay;******************************************************

Page 17: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

COM_PULSE:INC DPTRMOVX A,@DPTRLCALL GOI_MAMOV TAM1,CINC DPTRMOVX A,@DPTRLCALL GOI_MAMOV TAM2,CJB TAM2,RSETINC DBITCLCALL NHAN_BITJNB TAM1,LUU1JB TAM4,KXETMOV C,TAM1MOV TAM4,CLCALL TRA_BITINC DBITCLCALL NHAN_BITCPL TAM4LCALL TRA_BITMOV C,TAM4MOV TAM3,CINC DPTRMOVX A,@DPTRCJNE A,#78H,OUTTOLCALL XUAT_TBSJMP TOUT

OUTTO:LCALL OUTPUTSJMP TOUT

RSET: INC DBITCINC DBITCCLR TAM3INC DPTRMOVX A,@DPTRCJNE A,#78H,EXTLCALL XUAT_TBSJMP TOUT

EXT: LCALL OUTPUTSJMP TOUT

LUU1: MOV C,TAM1MOV TAM4,CLCALL TRA_BITINC DBITCINC DPTRSJMP TOUT

KXET: INC DBITCINC DPTR

TOUT:INC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;****************************************************************;CHUONG TRINH CON RETTENTIVE ON _DELAY;VAR1:byte dem chua gia tri dat cua on_delay timer;VAR1,VAR2:byte dem co danh cho on_delay ;bit phat hien canh len ;bit phat hien dem xong chua;0:CHUA XONG,1:XONG ROI;*****************************************************************

Page 18: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

COM_RET:INC DXLCALL DEMTRINC DPTRMOVX A,@DPTRLCALL GOI_MAMOV TAM1,CINC DPTRMOVX A,@DPTRLCALL GOI_MAMOV TAM2,CINC DPTRMOVX A,@DPTRCJNE A,#100,FBI

FBI: JNC GMCMOV VAR1,ASJMP CHINH

GMC: PUSH 01HMOV R1,AMOV VAR1,@R1POP 01H

CHINH:JB TAM2,RESET2

INC DBITC LCALL NHAN_BIT

JB TAM4,DEML ;BIT=1:DEM CHUA XONG;BIT=0:DEM XONG INC DBITC LCALL NHAN_BIT

JNB TAM1,LUU2JB TAM4,BQUAMOV C,TAM1MOV TAM4,C

LCALL TRA_BIT DEC DBITC

SETB TAM4 LCALL TRA_BITDEML: MOV R2,VAR2

INC R2CJNE R2,#100,NHAY7MOV VAR2,#0LCALL TRAVEMOV A,VAR3INC ACJNE A,VAR1,NHAY8MOV VAR3,#0LCALL TRAVECLR TAM4 ;DA DEM XONG

LCALL TRA_BIT INC DBITC

SETB TAM3INC DPTRMOVX A,@DPTRCJNE A,#78H,OUTTO1LCALL XUAT_TBSJMP NDD

OUTTO1:LCALL OUTPUTSJMP NDD

NHAY7:INC DBITC MOV VAR2,R2

LCALL TRAVEINC DPTR

Page 19: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

SJMP NDDNHAY8:INC DBITC MOV VAR3,A

LCALL TRAVEINC DPTRSJMP NDD

RESET2:INC DBITC INC DBITC MOV VAR2,#0

MOV VAR3,#0LCALL TRAVECLR TAM3INC DPTRMOVX A,@DPTRCJNE A,#78H,OUTTO2LCALL XUAT_TBSJMP NDD

OUTTO2:LCALL OUTPUTSJMP NDD

LUU2: MOV C,TAM1MOV TAM4,C

LCALL TRA_BITINC DPTRSJMP NDD

BQUA: INC DPTRNDD:

INC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;*********************************************************;CHUONG TRINH CON COUNTER;byte du lieu co the lay tu M1-->M16(70H--->7FH);hoac co the lay truc tiep tu #00-->#99;VAR1:byte dem chua gia tri dat cua COUNTER;VAR2:byte dem co danh cho COUNTER;TAM4:bit phat hien canh len cua counter ;****************************************************COM_COUNT:

INC DXLCALL DEMTRINC DPTRMOVX A,@DPTRLCALL GOI_MAMOV TAM1,CINC DPTRMOVX A,@DPTRLCALL GOI_MAMOV TAM2,CINC DPTRMOVX A,@DPTRCJNE A,#100,ABD

ABD: JNC SS2MOV VAR1,ASJMP JUMP

SS2: PUSH 01HMOV R1,AMOV VAR1,@R1POP 01H

JUMP: JB TAM2,RESET3INC DBITC

Page 20: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

LCALL NHAN_BITJNB TAM1,LUU3JB TAM4,SBCMOV C,TAM1MOV TAM4,CLCALL TRA_BITMOV A,VAR2INC ACJNE A,VAR1,LUU4SETB TAM3INC DPTRMOVX A,@DPTRCJNE A,#78H,EXT1LCALL XUAT_TBSJMP NDE

EXT1: LCALL OUTPUTSJMP NDE

LUU3: MOV C,TAM1MOV TAM4,CLCALL TRA_BITINC DPTRSJMP NDE

LUU4: MOV VAR2,ALCALL TRAVEINC DPTRSJMP NDE

RESET3: MOV VAR2,#0LCALL TRAVECLR TAM3INC DPTRINC DBITCMOVX A,@DPTRCJNE A,#78H,SADLCALL XUAT_TBSJMP NDE

SAD: LCALL OUTPUTSJMP NDE

SBC: INC DPTRNDE: INC DPTR

MOV TEMP1,DPHMOV TEMP2,DPLRET

;*********************************************************;CHUONG TRINH CON SR_DELAY;*********************************************************COM_SR:

INC DPTRMOVX A,@DPTRLCALL GOI_MAMOV TAM1,CINC DPTRMOVX A,@DPTRLCALL GOI_MAMOV TAM2,CJB TAM1,SET1JNB TAM2,FILL

CLR TAM3SJMP FILL

SET1: JNB TAM2,SET2CLR TAM3SJMP FILL

Page 21: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

SET2: SETB TAM3FILL: INC DPTR

MOVX A,@DPTRCJNE A,#78H,EXT3LCALL XUAT_TBSJMP QUZ

EXT3: LCALL OUTPUTQUZ:

INC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;**************************************************;CHUONG TRINH CON LENH NOT;**************************************************COM_NOT:

INC DPTRMOVX A,@DPTRLCALL GOI_MACPL CMOV TAM3,CINC DPTRMOVX A,@DPTRCJNE A,#78H,TTLCALL XUAT_TBSJMP SDC

TT: LCALL OUTPUTSDC: INC DPTR

MOV TEMP1,DPHMOV TEMP2,DPLRET

;*************************************************;CHUONG TRINH CON LENH MOV ;VAR1:BYTE TAM DE LUU;*************************************************COM_MOV :

INC DPTRMOVX A,@DPTRCJNE A,#100,SVS

SVS: JNC LONHONPUSH ACCINC DPTRMOVX A,@DPTRMOV R1,APOP ACCMOV @R1,ASJMP FKC

LONHON:MOV R1,AMOV A,@R1MOV VAR1,AINC DPTRMOVX A,@DPTRMOV R1,AMOV A,VAR1MOV @R1,A

FKC: INC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;++++++++++++++++++++++++++++++++++++++++++++

Page 22: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;CHUONG TRINH CON CHEP KHOI DU LIEU THOI GIAN;++++++++++++++++++++++++++++++++++++++++++++COPY_TIME:

PUSH ACCMOV R1,#GIAY

TIMB: MOVX A,@DPTRMOV @R1,AINC DPTRINC R1CJNE R1,#GIAY+7,TIMBPOP ACCRET

;******************************************************;chuong trinh con lenh CLOCK ON;******************************************************CLOCK_ON:

INC DPTRACALL COPY_TIMEPUSH DPHPUSH DPLMOV A,GIAYCJNE A,#CHU_X,TIM1 ;TEST GIAY TU CHUONG TRINHSJMP FAIL ;NEU LA X THI KHONG LAM GI CA

TIM1: MOV DPTR,#1FF9H ;DOC GIAY TU REAL TIMEMOVX A,@DPTRCJNE A,GIAY,FAIL ;SO SANH GIAYMOV A,PHUTCJNE A,#CHU_X,TIM2 ;NEU PHUT LA X THISJMP DONG_RL ;DONG THOI DIEM GIAY

TIM2: MOV DPTR,#1FFAHMOVX A,@DPTRCJNE A,PHUT,FAILMOV A,GIOCJNE A,#CHU_X,TIM3SJMP DONG_RL

TIM3: MOV DPTR,#1FFBHMOVX A,@DPTRCJNE A,GIO,FAILMOV A,THUCJNE A,#CHU_X,TIM4SJMP DONG_RL

TIM4: MOV DPTR,#1FFCHMOVX A,@DPTRCJNE A,THU,FAILMOV A,NGAYCJNE A,#CHU_X,TIM5SJMP DONG_RL

TIM5: MOV DPTR,#1FFDHMOVX A,@DPTRCJNE A,NGAY,FAILMOV A,THANGCJNE A,#CHU_X,TIM6SJMP DONG_RL

TIM6: MOV DPTR,#1FFEHMOVX A,@DPTRCJNE A,THANG,FAILMOV A,NAMCJNE A,#CHU_X,TIM7SJMP DONG_RL

TIM7: MOV DPTR,#1FFFHMOVX A,@DPTR

Page 23: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

CJNE A,NAM,FAILDONG_RL:

SETB TAM3POP DPLPOP DPHMOVX A,@DPTRCJNE A,#78H,QWSLCALL XUAT_TBSJMP CLOC

QWS: LCALL OUTPUTSJMP CLOC

FAIL: POP DPLPOP DPH

CLOC: INC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;*************************************************************;CHUONG TRINH CON CLOCK OFF;*************************************************************CLOCK_OFF:

INC DPTRLCALL COPY_TIMEPUSH DPHPUSH DPLMOV A,GIAYCJNE A,#CHU_X,TIM8SJMP FAIL1

TIM8: MOV DPTR,#1FF9HMOVX A,@DPTRCJNE A,GIAY,FAIL1MOV A,PHUTCJNE A,#CHU_X,TIM9SJMP NGAT_RL

TIM9: MOV DPTR,#1FFAHMOVX A,@DPTRCJNE A,PHUT,FAIL1MOV A,GIOCJNE A,#CHU_X,TIM10SJMP NGAT_RL

TIM10: MOV DPTR,#1FFBHMOVX A,@DPTRCJNE A,GIO,FAIL1MOV A,THUCJNE A,#CHU_X,TIM11SJMP NGAT_RL

TIM11: MOV DPTR,#1FFCHMOVX A,@DPTRCJNE A,THU,FAIL1MOV A,NGAYCJNE A,#CHU_X,TIM12SJMP NGAT_RL

TIM12: MOV DPTR,#1FFDHMOVX A,@DPTRCJNE A,NGAY,FAIL1MOV A,THANGCJNE A,#CHU_X,TIM13SJMP NGAT_RL

TIM13: MOV DPTR,#1FFEHMOVX A,@DPTRCJNE A,THANG,FAIL1

Page 24: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV A,NAMCJNE A,#CHU_X,TIM14SJMP NGAT_RL

TIM14: MOV DPTR,#1FFFHMOVX A,@DPTRCJNE A,NAM,FAIL1

NGAT_RL:CLR TAM3POP DPLPOP DPHMOVX A,@DPTRCJNE A,#78H,QWSFLCALL XUAT_TBSJMP CLOCF

QWSF: LCALL OUTPUTSJMP CLOCF

FAIL1:POP DPLPOP DPH

CLOCF:INC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;******************************************************;CHUONG TRINH CON LENH CLOCK SET;******************************************************CLOCK_SET:

INC DPTRLCALL COPY_TIME ;CHEP DU LIEUPUSH DPHPUSH DPLMOV IE,#00H ;CAM CAC NGATMOV DPTR,#1FF8H ;CHO PHEP CAI DATMOV A,#10000000BMOVX @DPTR,A

MOV DPTR,#1FF9HMOV A,GIAY ;CAI DAT GIAYMOVX @DPTR,ANOPMOV DPTR,#1FFAHMOV A,PHUT ;CAI DAT PHUTMOVX @DPTR,ANOP MOV DPTR,#1FFBH MOV A,GIO ;CAI DAT GIOMOVX @DPTR,ANOP MOV DPTR,#1FFCH ; CAI DAT THUMOV A,THUMOVX @DPTR,ANOPMOV DPTR,#1FFDH MOV A,NGAY ;CAI DAT NGAYMOVX @DPTR,A NOPMOV DPTR,#1FFEHMOV A,THANG ;CAI DAT THANGMOVX @DPTR,A NOPMOV DPTR,#1FFFH MOV A,NAM ;CAI DAT NAMMOVX @DPTR,A

Page 25: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

NOPMOV DPTR,#1FF8H ;KHONG CHO PHEP CAI DATMOV A,#00HMOVX @DPTR,ANOPPOP DPLPOP DPHMOV IE,#92H ;CHO PHEP NGATMOV TEMP1,DPHMOV TEMP2,DPLRET

;*****************************************************************;CHUONG TRINH CON LENH MOVX;*****************************************************************MOV_EXT:

INC DPTRMOVX A,@DPTRMOV R2,AINC DPTRMOVX A,@DPTRMOV R3,AINC DPTRMOVX A,@DPTRMOV R4,AINC DPTRMOVX A,@DPTRMOV R5,A

;-----thuc hien phep cong 16 bit giua dia chi dau va length--------INC DPTRMOVX A,@DPTRMOV R6,AINC DPTRMOVX A,@DPTRADD A,R3XCH A,R6ADDC A,R2XCH A,R6 ;R6 LA BYTE CAOMOV R7,A ;R7 LA BYTE THAPMOV COMP1,R6MOV COMP2,R7

;-------ket thuc phep cong thi R6:high va R5:low------------------PUSH DPH ;CAT DPTR TRONG CHU KY QUET PLCPUSH DPL

;CJNE R2,#49H,TEST_INRCJNE R4,#49H,TEST_EX

;------------------RAM NOI---->RAM NOI---------------------MOV A,R3MOV R0,AMOV A,R5MOV R1,A

IN_L: MOV A,@R0MOV @R1,AINC R0INC R1MOV A,R0CJNE A,COMP2,IN_LSJMP FINISH

;--------------RAM NGOAI--->RAM NOI---------------------- TEST_INR:

CJNE R4,#49H,EX_EX

Page 26: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV DPH,R2MOV DPL ,R3MOV A,R5MOV R1,A

IN_LOP:MOVX A,@DPTRMOV @R1,AINC DPTRMOV R2,DPHMOV R3,DPLINC R1MOV A,R2CJNE A,COMP1,IN_LOPMOV A,R3CJNE A,COMP2,IN_LOPSJMP FINISH

;---------RAM NOI--->RAM NGOAI----------------------------------TEST_EX:

MOV A,R3MOV R1,AMOV DPH,R4MOV DPL,R5

EX_LOP: MOV A,@R1MOVX @DPTR,AINC DPTRINC R1MOV A,R1CJNE A,COMP2,EX_LOPSJMP FINISH

;----------------RAM NGOAI-->RAM NGOAI------------------------------EX_EX:

MOV DPH,R2MOV DPL,R3MOVX A,@DPTRINC DPTRMOV R2, DPHMOV R3, DPLMOV DPH,R4MOV DPL,R5MOVX @DPTR,AINC DPTRMOV R4, DPHMOV R5, DPLMOV A,R2CJNE A,COMP1,EX_EXMOV A,R3CJNE A,COMP2,EX_EX

;--------------xong phan RAM NGOAI-->RAM NGOAI-----------------FINISH:

POP DPLPOP DPHINC DPTRMOV TEMP1,DPHMOV TEMP2,DPLRET

;********************************************;CHUONG TRINH CON XUAT_TB;*******************************************XUAT_TB:

PUSH DPLPUSH DPH

Page 27: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV DPH,TEMP1MOV DPL,TEMP2MOVX A,@DPTRCJNE A,#50H,COT1

COT1:JC NONECJNE A,#60H,CONT2

CONT2:JNC CONT3LCALL XUAT_TB1SJMP NONE

CONT3:CJNE A,#70H,CONT4CONT4:JNC CONT5

LCALL XUAT_TB2SJMP NONE

CONT5:CJNE A,#7FH,CONT6CONT6:JNC NONE

LCALL XUAT_TB3NONE: POP DPH

POP DPLRET

;********************************************;CHUONG TRINH CON GOI_MA;********************************************GOI_MA:

CJNE A,#30H,SKIP1SKIP1:JC EXIT

CJNE A,#3FH,SKIP2SKIP2:JNC SKIP3

LCALL TEST_INLJMP EXIT

SKIP3:CJNE A,#48H,SKIP4SKIP4:JNC SKIP5

LCALL TEST_OUTLJMP EXIT

SKIP5:CJNE A,#50H,SKIP6SKIP6:JNC SKIP7

LCALL TEST_COLJMP EXIT

SKIP7:CJNE A,#60H,SKIP8SKIP8:JNC SKIP9

LCALL TEST_TB1LJMP EXIT

SKIP9:CJNE A,#70H,SKIP10SKIP10:JNC SKIP11

LCALL TEST_TB2LJMP EXIT

SKIP11:CJNE A,#7FH,SKIP12SKIP12:JNC EXIT

LCALL TEST_TB3EXIT: RET;********************************************;CHUONG TRINH CON NHAN DANG;(6 NGO VAO) MA NGO VAO TU 30H-->35H;********************************************TEST_IN:

CJNE A,#30H,A1MOV C,IN1LJMP THOAT

A1: CJNE A,#31H,A2MOV C,IN2LJMP THOAT

A2: CJNE A,#32H,A3

Page 28: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV C,IN3LJMP THOAT

A3: CJNE A,#33H,A4MOV C,IN4LJMP THOAT

A4: CJNE A,#34H,A5MOV C,IN5LJMP THOAT

A5: CJNE A,#35H,THOATMOV C,IN6

THOAT:RET

;**************************************************;CHUONG TRINH CON XUAT NGO RA VOI MA TU 40H-->47H(NGO RA);**************************************************OUTPUT:

CJNE A,#48H,TKCOTKCO: JC NRA

CJNE A,#50H,KHPKHP: JNC THOAT1

LCALL XUAT_COSJMP THOAT1

NRA: CJNE A,#40H,B1MOV C,TAM3MOV OUT1,CLJMP THOAT1

B1: CJNE A,#41H,B2MOV C,TAM3MOV OUT2,CLJMP THOAT1

B2: CJNE A,#42H,B3MOV C,TAM3MOV OUT3,CLJMP THOAT1

B3: CJNE A,#43H,THOAT1MOV C,TAM3MOV OUT4,C

THOAT1:RET

;************************************************************;CHUONG TRINH CON NHAN MA CO TU 48H-->4FH;***********************************************************TEST_CO:

CJNE A,#48H,B8MOV C,48HSJMP THOAT2

B8: CJNE A,#49H,B9MOV C,49HSJMP THOAT2

B9: CJNE A,#4AH,B10MOV C,4AHSJMP THOAT2

B10: CJNE A,#4BH,B11MOV C,4BHSJMP THOAT2

B11: CJNE A,#4CH,B12MOV C,4CHSJMP THOAT2

B12: CJNE A,#4DH,B13MOV C,4DHSJMP THOAT2

Page 29: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

B13: CJNE A,#4EH,B14MOV C,4EHSJMP THOAT2

B14: CJNE A,#4FH,THOAT2MOV C,4FH

THOAT2:RET;*****************************************;CHUONG TRINH CON NHAN MA TU 50H-->5FH;*****************************************TEST_TB1:

CJNE A,#50H,C1MOV C,50HSJMP THOAT3

C1: CJNE A,#51H,C2MOV C,51HSJMP THOAT3

C2: CJNE A,#52H,C3MOV C,52HSJMP THOAT3

C3: CJNE A,#53H,C4MOV C,53HSJMP THOAT3

C4: CJNE A,#54H,C5MOV C,54HSJMP THOAT3

C5: CJNE A,#55H,C6MOV C,55HSJMP THOAT3

C6: CJNE A,#56H,C7MOV C,56HSJMP THOAT3

C7: CJNE A,#57H,C8MOV C,57HSJMP THOAT3

C8: CJNE A,#58H,C9MOV C,58HSJMP THOAT3

C9: CJNE A,#59H,C10MOV C,59HSJMP THOAT3

C10: CJNE A,#5AH,C11MOV C,5AHSJMP THOAT3

C11: CJNE A,#5BH,C12MOV C,5BHSJMP THOAT3

C12: CJNE A,#5CH,C13MOV C,5CHSJMP THOAT3

C13: CJNE A,#5DH,C14MOV C,5DHSJMP THOAT3

C14: CJNE A,#5EH,C15MOV C,5EHSJMP THOAT3

C15: CJNE A,#5FH,THOAT3MOV C,5FH

THOAT3:RET;*********************************************;CHUONG TRINH CON NHAN MA TU 60H-->6FH;********************************************

Page 30: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

TEST_TB2:CJNE A,#60H,D1MOV C,60HSJMP THOAT4

D1: CJNE A,#61H,D2MOV C,61HSJMP THOAT4

D2: CJNE A,#62H,D3MOV C,62HSJMP THOAT4

D3: CJNE A,#63H,D4MOV C,63HSJMP THOAT4

D4: CJNE A,#64H,D5MOV C,64HSJMP THOAT4

D5: CJNE A,#65H,D6MOV C,65HSJMP THOAT4

D6: CJNE A,#66H,D7MOV C,66HSJMP THOAT4

D7: CJNE A,#67H,D8MOV C,67HSJMP THOAT4

D8: CJNE A,#68H,D9MOV C,68HSJMP THOAT4

D9: CJNE A,#69H,D10MOV C,69HSJMP THOAT4

D10: CJNE A,#6AH,D11MOV C,6AHSJMP THOAT4

D11: CJNE A,#6BH,D12MOV C,6BHSJMP THOAT4

D12: CJNE A,#6CH,D13MOV C,6CHSJMP THOAT4

D13: CJNE A,#6DH,D14MOV C,6DHSJMP THOAT4

D14: CJNE A,#6EH,D15MOV C,6EHSJMP THOAT4

D15: CJNE A,#6FH,THOAT4MOV C,6FH

THOAT4:RET;***********************************************;CHUONG TRINH CON NHAN MA TU 70H-->78H;***********************************************TEST_TB3:

CJNE A,#70H,E1MOV C,70HSJMP THOAT5

E1: CJNE A,#71H,E2MOV C,71HSJMP THOAT5

E2: CJNE A,#72H,E3MOV C,72H

Page 31: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

SJMP THOAT5E3: CJNE A,#73H,E4

MOV C,73HSJMP THOAT5

E4: CJNE A,#74H,E5MOV C,74HSJMP THOAT5

E5: CJNE A,#75H,E6MOV C,75HSJMP THOAT5

E6: CJNE A,#76H,E7MOV C,76HSJMP THOAT5

E7: CJNE A,#77H,E8MOV C,77HSJMP THOAT5

E8: CJNE A,#78H,THOAT5MOV C,78H

THOAT5:RET;*****************************************;CHUONG TRINH CON TEST_OUT DIA CHI TU 40H-->47H;****************************************TEST_OUT:

CJNE A,#40H,BG8MOV C,OUT1SJMP GHIM

BG8: CJNE A,#41H,BG9MOV C,OUT2SJMP GHIM

BG9: CJNE A,#42H,BG10MOV C,OUT3SJMP GHIM

BG10: CJNE A,#43H,GHIMMOV C,OUT4

GHIM: RET;*****************************************;CHUONG TRINH CON XUAT CO F1-->F8;*****************************************XUAT_CO:

CJNE A,#48H,CH9MOV C,TAM3MOV 48H,CSJMP POLE

CH9: CJNE A,#49H,CH10MOV C,TAM3MOV 49H,CSJMP POLE

CH10: CJNE A,#4AH,CH11MOV C,TAM3MOV 4AH,CSJMP POLE

CH11: CJNE A,#4BH,CH12MOV C,TAM3MOV 4BH,CSJMP POLE

CH12: CJNE A,#4CH,CH13MOV C,TAM3MOV 4CH,CSJMP POLE

CH13: CJNE A,#4DH,CH14MOV C,TAM3

Page 32: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV 4DH,CSJMP POLE

CH14: CJNE A,#4EH,CH15MOV C,TAM3MOV 4EH,CSJMP POLE

CH15: CJNE A,#4FH,POLEMOV C,TAM3MOV 4FH,C

POLE: RET;******************************************; CHUONG TRINH CON XUAT RA DIA CHI KHOI TU 50H-->5FH;******************************************XUAT_TB1:

CJNE A,#50H,CC1MOV C,TAM3MOV 50H,CLJMP QUIT3

CC1: CJNE A,#51H,CC2MOV C,TAM3MOV 51H,CSJMP QUIT3

CC2: CJNE A,#52H,CC3MOV C,TAM3MOV 52H,CSJMP QUIT3

CC3: CJNE A,#53H,CC4MOV C,TAM3MOV 53H,CSJMP QUIT3

CC4: CJNE A,#54H,CC5MOV C,TAM3MOV 54H,CSJMP QUIT3

CC5: CJNE A,#55H,CC6MOV C,TAM3MOV 55H,CSJMP QUIT3

CC6: CJNE A,#56H,CC7MOV C,TAM3MOV 56H,CSJMP QUIT3

CC7: CJNE A,#57H,CC8MOV C,TAM3MOV 57H,CSJMP QUIT3

CC8: CJNE A,#58H,CC9MOV C,TAM3MOV 58H,CSJMP QUIT3

CC9: CJNE A,#59H,CC10MOV C,TAM3MOV 59H,CSJMP QUIT3

CC10: CJNE A,#5AH,CC11MOV C,TAM3MOV 5AH,CSJMP QUIT3

CC11: CJNE A,#5BH,CC12MOV C,TAM3MOV 5BH,C

Page 33: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

SJMP QUIT3CC12: CJNE A,#5CH,CC13

MOV C,TAM3MOV 5CH,CSJMP QUIT3

CC13: CJNE A,#5DH,CC14MOV C,TAM3MOV 5DH,CSJMP QUIT3

CC14: CJNE A,#5EH,CC15MOV C,TAM3MOV 5EH,CSJMP QUIT3

CC15: CJNE A,#5FH,QUIT3MOV C,TAM3MOV 5FH,C

QUIT3: RET;*********************************************;CHUONG TRINH CON XUAT RA DIA CHI KHOI TU 60H-->6FH;********************************************XUAT_TB2:

CJNE A,#60H,DD1MOV C,TAM3MOV 60H,CLJMP QUIT4

DD1: CJNE A,#61H,DD2MOV C,TAM3MOV 61H,CSJMP QUIT4

DD2: CJNE A,#62H,DD3MOV C,TAM3MOV 62H,CSJMP QUIT4

DD3: CJNE A,#63H,DD4MOV C,TAM3MOV 63H,CSJMP QUIT4

DD4: CJNE A,#64H,DD5MOV C,TAM3MOV 64H,CSJMP QUIT4

DD5: CJNE A,#65H,DD6MOV C,TAM3MOV 65H,CSJMP QUIT4

DD6: CJNE A,#66H,DD7MOV C,TAM3MOV 66H,CSJMP QUIT4

DD7: CJNE A,#67H,DD8MOV C,TAM3MOV 67H,CSJMP QUIT4

DD8: CJNE A,#68H,DD9MOV C,TAM3MOV 68H,CSJMP QUIT4

DD9: CJNE A,#69H,DD10MOV C,TAM3MOV 69H,CSJMP QUIT4

Page 34: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

DD10: CJNE A,#6AH,DD11MOV C,TAM3MOV 6AH,CSJMP QUIT4

DD11: CJNE A,#6BH,DD12MOV C,TAM3MOV 6BH,CSJMP QUIT4

DD12: CJNE A,#6CH,DD13MOV C,TAM3MOV 6CH,CSJMP QUIT4

DD13: CJNE A,#6DH,DD14MOV C,TAM3MOV 6DH,CSJMP QUIT4

DD14: CJNE A,#6EH,DD15MOV C,TAM3MOV 6EH,CSJMP QUIT4

DD15: CJNE A,#6FH,QUIT4MOV C,TAM3MOV 6FH,C

QUIT4:RET;***********************************************;CHUONG TRINH CON XUAT RA DIA CHI KHOI TU 70H-->77H;***********************************************XUAT_TB3:

CJNE A,#70H,EE1MOV C,TAM3MOV 70H,CSJMP QUIT5

EE1: CJNE A,#71H,EE2MOV C,TAM3MOV 71H,CSJMP QUIT5

EE2: CJNE A,#72H,EE3MOV C,TAM3MOV 72H,CSJMP QUIT5

EE3: CJNE A,#73H,EE4MOV C,TAM3MOV 73H,CSJMP QUIT5

EE4: CJNE A,#74H,EE5MOV C,TAM3MOV 74H,CSJMP QUIT5

EE5: CJNE A,#75H,EE6MOV C,TAM3MOV 75H,CSJMP QUIT5

EE6: CJNE A,#76H,EE7MOV C,TAM3MOV 76H,CSJMP QUIT5

EE7: CJNE A,#77H,QUIT5MOV C,TAM3MOV 77H,C

QUIT5:RET;***************************************

Page 35: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;CHUONG TRINH CON DEM O NHO LUU GT CUA TIMER;*************************************** DEMTR:

PUSH DPLPUSH DPHPUSH ACCMOV A,DXMOV B,#2MUL ABDEC AMOV REPL,AMOV DPL,BTHAPMOV DPH,BCAO

GROW: INC DPTRDJNZ REPL,GROWMOVX A,@DPTRMOV VAR2,AINC DPTRMOVX A,@DPTRMOV VAR3,APOP ACCPOP DPHPOP DPL

RET;************************************************************;CHUONG TRINH CON TRA BYTE,MOI LAN TRA 2 BYTE;SO TT BYTE CHO BOI DBC;***************************************************************TRAVE:

PUSH DPLPUSH DPHPUSH ACCMOV A,DXMOV B,#2MUL ABDEC AMOV REPL,AMOV DPL,BTHAPMOV DPH,BCAO

GROW1:INC DPTRDJNZ REPL,GROW1MOV A,VAR2MOVX @DPTR,AINC DPTRMOV A,VAR3MOVX @DPTR,APOP ACC POP DPHPOP DPL

RET;************************************************;CHUONG TRINH CON DEM BIT,VUNG NHO ;CO DIA CHI DAU LA BASEBIT,SO TT BIT LAY TU;DBITC,KET QUA TRA VE CO C;************************************************ NHAN_BIT:

PUSH DPLPUSH DPHPUSH ACCMOV CO_TAM1,C

Page 36: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

CLR CMOV A,DBITCMOV B,#8DIV ABMOV LUU_B,AMOV STEP1,B ;STEP1 LUU VI TRI BIT CAN DICHINC LUU_BMOV DPH,BITHMOV DPL,BITL

ZXC: INC DPTRDJNZ LUU_B,ZXCMOVX A,@DPTRPUSH ACCRRC A

AGAIN:RRC ADJNZ STEP1,AGAINMOV TAM4,C ;TAM4 CHUA BIT CAN LAYPOP ACCMOVX @DPTR,AMOV C,CO_TAM1POP ACCPOP DPHPOP DPLRET

;**************************************;CHUONG TRINH CON TRA LAI BIT DA LAY;**************************************TRA_BIT:

PUSH DPLPUSH DPHPUSH ACCMOV CO_TAM1,CMOV A,DBITCMOV B,#8DIV ABMOV LUU_B,AMOV STEP1,B ;STEP1 LUU VI TRI BIT CAN DICH LAN 1INC LUU_BMOV DPH,BITHMOV DPL,BITL

ZXC1: INC DPTRDJNZ LUU_B,ZXC1MOVX A,@DPTR MOV FLOAT,A ;LUU BYTE CAN DICHCLR CMOV A,#8SUBB A,STEP1 MOV STEP2,A ;STEP2 LUU VI TRI DICH LAN 2MOV A,FLOATRRC A

AGAIN1:RRC ADJNZ STEP1,AGAIN1MOV C,TAM4

AGAIN2:RRC ADJNZ STEP2,AGAIN2MOVX @DPTR,AMOV C,CO_TAM1POP ACCPOP DPHPOP DPL RET

Page 37: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;*****************END********************** END;;;;;;;;;;;;;;;;Chuong trinh SLAVE CHO MPLC (IOPLC);;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;Viet ngay 4/11/2000;;;;;;;;;;;;;;;;;;;;;;;*********************************************************;- Chuong trinh nhan phat du lieu tu port noi tiep; voi toc do 9600 1 start bit ,1 stop bit,bit thu 9;- Chuong trinh viet theo kieu ngat.khi nhan duoc 3; byte tu Master thi tra lai 3 byte;- Byte dau tien la byte dia chi, 1 byte du lieu, byte; cuoi cung la 0DH; Neu byte thu 3 khong phai la 0DH thi bao loi ;- Vung dem thu bat dau tu 50H;- Vung dem phat bat dau tu 60H;CHUONG TRINH NAY SE NGAT NGO RA NEU KHONG NHAN TIN HIEU SAU 200MS;*********************************************************; CHUONG TRINH CHO MASTER CO DIA CHI 00H; CHUONG TRINH CHO SLAVER CO DIA CHI 01H;*********************************************************dcMas EQU 02HdcSle EQU 03Hdemt EQU 50Hdemp EQU 60HSTATUS EQU 22H ;BYTE TRANG THAI NGO VAOST_OUT EQU 23H ;BYTE TRANG THAI NGO RAbien1 EQU 5EHbien2 EQU 5FHbien3 EQU 5CHbien4 EQU 5BHbien5 EQU 5AHCOUNT EQU 1000 CO_1 BIT 7AH ; CO THU DUCO_2 BIT 7BH ; CO PHAT DU CO_L1 BIT 7CH ; CO LOI THU CO_L2 BIT 7DH ; CO LOI PHATCO_T1 BIT 7EH ; CO TAM 1CO_T2 BIT 7FH ; CO TAM 2 SIN1 BIT 10HSIN2 BIT 11HSIN3 BIT 12HSIN4 BIT 13HSIN5 BIT 14HSIN6 BIT 15HSO BIT 16HLOI BIT 17H;--------------------------------IN1 BIT P1.3IN2 BIT P1.2IN3 BIT P3.2IN4 BIT P3.3IN5 BIT P1.0IN6 BIT P1.1OUT1 BIT P1.7OUT2 BIT P1.6OUT3 BIT P1.5OUT4 BIT P1.4

;--------------------------------------------------------- ORG 0000H LJMP BEGIN

Page 38: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

ORG 000BH LJMP T0ISR ORG 0023H LJMP SPISR ORG 0030HBEGIN:;________________________________________________;DOAN CHUONG TRINH RESET CAC GIA TRI BAN DAU ;********** START ***************************** CLR F0 CLR CO_1 CLR CO_2 CLR CO_L1 CLR CO_L2

SETB OUT1SETB OUT2SETB OUT3SETB OUT4

;---------------------- MOV STATUS,#00H MOV ST_OUT,#00H

MOV bien1,#0 MOV SCON,#11110000B MOV TMOD,#21H MOV TH1,#-3 SETB TR1 SETB TF0 SETB IP.1 MOV IE,#92H;************ END ******************************;;***********************************************; DOAN CHUONG TRINH CHINH; DOAN CHUONG TRINH NAY LUON ; QUET CHUONG TRINH SAU 1MS;**************** START ************************XET: JNB F0,$ CLR F0 JNB CO_1,XET1;;;;;;;;;;;;;;;;;; CLR CO_1

MOV R7,#200 ;R7: NAP GIA TRI DEM LUIMOV R0,#DEMTMOV ST_OUT,@R0LCALL OUTPUTLCALL INPUTMOV R0,#DEMPMOV @R0,STATUS

SETB SM2 SETB TI

SJMP SKPXET1: DJNZ R7,SKP ;NEU KHONG NHAN DUOC TIN HIEU TU PLC

MOV ST_OUT,#00H ;TRONG TG 200 MS THI NGAT NGO RALCALL OUTPUTSJMP XET

SKP: JNB CO_2,XET CLR CO_2 MOV R7,#200 SJMP XET;;****************************************

Page 39: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

; Chuong trinh tao ngat 1mS;**************START*********************T0ISR: PUSH ACC MOV CO_T1,C CLR TR0 SETB F0 FORW: MOV TH0,#HIGH(-count) MOV TL0,#LOW(-count) SETB TR0 POP ACC MOV C,CO_T1 RETI;***************END***********************;;*****************************************;DOAN CHUONG TRINH CON NGAT CONG NOI TIEP;************ START **********************SPISR: PUSH ACC MOV CO_T2,C JNB RI,SPI1 LCALL CTNHAN SJMP SPI2SPI1: LCALL CTRUYENSPI2: POP ACC MOV C,CO_T2 RETI;**************END*********************** ;;******************************************; CHUONG TRINH NHAN 3 BYTE;**************START***********************CTNHAN: JNB RI,$ CLR RI JNB RB8,CNT1 MOV A,SBUF CJNE A,#dcSle,CNTC CLR SM2 MOV R0,#demt SJMP CNTC CNT1: MOV A,SBUF CJNE R0,#demt+1,CNT2 SETB SM2 CJNE A,#0DH,CNT3 SETB CO_1 SJMP CNTCCNT2: MOV @R0,A INC R0 SJMP CNTCCNT3: SETB CO_L1CNTC: RET;************END************************;;******************************************; CHUONG TRINH TRUYEN 3 BYTE;**************START***********************CTRUYEN:

Page 40: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

JNB TI,$ CLR TI mov A,bien1 cjne A,#3,ctr3 mov bien1,#0 sjmp ctrcctr3: INC bien1 MOV A,bien1 CJNE A,#1,CTR1 SETB TB8 MOV SBUF,#dcMas MOV R0,#demp SJMP CTRCCTR1: CJNE A,#3,CTR2 CLR TB8 MOV SBUF,#0DH SETB CO_2 SJMP CTRCCTR2: CLR TB8 MOV A,@R0 MOV SBUF,A INC R0CTRC: RET;************END************************;***********************************************;chuong trinh con nhan ngo vao input;chua trong byte STATUS;BIT=0:NGAT;BIT=1:DONG;***********************************************INPUT:

PUSH ACCMOV C,IN1MOV SIN1,C

MOV C,IN2MOV SIN2,CMOV C,IN3MOV SIN3,CMOV C,IN4MOV SIN4,CMOV C,IN5MOV SIN5,CMOV C,IN6MOV SIN6,CMOV A,STATUSANL A,#00111111BCPL AMOV STATUS,APOP ACCRET

;************************************;CHUONG TRINH CON DONG NGAT NGO RA;************************************OUTPUT:

PUSH ACCMOV A,ST_OUTANL A,#10001111B ;LAY 4 BIT THAPJNB ACC.0,CLS1

Page 41: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

CLR OUT1 ;DONG OUT1SJMP SKIP1

CLS1: SETB OUT1SKIP1:

JNB ACC.1,CLS2CLR OUT2 ;DONG OUT2SJMP SKIP2

CLS2: SETB OUT2SKIP2:

JNB ACC.2,CLS3CLR OUT3 ;DONG OUT3SJMP SKIP3

CLS3: SETB OUT3SKIP3:

JNB ACC.3,CLS4CLR OUT4 ;DONG OUT4SJMP SKIP4

CLS4: SETB OUT4SKIP4:

JNB ACC.7,WENT ;XET BAO LOISETB OUT1SETB OUT2SETB OUT3SETB OUT4

WENT: POP ACCRET

;*********************end*************************************END;----------------------------------------------------------------------

Page 42: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;******************************************************************;CHUONG TRINH DIEU KHIEN BOARD GIAO DIEN LAP TRINH CHO PLC;viet ngay 11/10/2000,HIEU CHINH NGAY 11/11/2000;CHUONG TRINH GIAO DIEN CHU YEU LA QUET LED VA QUET PHIM ;******************************************************************TIME EQU 2000 ;DELAY 2MSTAT EQU 37 ;TAT LEDCHAM EQU 38 ;CHAM LEDDCMAS EQU 00HDCSLE EQU 01HDEMT EQU 50HDEMP EQU 60HHTH1 EQU 30H ;CAC O NHO XUAT LEDHTH2 EQU 31HHTH3 EQU 32HHTH4 EQU 33HHTH5 EQU 34HHTH6 EQU 35H;-----------------------------------------------------------------------------------ROW EQU 36H ; THU TU HANGLIMTB EQU 37H ; GIOI HAN SO HANG TRONG KHOIROWC EQU 38H ; HANG KE CHOT(SAU CUNG)SEL_IN EQU 39H ; KHA NANG CHON NGO VAOMAX_IN EQU 3AH ; TRI SO TOI DA THEO SAU NGO VAOFIRST_IN EQU 3BH ; TRI SO MA NGO VAO DAU TIENBCD1 EQU 3CH ; O NHO CHUA SO BCD XUAT LEDBCD2 EQU 3DH ;TT_TB EQU 3EH ; CHUA THU TU KHOIINPUT EQU 3FH ; XAC DINH LOAI NGO VAOGT_IN EQU 40H ; CHUA GIA TRI NGO VAOCODE_O EQU 41H ; CHUA GIA TRI MA LENHSTEP EQU 42H ; CHUA VI TRI QUET LED;********************************************;43H,44H,45H,46H:DUNG CHO CAC HAM DELAY;********************************************FLASH1 EQU 47H ;BIEN DEM NHAY LEDFLASH2 EQU 48H ;MODE EQU 49H ;DEM MODE(MENU)LUU1 EQU 4AH ;LUU CON TRO VUNG DEM DU LIEU CT PLCLUU2 EQU 4BH;--------------------------------------------------------------BIEN5 EQU 7FHBIEN4 EQU 7EHBIEN3 EQU 7DHBIEN2 EQU 7CHBIEN1 EQU 7BHTAM EQU 7AHLEDX EQU 79HNHAY EQU 78HCHON1 EQU 10CHON2 EQU 1THO EQU 1OP EQU 0F_ADD EQU 80HCO_1 BIT 7AHCO_2 BIT 7BHCO_L1 BIT 7CHCO_L2 BIT 7DHCO_T1 BIT 7EH

Page 43: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

CO_T2 BIT 7FHBITT BIT 79HBFLASH BIT 78H ;CHO PHEP CHOP TAT LEDBNNH BIT 77H ;BIT CHOP TATOK BIT 76HPHAT BIT 75H;---------------------------------------------------------;DINH NGHIA CAC NUT NHAN;--------------------------------------------------------KEY1 BIT P3.4KEY2 BIT P3.3KEY3 BIT P3.2KEY4 BIT P2.6KEY5 BIT P2.7;********************************************************

ORG 0000HSJMP BEGINORG 000BHLJMP ISR_TF0ORG 0030H

;**********************************************************;doan chuong trinh reset cac gia tri ban dau;**********************************************************

BEGIN:MOV HTH1,#0MOV HTH2,#0MOV HTH3,#0MOV HTH4,#0MOV HTH4,#0MOV HTH5,#0MOV STEP,#HTH1MOV R1,#7FHMOV CODE_O,#0EFHMOV TT_TB,#1MOV FLASH1,#150MOV FLASH2,#2CLR CO_1CLR CO_2CLR CO_L1CLR CO_L2CLR CO_T1CLR CO_T2CLR BITTCLR OKCLR PHATMOV 60H,#73H ;CHUOI STARTMOV 61H,#74HMOV 62H,#61HMOV 63H,#72HMOV 64H,#74HMOV 65H,#78HMOV 66H,#78HMOV 67H,#78HMOV BIEN1,#0MOV BIEN2,#CHON1MOV BIEN3,#CHON2MOV BIEN4,#0MOV BIEN5,#CHON1MOV MODE,#0MOV NHAY,#0MOV ROW,#1

Page 44: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV BCD1,#0MOV BCD2,#0MOV LUU1,#80HMOV LUU2,#0

;-------------------------------------------------------------------MOV LIMTB,#6 MOV ROWC,#0 MOV SEL_IN,#0 MOV MAX_IN,#0 MOV FIRST_IN,#0 MOV INPUT,#0 MOV GT_IN,#0MOV TAM,#0

;************************************************MOV TMOD,#21HMOV TH0,#HIGH(-TIME)MOV TL0,#LOW(-TIME)MOV TH1,#-3SETB TR0SETB TR1

MOV SCON,#11110000BSETB IP.1MOV IE,#92H ;CHO NGAT SERIAL

;**************************************************;doan chuong trinh chinh luon quet chuong trinh ;sau 2ms;**************************************************MAIN:

JNB F0,MAINCLR F0LCALL LEDD ;QUET LEDLCALL TEST_KEY ;QUET PHIM NHANSJMP MAIN

;***************************************************;cac chuong trinh con delay;***************************************************DELAY5:

MOV 46H,#250DL5: JNB F0,$

CLR F0LCALL LEDDDJNZ 46H,DL5RET

;---------------------------------------------------DELAY1:

MOV 45H,#25DL3: JNB F0,$

CLR F0LCALL LEDDDJNZ 45H,DL3RET

;--------------------------------------------------DELAY1S:

MOV 43H,#2DL1S: MOV 44H,#250DL1: JNB F0,$

CLR F0LCALL LEDDDJNZ 44H,DL1DJNZ 43H,DL1S

RET

Page 45: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;******************************************************;CHUONG TRINH CON XULY DU LIEU PHAT DI;******************************************************XULY:

MOV R0,#DEMPMOV @R0,#DCMASLCALL COPYMOV R0,#DEMP+9MOV @R0,#0DHRET

;******************************************************;CHUONG TRINH CON CHEP DU LIEU TU VUNG DEM DU LIEU;SANG VUNG DEM PHAT;******************************************************COPY:

PUSH 00HPUSH 01HPUSH ACC MOV R0,LUU1MOV R1,#DEMP+1

KKK: MOV A,@R0MOV @R1,AINC R0INC R1CJNE R1,#DEMP+8,KKKMOV LUU1,R0MOV A,LUU1CLR CCJNE A,LUU2,XEM

XEM: JC YESSETB OK

YES: POP ACCPOP 01HPOP 00HRET

;******************************************;CHUONG TRINH CON TRUYEN DU LIEU TOI SLAVER;DU LIEU DUOC GHI TRONG VUNG DEM PHAT ;******************************************CTRUYEN: JNB TI,$

CLR TIJNB PHAT,CTRC ;PHAT=1:CHU QUAN;PHAT=0:KHACH QUANINC BIEN1MOV A,BIEN1 ;DOC BIEN1 DEMCJNE A,#1,SKIP1 ;SENT BYTE ADDRESS TO MASTERSETB TB8MOV R0,#DEMPMOV A,@R0MOV SBUF,ASJMP CTRC

SKIP1:CJNE A,#11,CTR1SETB SM2MOV BIEN1,#0MOV R0,#DEMPSETB CO_2 ;BAO PHAT DUCLR PHAT ;BAO DA PHAT XONG

SJMP CTRCCTR1:

CLR TB8

Page 46: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

INC R0MOV A,@R0MOV SBUF,A

CTRC:RET

;******************************************;CHUONG TRINH NHAN 10 BYTE,CHE DO MASTER;**************START***********************CTNHAN: JNB RI,$ CLR RI JNB RB8,CNT1 MOV A,SBUF CJNE A,#DCSLE,CNTC CLR SM2 MOV R0,#demt SJMP CNTC CNT1: MOV A,SBUF CJNE R0,#demt+8,CNT2 SETB SM2 CJNE A,#0DH,CNT3 SETB CO_1 SJMP CNTCCNT2: MOV @R0,A INC R0 SJMP CNTCCNT3: SETB CO_L1CNTC: RET;*****************************************; CHUONG TRINH TAO MAU 1S;****************START********************MAU: DJNZ bien2,MAUC MOV bien2,#chon1 DJNZ bien3,MAUC MOV bien3,#chon2 MAU1: SETB SM2 SETB TIMAUC: RET;*****************END***************************;********************************************;CHUONG TRINH CON LOAD CT PLC XUONG MPLC;********************************************LOAD:

JNB F0,$CLR F0LCALL C_LOAD ;hien chu LOADLCALL LEDDJB KEY4,LOAD ;wait chap nhan LCALL DELAY5JNB KEY4,$

LOADING:JNB F0,$CLR F0JNB OK,LD_TLCALL OKEYLCALL LEDDJB KEY4,LOADING LCALL DELAY5JNB KEY4,$

Page 47: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

SETB TICLR OKMOV MODE,#0SJMP LOADX

LD_T:LCALL WAITLCALL LEDDLCALL MAUJNB CO_2,LOADINGJNB CO_1,CAN1CLR CO_1CLR CO_2MOV bien5,#chon1SJMP CANC

CAN1:DJNZ bien5,LOADINGCLR CO_2SETB CO_L1SJMP LOADX

CANC: LCALL XULYSJMP LOADING

LOADX:RET

;**********************************************;chuong trinh xet cac nut cai dat du lieu;**********************************************TEST_KEY:

JB KEY1,MENU2 LCALL DELAY5JNB KEY1,$INC MODE

MENU2:JB KEY4,CHEDOX ;NHAN KEY4 SE LUU HANG VUA CAI DAT VAO RAMLCALL DELAY5 ;ROI CHUYEN LEN HANG KE TIEPJNB KEY4,$

TU: LCALL COMPILER ;DICH MA VAO VUNG RAM NOIINC ROW ;TANG THU TU HANG TRONG KHOIINC R1 ;TANG DIA CHI O NHO LUU MAMOV LUU2,R1MOV GT_IN,#0 ;NAP LAI GIA TRI DAUMOV INPUT,#0CJNE R1,#0FFH,D ;DIA CHI CUOI VUNG NHO LUU MALCALL SAI1

D: MOV A,ROW ;CJNE A,LIMTB,DUOC ;SO SANH HANG VA GIOI HAN HANG CUA KHOIMOV ROW,#1 ;NAP LAI GIA TRI HANGMOV CODE_O,#0EEH ;NAP LAI MA LENH DAU TIENMOV INPUT,#0 ;NAP LAI NGO VAO DAU TIENINC TT_TB ;TANG KHOI

;-----------------------------------------------; CHEDOX:

MOV A,MODE ;CJNE A,#1,MODE_T ;LJMP TH ;

MODE_T: ;CJNE A,#2,MODE_LMOV R0,#80HMOV R2,#0MOV R3,#0MOV R4,#0

Page 48: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

LCALL TEST ;SJMP TH ;

MODE_L: ;CJNE A,#3,TH ;LCALL LOAD ;MOV MODE,#0SJMP TH

;------------------------------------------------DUOC: MOV MODE,#1

MOV A,ROWCJNE A,#2,GOOD ;SO HANG LA 2 THI DAT TBLCALL DATTBSJMP TH

GOOD: MOV A,ROWCJNE A,ROWC,CHUA ;SO HANG BANG SO HANG KE CHOT CHUAMOV SEL_IN,#3 ;CHON NGO VAO =TB,F,I,QSJMP CAI

CHUA: MOV SEL_IN,#8CAI: LCALL DATT ;GOI CT CON CAI DAT NGO VAOTH: RET ;***********************************************;chuong trinh con bao sai khi vung nho lon hon FFH;***********************************************SAI1:

JNB F0,$CLR F0MOV HTH4,#24MOV HTH3,#31MOV HTH2,#14MOV HTH1,#27LCALL LEDDSJMP SAI1

RET;**********************************************;chuong trinh bao sai khi vung nho nho hon 80H;O NHO 4EH?;**********************************************SAI2:

JNB F0,$CLR F0MOV R1,#80HMOV ROW,4EHLCALL LEDDJNB KEY4,SAI2LJMP TEST_KEYRET

;*********************************************;chuong trinh con dat tri o hang 2 cua khoi;*********************************************DATTB:

JNB F0,$CLR F0LCALL LEDDJB KEY2,CONT ;KEY 2 CHO PHEP CHON ma lenhLCALL DELAY1JNB KEY2,$INC CODE_O ;TANG MA LENHMOV A,CODE_OCJNE A,#0FFH,CONT ;SO SANH VOI MA CUOI CUNGMOV CODE_O,#0EEH

CONT: LCALL KTRB

Page 49: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

HTNB: JB KEY4,DWNBLCALL DELAY5JNB KEY4,$LJMP TU ;NHAY DEN PHAN SET TANG LENH

DWNB: JB KEY3,DATTBLCALL DELAY1JNB KEY3,$DEC CODE_O ;TANG MA LENHMOV A,CODE_OCJNE A,#0EEH,CONT ;SO SANH VOI MA CUOI CUNGMOV CODE_O,#0FFHSJMP CONTRET

;------------------------------------------; CHUONG TRINH CON LED_TEST;------------------------------------------LED_TEST:

MOV A,R4LCALL BINTOBCDMOV HTH6,BCD1MOV HTH5,BCD2

RET;************************************;chuong trinh con test ma lenh;************************************TEST: JNB F0,$

CLR F0LCALL C_TESTLCALL LEDD

;---------cho nhan nut de CHAP NHAN -------------JB KEY4,TEST LCALL DELAY5JNB KEY4,$

;---------XU LY NHAN LENH------------------------TEST_N:

JNB F0,$CLR F0LCALL LED_TESTLCALL LEDDJB KEY2,XETH LCALL DELAY5JNB KEY2,$INC R4INC R0SJMP VIHA

XETH: JB KEY3,TEST_N LCALL DELAY5JNB KEY3,$DEC R4DEC R0

VIHA:MOV A,@R0CJNE A,#0FCH,JPTO

;-------xu ly phan lenh end va cho thoat ra---------CHO_T:

JNB F0,$CLR F0LCALL LEDDMOV HTH1,#13MOV HTH2,#23MOV HTH3,#14

Page 50: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV HTH4,#TATMOV HTH5,#TATMOV HTH6,#TATJB KEY4,CHO_T LCALL DELAY5JNB KEY4,$LJMP EXIT_T

;--------- xu ly cac lenh khac ------------------JPTO: CJNE A,#30H,SKIP1XSKIP1X:

JC TEST_NCJNE A,#36H,SKIP2

SKIP2:JNC SKIP3LCALL TEST_INLJMP TEST_N

SKIP3:CJNE A,#48H,SKIP4

SKIP4:JNC SKIP5LCALL TEST_OUTLJMP TEST_N

SKIP5:CJNE A,#50H,SKIP6SKIP6:

JNC SKIP7XLCALL TEST_COLJMP TEST_N

SKIP7X: CJNE A,#0E0H,SKIP15SKIP15:

JNC SKIP16CJNE R3,#1,SKIP8LCALL TEST_TB

NH_TAM:LJMP TEST_N

SKIP8:CJNE R3,#2,SKIP9LCALL DULIEULJMP TEST_N

SKIP9:CJNE R3,#3,NH_TAMLCALL O_NHO LJMP TEST_N

SKIP16:LCALL MALENHLJMP TEST_N

EXIT_T: RET;--------------------------------------------;CHUONG TRINH TEST_IN;--------------------------------------------TEST_IN:

MOV HTH4,#TATMOV HTH3,#18SUBB A,#30HLCALL BINTOBCDMOV HTH1,BCD2MOV HTH2,BCD1 RET

;--------------------------------------------;CHUONG TRINH TEST_OUT;--------------------------------------------TEST_OUT:

Page 51: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV HTH4,#TATMOV HTH3,#26SUBB A,#40HLCALL BINTOBCDMOV HTH1,BCD2MOV HTH2,BCD1 RET

;--------------------------------------------;CHUONG TRINH TEST_CO;--------------------------------------------TEST_CO:

MOV HTH4,#TATMOV HTH3,#15

SUBB A,#48HLCALL BINTOBCDMOV HTH1,BCD2MOV HTH2,BCD1 RET

;--------------------------------------------;CHUONG TRINH TEST_TB;--------------------------------------------TEST_TB: MOV HTH4,#29

MOV HTH3,#11 SUBB A,#50H

LCALL BINTOBCDMOV HTH1,BCD2MOV HTH2,BCD1 RET

;--------------------------------------------;CHUONG TRINH DULIEU;--------------------------------------------DULIEU: MOV HTH2,#CHAM

MOV HTH1,#0LCALL BINTOBCDMOV HTH3,BCD2MOV HTH4,BCD1 RET

;--------------------------------------------;CHUONG TRINH O_NHO;--------------------------------------------O_NHO: MOV HTH4,#22

MOV HTH3,#0 SUBB A,#70H

LCALL BINTOBCDMOV HTH1,BCD2MOV HTH2,BCD1 RET

;--------------------------------------------;CHUONG TRINH MALENH;--------------------------------------------MALENH:

CJNE A,#0F0H,LOR_TMOV HTH1,#13MOV HTH2,#23MOV HTH3,#10MOV HTH4,#TATMOV R3,#1LJMP KETT_T

Page 52: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

LOR_T:CJNE A,#0F1H,NAND_TMOV HTH1,#27MOV HTH2,#24MOV HTH3,#TATMOV HTH4,#TATMOV R3,#1LJMP KETT_T

NAND_T:CJNE A,#0F2H,NOR_TMOV HTH1,#13MOV HTH2,#23MOV HTH3,#10MOV HTH4,#23MOV R3,#1LJMP KETT_T

NOR_T:CJNE A,#0F3H,LNOT_TMOV HTH1,#27MOV HTH2,#24MOV HTH3,#23MOV HTH4,#TATMOV R3,#1LJMP KETT_T

LNOT_T:CJNE A,#0F4H,RS_TMOV HTH1,#29MOV HTH2,#24MOV HTH3,#23MOV HTH4,#TATMOV R3,#1LJMP KETT_T

RS_T: CJNE A,#0F5H,ON_D_TMOV HTH1,#28MOV HTH2,#27MOV HTH3,#TATMOV HTH4,#TATMOV R3,#1LJMP KETT_T

ON_D_T:CJNE A,#0F6H,OF_D_TMOV HTH1,#13MOV HTH2,#36MOV HTH3,#23MOV HTH4,#24LJMP KETT_T

OF_D_T:CJNE A,#0F7H,PL_D_TMOV HTH1,#13MOV HTH2,#36MOV HTH3,#15MOV HTH4,#24

LJMP KETT_T

PL_D_T:CJNE A,#0F8H,RT_D_TMOV HTH1,#13MOV HTH2,#36MOV HTH3,#21MOV HTH4,#25

LJMP KETT_T

Page 53: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

RT_D_T:CJNE A,#0F9H,CNT_TMOV HTH1,#13MOV HTH2,#36MOV HTH3,#29MOV HTH4,#27

LJMP KETT_TCNT_T:

CJNE A,#0FAH,LMOV_TMOV HTH1,#29MOV HTH2,#23MOV HTH3,#12MOV HTH4,#TATLJMP KETT_T

LMOV_T:CJNE A,#0FBH,LEND_TMOV HTH1,#31MOV HTH2,#24MOV HTH3,#22MOV HTH4,#TAT

SJMP KETT_TLEND_T:

CJNE A,#0FCH,LCLKO_TMOV HTH1,#13MOV HTH2,#23MOV HTH3,#14MOV HTH4,#TAT

SJMP KETT_TLCLKO_T:

CJNE A,#0FDH,LCLKF_TMOV HTH1,#24MOV HTH2,#36MOV HTH3,#21MOV HTH4,#12

SJMP KETT_TLCLKF_T:

CJNE A,#0FEH,LCLKS_TMOV HTH1,#15MOV HTH2,#36MOV HTH3,#21MOV HTH4,#12

SJMP KETT_TLCLKS_T:

CJNE A,#0EFH,KETT_TMOV HTH1,#28MOV HTH2,#36MOV HTH3,#21MOV HTH4,#12

KETT_T:LCALL DELAY5RET

;****************************************************************;chuong trinh xet cac gia tri o hang 2 cua khoi;****************************************************************KTRB:

PUSH ACCMOV A,CODE_OCJNE A,#0F0H,LORMOV HTH1,#13MOV HTH2,#23MOV HTH3,#10

Page 54: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV HTH4,#TATMOV LIMTB,#7MOV ROWC,#6LJMP KETT

LOR: CJNE A,#0F1H,NANDMOV HTH1,#27MOV HTH2,#24MOV HTH3,#TATMOV HTH4,#TATMOV LIMTB,#7MOV ROWC,#6LJMP KETT

NAND: CJNE A,#0F2H,NORMOV HTH1,#13MOV HTH2,#23MOV HTH3,#10MOV HTH4,#23MOV LIMTB,#7MOV ROWC,#6LJMP KETT

NOR: CJNE A,#0F3H,LNOTMOV HTH1,#27MOV HTH2,#24MOV HTH3,#23MOV HTH4,#TATMOV LIMTB,#7MOV ROWC,#6LJMP KETT

LNOT: CJNE A,#0F4H,RSMOV HTH1,#29MOV HTH2,#24MOV HTH3,#23MOV HTH4,#TATMOV LIMTB,#5MOV ROWC,#4LJMP KETT

RS: CJNE A,#0F5H,ON_DMOV HTH1,#28MOV HTH2,#27MOV HTH3,#TATMOV HTH4,#TATMOV LIMTB,#6MOV ROWC,#5LJMP KETT

ON_D: CJNE A,#0F6H,OF_DMOV HTH1,#13MOV HTH2,#36MOV HTH3,#23MOV HTH4,#24MOV LIMTB,#6MOV ROWC,#5LJMP KETT

OF_D: CJNE A,#0F7H,PL_DMOV HTH1,#13MOV HTH2,#36MOV HTH3,#15MOV HTH4,#24MOV LIMTB,#6MOV ROWC,#5LJMP KETT

PL_D: CJNE A,#0F8H,RT_D

Page 55: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV HTH1,#13MOV HTH2,#36MOV HTH3,#21MOV HTH4,#25MOV LIMTB,#6MOV ROWC,#5LJMP KETT

RT_D: CJNE A,#0F9H,CNTMOV HTH1,#13MOV HTH2,#36MOV HTH3,#29MOV HTH4,#27MOV LIMTB,#7MOV ROWC,#6LJMP KETT

CNT: CJNE A,#0FAH,LMOVMOV HTH1,#29MOV HTH2,#23MOV HTH3,#12MOV HTH4,#TATMOV LIMTB,#7MOV ROWC,#6LJMP KETT

LMOV: CJNE A,#0FBH,LENDMOV HTH1,#31MOV HTH2,#24MOV HTH3,#22MOV HTH4,#TATMOV LIMTB,#5MOV ROWC,#4SJMP KETT

LEND: CJNE A,#0FCH,LCLKOMOV HTH1,#13MOV HTH2,#23MOV HTH3,#14MOV HTH4,#TATMOV LIMTB,#3MOV ROWC,#2SJMP KETT

LCLKO:CJNE A,#0FDH,LCLKFMOV HTH1,#24MOV HTH2,#36MOV HTH3,#21MOV HTH4,#12MOV LIMTB,#9MOV ROWC,#8SJMP KETT

LCLKF:CJNE A,#0FEH,LCLKSMOV HTH1,#15MOV HTH2,#36MOV HTH3,#21MOV HTH4,#12MOV LIMTB,#9MOV ROWC,#8SJMP KETT

LCLKS:CJNE A,#0EFH,KETTMOV HTH1,#28MOV HTH2,#36

Page 56: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV HTH3,#21MOV HTH4,#12MOV LIMTB,#8MOV ROWC,#7

KETT: LCALL DELAY5POP ACCRET

;*************************************;chuong trinh doi tu bin to BCD;*************************************BINTOBCD:

PUSH BMOV B,#10DIV ABMOV BCD2,BMOV BCD1,APOP B

RET ;*************************************************************;chuong trinh xet cai dat cac hang con lai cua khoi;*************************************************************DATT:

JNB F0,$CLR F0LCALL LEDDJB BFLASH,NKEJB KEY2,NKPLCALL DELAY5JNB KEY2,$INC INPUT ;TANG TYPE NGO VAO

GIAM: MOV GT_IN,#0 ;GIA TRI NGO VAO LA 0LCALL DKMOV A,INPUT ;CJNE A,SEL_IN,DATT ;?MOV INPUT,#0SJMP NKE

NKP:JB KEY3,NKELCALL DELAY5JNB KEY3,$DEC INPUTSJMP GIAM

NKE:JB KEY5,TESTV ;CHON LED THAY DOI GT NGO VAOLCALL DELAY5JNB KEY5,$

SETB BFLASHMOV A,NHAYINC NHAYCJNE A,#1,TESTVMOV NHAY,#0CLR BFLASH

TESTV:JB KEY2,HETNLCALL DELAY1JNB KEY2,$INC GT_INMOV A,GT_INCJNE A,MAX_IN,LUCKMOV GT_IN,#0

LUCK: LCALL DK1

Page 57: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

HETN: JB KEY3,DOWNLCALL DELAY1JNB KEY3,$DEC GT_INMOV A,GT_INCJNE A,#0,LUCKSJMP DATT

DOWN: JB KEY4,DATTLCALL DELAY5JNB KEY4,$LJMP TURET

;*********************************************;chuong trinh con xet cac loai ngo vao;*********************************************DK:

PUSH ACCMOV A,INPUTCJNE A,#1,CHUTB ;CHU FMOV HTH4,#TATMOV HTH3,#15MOV HTH2,#TATMOV HTH1,#0MOV MAX_IN,#9MOV FIRST_IN,#47HLJMP HDK

CHUTB:CJNE A,#2,CHUQMOV HTH4,#29MOV HTH3,#11MOV HTH2,#0MOV HTH1,#0MOV MAX_IN,#41MOV FIRST_IN,#4FHSJMP HDK

CHUQ: CJNE A,#3,CHUIMOV HTH4,#TATMOV HTH3,#26MOV HTH2,#tatMOV HTH1,#0MOV MAX_IN,#5MOV FIRST_IN,#3FHSJMP HDK

CHUI: CJNE A,#4,CHUMMOV HTH4,#TATMOV HTH3,#18MOV HTH2,#0MOV HTH1,#0MOV MAX_IN,#7MOV FIRST_IN,#2FHSJMP HDK

CHUM: CJNE A,#5,CHUXMOV HTH4,#22MOV HTH3,#0MOV HTH2,#0MOV HTH1,#0MOV MAX_IN,#17MOV FIRST_IN,#6FHSJMP HDK

CHUX: CJNE A,#6,GIATRIMOV HTH4,#TATMOV HTH3,#TAT

Page 58: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV HTH2,#TATMOV HTH1,#33MOV MAX_IN,#1SJMP HDK

GIATRI:CJNE A,#7,HDKMOV HTH4,#0MOV HTH3,#0MOV HTH2,#CHAMMOV HTH1,#0MOV MAX_IN,#100

HDK: POP ACCRET

;***************************************;chuong trinh con xet tri ngo vao;****************************************DK1: PUSH 06H

MOV R6,INPUT MOV A,GT_IN

LCALL BINTOBCD;CF

CJNE R6,#1,CTBMOV HTH1,BCD2MOV HTH2,TATSJMP HDK1

CTB: CJNE R6,#2,CQMOV HTH1,BCD2MOV HTH2,BCD1SJMP HDK1

CQ: CJNE R6,#3,CIMOV HTH1,BCD2MOV HTH2,TATSJMP HDK1

CI: CJNE R6,#4,CMMOV HTH1,BCD2MOV HTH2,TATSJMP HDK1

CM: CJNE R6,#5,GT1MOV HTH2,BCD2MOV HTH3,BCD1SJMP HDK1

GT1:CJNE R6,#7,CIMOV HTH3,BCD2MOV HTH4,BCD1

HDK1:LCALL DELAY1SPOP 06HRET

;**********************************************;chuong trinh con compiler sang ma plc;**********************************************COMPILER:

PUSH 06HPUSH 07HMOV R6,ROWMOV R7,INPUTCJNE R6,#1,LA2

Page 59: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV A,TT_TBADD A,#49HMOV @R1,ALJMP FUL

LA2: CJNE R6,#2,LA3MOV A,CODE_OMOV @R1,ALJMP FUL ; MA KET THUC 'END'

LA3: CJNE R7,#1,LA4 ;CHUYEN MA CHU F MOV A,GT_INADD A,#47HMOV @R1,ASJMP FUL

LA4: CJNE R7,#2,LA5 ;CHUYEN MA CHU TB MOV A,GT_INADD A,#4FHMOV @R1,ASJMP FUL

LA5: CJNE R7,#3,LA6 ;CHUYEN MA CHU Q MOV A,#GT_INADD A,#3FHMOV @R1,ASJMP FUL

LA6: CJNE R7,#4,LA7 ;CHUYEN MA CHU IMOV A,GT_INADD A,#2FHMOV @R1,ASJMP FUL

LA7: CJNE R7,#5,LA8 ;CHUYEN MA CHU M MOV A,GT_INADD A,#6FHMOV @R1,ASJMP FUL

LA8: CJNE R7,#6,LA9 ;CHUYEN MA CHU X MOV A,GT_INMOV @R1,#78HSJMP FUL

LA9: CJNE R7,#7,FUL ;CHUYEN MA GIA TRI MOV A,GT_INMOV @R1,A

FUL: POP 07HPOP 06HRET

;***********************************************;chuong trinh phuc vu ngat timer0 va nhay led;***********************************************ISR_TF0:

CLR TR0SETB F0

JNB BFLASH,LONGDJNZ FLASH1,LONG ;PHAN NHAY LEDMOV FLASH1,#150DJNZ FLASH2,LONGMOV FLASH2,#2CPL BNNH

LONG: MOV TH0,#HIGH(-TIME)MOV TL0,#LOW(-TIME)SETB TR0

RETI;*********************************************;chuong trinh xuat co dinh thu tu hang cua khoi

Page 60: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;***********************************************CODINH:

PUSH 07HMOV A,ROWMOV R7,ROWLCALL BINTOBCDMOV HTH6,BCD1MOV HTH5,BCD2CJNE R7,#1,VARMOV HTH4,#29MOV HTH3,#11MOV A,TT_TBLCALL BINTOBCDMOV HTH1,BCD2MOV HTH2,BCD1

VAR: POP 07H RET;************************************;CHUONG TRINH CON HIEN CHU 'START';************************************START:

MOV HTH6,#28 MOV HTH5,#29 MOV HTH4,#10MOV HTH3,#27MOV HTH2,#29MOV HTH1,#TAT

RET;************************************;CHUONG TRINH CON HIEN CHU 'TEST';************************************C_TEST:

MOV HTH6,#TATMOV HTH5,#TATMOV HTH4,#29MOV HTH3,#14MOV HTH2,#28MOV HTH1,#29

RET;************************************;CHUONG TRINH CON HIEN CHU 'LOAD';***********************************C_LOAD:

MOV HTH6,#TATMOV HTH5,#TATMOV HTH4,#21MOV HTH3,#24MOV HTH2,#10MOV HTH1,#13

RET;************************************;CHUONG TRINH CON HIEN CHU 'OKEY';************************************OKEY:

MOV HTH6,#TATMOV HTH5,#TATMOV HTH4,#24MOV HTH3,#20MOV HTH2,#14MOV HTH1,#34

RET

Page 61: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

;************************************;CHUONG TRINH CON HIEN CHU 'WAIT';************************************WAIT:

MOV HTH6,#TATMOV HTH5,#TATMOV HTH4,#32MOV HTH3,#10MOV HTH2,#18MOV HTH1,#29

RET;*************************************;chuong trinh con xuat va quet LED;************************************ LEDD:

MOV R0,STEP MOV A,MODE

CJNE A,#0,JUMP_CDLCALL STARTSJMP SKIP_CD

JUMP_CD:CJNE A,#1,SKIP_CDLCALL CODINH

SKIP_CD:CLR P2.0CLR P2.1 MOV A,LEDXCJNE A,#0,XLED1JNB BFLASH,LED1JNB BNNH,LED1CJNE A,NHAY,LED1SJMP BO

LED1: MOV P1,#4H SJMP XLED6XLED1: CJNE A,#1,XLED2

JNB BFLASH,LED2JNB BNNH,LED2CJNE A,NHAY,LED2SJMP BO

LED2: MOV P1,#5HSJMP XLED6

XLED2: CJNE A,#2,XLED3 MOV P1,#2H SJMP XLED6XLED3:

CJNE A,#3,XLED4MOV P1,#3HSJMP XLED6

XLED4:CJNE A,#4,XLED5MOV P1,#0HSJMP XLED6

XLED5:CJNE A,#5,XLED6MOV P1,#1H

XLED6: MOV A,@R0MOV DPTR,#TABLE1 MOVC A,@A+DPTR

Page 62: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MOV P0,A SETB P2.0NOP CLR P2.0MOV A,@R0MOV DPTR,#TABLE2MOVC A,@A+DPTR MOV P0,ASETB P2.1NOPCLR P2.1

BO: INC LEDXINC R0CJNE R0,#HTH6+1,EXITMOV STEP,#HTH1MOV LEDX,#0SJMP THOI

EXIT:MOV STEP,R0

THOI: RET;************************************************;bang tra;************************************************TABLE1:

DB 10100001B; SO 0DB 10000000B; SO 1DB 00110001B; SO 2DB 10110000B; SO 3DB 10010000B; SO 4DB 10110000B; SO 5DB 10110001B; SO 6DB 10000000B; SO 7DB 10110001B; SO 8DB 10110000B; SO 9DB 10010001B; CHU ADB 10110001B; CHU BDB 00100001B; CHU CDB 10110001B; CHU DDB 00110001B; CHU EDB 00010001B; CHU FDB 10110001B; CHU GDB 10010001B; CHU HDB 00100100B; CHU IDB 10100000B; CHU JDB 00011100B; CHU KDB 00100001B; CHU LDB 10000001B; CHU MDB 10001001B; CHU NDB 10100001B; CHU ODB 00010001B; CHU PDB 10010000B; CHU QDB 00001001B; CHU RDB 10110000B; CHU SDB 00000100B; CHU TDB 10100001B; CHU UDB 00000000B; CHU VDB 10001011B; CHU WDB 00001010B; CHU XDB 00000100B; CHU YDB 00100010B; CHU Z

Page 63: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

DB 00000000B; DAU _DB 00000000B; TAT LEDDB 01000000B; CHAM

TABLE2:DB 01000011B; SO 0DB 00000001B; SO 1DB 00000111B; SO 2DB 00000111B; SO 3DB 01000101B; SO 4DB 01000110B; SO 5DB 01000110B; SO 6DB 00000011B; SO 7DB 01000111B; SO 8DB 01000111B; SO 9DB 01000111B;10 CHU ADB 01000100B;11 CHU BDB 01000010B;12 CHU CDB 00000101B;13 CHU DDB 01000110B;14 CHU EDB 01000110B;15 CHU FDB 01000010B;16 CHU GDB 01000101B;17 CHU HDB 00010010B;18 CHU IDB 00000001B;19 CHU JDB 00011000B;20 CHU KDB 01000000B;21 CHU LDB 01101001B;22 CHU MDB 01100001B;23 CHU NDB 01000011B;24 CHU ODB 01000111B;25 CHU PDB 01000111B;26 CHU QDB 01000111B;27 CHU RDB 01000110B;28 CHU SDB 00010010B;29 CHU TDB 01000001B;30 CHU UDB 00101000B;31 CHU VDB 01000001B;32 CHU WDB 00101000B;33 CHU XDB 00101000B;34 CHU YDB 00001010B;35 CHU ZDB 00000010B;36 DAU _DB 00000000B;37 TAT LEDDB 10000000B;38 CHAM

END

Page 64: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

PHAÀN CHÖÔNG TRÌNH VIEÁT

TREÂN VB

Page 65: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Form DownLoadDim PrgStr, SentStr As StringDim ByteCnt, i As IntegerDim EndDown, Sending As BooleanDim Finish As BooleanDim TestStr As StringDim PrevChar As StringPrivate Sub SetAddMode()Dim BaudStr As StringWith MSComm1 .PortOpen = False BaudStr = Left(.Settings, Len(.Settings) - 6) .Settings = BaudStr & ",M,8,1" .PortOpen = TrueEnd WithEnd SubPrivate Sub ClearAddMode()Dim BaudStr As StringWith MSComm1 .PortOpen = False BaudStr = Left(.Settings, Len(.Settings) - 6) .Settings = BaudStr & ",S,8,1" .PortOpen = TrueEnd WithEnd SubPrivate Sub SendOneByte()Dim OneChar As StringOneChar = Left(PrgStr, 1)PrgStr = Mid(PrgStr, 2)TestStr = TestStr & Hex(Asc(OneChar)) + Chr(&HD)MSComm1.Output = OneCharIf Asc(PrevChar) = &HFC Then EndDown = TrueEnd IfPrevChar = OneCharEnd SubPrivate Sub UpDateConfg()Dim BaudStr, ParStr, DataStr, StopStr As StringIf Not MSComm1.PortOpen Then If RBCom1.Value Then MSComm1.CommPort = 1 End If If RBCom2.Value Then MSComm1.CommPort = 2 End If If RBCom3.Value Then MSComm1.CommPort = 3 End If If RBCom4.Value Then MSComm1.CommPort = 4 End IfEnd IfBaudStr = cbBaud.TextParStr = Left(CbParity.Text, 1)DataStr = CbData.TextStopStr = CbStop.TextMSComm1.Settings = BaudStr + "," + ParStr + "," + DataStr + "," + StopStrEnd Sub

Page 66: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Private Sub btnClose_Click()Unload MeEnd Sub

Private Sub BtnStart_Click()Dim Space As IntegerByteCnt = 0EndDown = FalseSpace = 8 - (Len(CompiledStr) - ((Len(CompiledStr) \ 8) * 8))If Space = 8 Then Space = 0End IfPrgStr = "Start" + String(3, &H78) + CompiledStr + String(Space, &H78) + "END" + String(5, &H78)Sending = TrueUpDateConfgMSComm1.ParityReplace = ""On Error GoTo MSGError:MSComm1.PortOpen = TruePrimaryTmr.Enabled = TrueBtnStart.Enabled = FalseFinish = FalsePrevChar = Chr(&H78)Exit SubMSGError:MsgBox "COMM port conflicted."End Sub

Private Sub Form_Load()cbBaud.AddItem ("110")cbBaud.AddItem ("300")cbBaud.AddItem ("1200")cbBaud.AddItem ("2400")cbBaud.AddItem ("4800")cbBaud.AddItem ("9600")cbBaud.AddItem ("14400")cbBaud.AddItem ("19200")cbBaud.AddItem ("28800")cbBaud.AddItem ("38400")cbBaud.AddItem ("56000")cbBaud.AddItem ("57600")cbBaud.AddItem ("115200")cbBaud.AddItem ("128000")cbBaud.AddItem ("256000")CbParity.AddItem ("Event")CbParity.AddItem ("Mark")CbParity.AddItem ("None")CbParity.AddItem ("Odd")CbParity.AddItem ("Space")CbData.AddItem ("4")CbData.AddItem ("5")CbData.AddItem ("6")CbData.AddItem ("7")CbData.AddItem ("8")CbStop.AddItem ("1")CbStop.AddItem ("1.5")CbStop.AddItem ("2")TestStr = ""

End Sub

Page 67: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Private Sub MSComm1_OnComm()Dim TestByte(8) As ByteDim ReceivedStr As String

If Finish Then TimOutTmr.Enabled = False Finish = False If (MSComm1.PortOpen = True) Then MSComm1.PortOpen = False End If Call MsgBox("DownLoad Already", vbOKOnly, "DownLoad") ProgressBar1.Value = 100 PercentTxt.Text = Str(ProgressBar1.Value) BtnStart.Enabled = True PrimaryTmr.Enabled = FalseEnd If

If (MSComm1.CommEvent = comEvReceive) And (Not Finish) Then ReceivedStr = MSComm1.Input TimOutTmr.Enabled = False If (Left(ReceivedStr, 1) = Chr(0)) And (Right(ReceivedStr, 1) = Chr(&HD)) Then ReceivedStr = Mid(ReceivedStr, 2, 8) End If If (ReceivedStr <> SentStr) And (Not Finish) Then If MSComm1.PortOpen Then MSComm1.PortOpen = False End If Call MsgBox("Error! Incorrect feedback data", vbOKOnly, "DownLoad Error") MsgBox "Sent:" & Chr(13) & TestStr & Chr(13) & "Received:" & Chr(13) & ReceivedStr BtnStart.Enabled = True PrimaryTmr.Enabled = False Else TmrSDelay.Enabled = True End If TestStr = "" On Error GoTo EHandler If EndDown Then Finish = True End IfEnd IfExit SubEHandler: MsgBox Err.Description, , Err.Source + Err.LastDllErrorEnd Sub

Private Sub PrimaryTmr_Timer()If Sending Then ByteCnt = ByteCnt + 1 If (ByteCnt / (Len(CompiledStr) + 24)) * 100 < 100 Then ProgressBar1.Value = (ByteCnt / (Len(CompiledStr) + 24)) * 100 Debug.Print ByteCnt Else ProgressBar1.Value = 100 End If PercentTxt.Text = Str(ProgressBar1.Value) i = (i + 1) Mod 10 If i = 1 Then SetAddMode

Page 68: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MSComm1.Output = Chr(&H1) SentStr = Left(PrgStr, 8) TmrSDelay.Enabled = True End If If i = 0 Then ClearAddMode MSComm1.Output = Chr(&HD) Sending = False TimOutTmr.Enabled = True End If If i > 1 Then ClearAddMode SendOneByte End IfEnd IfEnd Sub

Private Sub TimOutTmr_Timer()Call MsgBox("TIME OUT!Invalid hardware", vbOKOnly, "Timeout Error")MsgBox TestStr, vbOKOnly, "Last sent codes"BtnStart.Enabled = TrueUnload MeEnd Sub

Private Sub TmrSDelay_Timer()Sending = TrueTmrSDelay.Enabled = FalseEnd Sub

Form About' Reg Key Security Options...Const KEY_ALL_ACCESS = &H2003F

' Reg Key ROOT Types...Const HKEY_LOCAL_MACHINE = &H80000002Const ERROR_SUCCESS = 0Const REG_SZ = 1 ' Unicode nul terminated stringConst REG_DWORD = 4 ' 32-bit number

Const gREGKEYSYSINFOLOC = "SOFTWARE\Microsoft\Shared Tools Location"Const gREGVALSYSINFOLOC = "MSINFO"Const gREGKEYSYSINFO = "SOFTWARE\Microsoft\Shared Tools\MSINFO"Const gREGVALSYSINFO = "PATH"

Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As LongPrivate Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As LongPrivate Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long

Private Sub Form_Load()

Page 69: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

lblVersion.Caption = "Version " & App.Major & "." & App.Minor & "." & App.Revision lblTitle.Caption = App.TitleEnd Sub

Private Sub cmdSysInfo_Click() Call StartSysInfoEnd Sub

Private Sub cmdOK_Click() Unload MeEnd Sub

Public Sub StartSysInfo() On Error GoTo SysInfoErr

Dim rc As Long Dim SysInfoPath As String

' Try To Get System Info Program Path\Name From Registry... If GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFO, gREGVALSYSINFO, SysInfoPath) Then ' Try To Get System Info Program Path Only From Registry... ElseIf GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFOLOC, gREGVALSYSINFOLOC, SysInfoPath) Then ' Validate Existance Of Known 32 Bit File Version If (Dir(SysInfoPath & "\MSINFO32.EXE") <> "") Then SysInfoPath = SysInfoPath & "\MSINFO32.EXE"

' Error - File Can Not Be Found... Else GoTo SysInfoErr End If ' Error - Registry Entry Can Not Be Found... Else GoTo SysInfoErr End If

Call Shell(SysInfoPath, vbNormalFocus)

Exit SubSysInfoErr: MsgBox "System Information Is Unavailable At This Time", vbOKOnlyEnd Sub

Public Function GetKeyValue(KeyRoot As Long, KeyName As String, SubKeyRef As String, ByRef KeyVal As String) As Boolean Dim i As Long ' Loop Counter Dim rc As Long ' Return Code

Page 70: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Dim hKey As Long ' Handle To An Open Registry Key Dim hDepth As Long ' Dim KeyValType As Long ' Data Type Of A Registry Key Dim tmpVal As String ' Tempory Storage For A Registry Key Value Dim KeyValSize As Long ' Size Of Registry Key Variable '------------------------------------------------------------ ' Open RegKey Under KeyRoot {HKEY_LOCAL_MACHINE...} '------------------------------------------------------------ rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' Open Registry Key

If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' Handle Error...

tmpVal = String$(1024, 0) ' Allocate Variable Space KeyValSize = 1024 ' Mark Variable Size

'------------------------------------------------------------ ' Retrieve Registry Key Value... '------------------------------------------------------------ rc = RegQueryValueEx(hKey, SubKeyRef, 0, KeyValType, tmpVal, KeyValSize) ' Get/Create Key Value

If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' Handle Errors

tmpVal = VBA.Left(tmpVal, InStr(tmpVal, VBA.Chr(0)) - 1) '------------------------------------------------------------ ' Determine Key Value Type For Conversion... '------------------------------------------------------------ Select Case KeyValType ' Search Data Types... Case REG_SZ ' String Registry Key Data Type KeyVal = tmpVal ' Copy String Value Case REG_DWORD ' Double Word Registry Key Data Type For i = Len(tmpVal) To 1 Step -1 ' Convert Each Bit KeyVal = KeyVal + Hex(Asc(Mid(tmpVal, i, 1))) ' Build Value Char. By Char. Next KeyVal = Format$("&h" + KeyVal) ' Convert Double Word To String End Select

GetKeyValue = True ' Return Success

Page 71: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

rc = RegCloseKey(hKey) ' Close Registry Key Exit Function ' Exit

GetKeyError: ' Cleanup After An Error Has Occured... KeyVal = "" ' Set Return Val To Empty String GetKeyValue = False ' Return Failure rc = RegCloseKey(hKey) ' Close Registry KeyEnd Function

Form MainDim FileName, DataName, FullPath As StringDim Saved As BooleanPrivate Declare Function OSWinHelp% Lib "user32" Alias "WinHelpA" (ByVal hwnd&, ByVal HelpFile$, ByVal wCommand%, dwData As Any)Public Sub Compile()CompiledStr = ""SyntaxChecki = 0Do Until (Cmmd(i).CmmdName = "END") Or (i = 30)i = i + 1CompileItem (Cmmd(i).BlockAdrr)CompileItem (Cmmd(i).CmmdName) Select Case Cmmd(i).CmmdName Case "AND", "OR", "NAND", "NOR" CompileItem (Cmmd(i).In3) CompileItem (Cmmd(i).In2) CompileItem (Cmmd(i).In1) Case "NOT" Call CompileItem(Cmmd(i).In1) Case "RS" Call CompileItem(Cmmd(i).In2) Call CompileItem(Cmmd(i).In1) Case "ON_DELAY", "OFF_DELAY" Call CompileItem(Cmmd(i).In1) Call Compiledata(Cmmd(i).Data) Case "FULSE_DELAY" Call CompileItem(Cmmd(i).In2) Call CompileItem(Cmmd(i).In1) Case "RETENTIVE_DELAY", "COUNTER" Call CompileItem(Cmmd(i).In2) Call CompileItem(Cmmd(i).In1) Call Compiledata(Cmmd(i).Data) Case "MOVE" Call Compiledata(Cmmd(i).In1) Call Compiledata(Cmmd(i).In2) Case "MOVX" Call CompileData16(Cmmd(i).In1) Call CompileData16(Cmmd(i).In2) Call CompileData16(Cmmd(i).In3) Case "CLOCK_ON", "CLOCK_OFF" Call CompileTime(Cmmd(i).In1) Call CompileDate(Cmmd(i).In2, True) Case "CLOCK_SET" Call CompileTime(Cmmd(i).In1)

Page 72: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Call CompileDate(Cmmd(i).In2, False) End SelectIf (Cmmd(i).CmmdName <> "MOVE") And (Cmmd(i).CmmdName <> "MOVX") And (Cmmd(i).CmmdName <> "CLOCK_SET") ThenCall CompileItem(Cmmd(i).Out)End IfLoopEnd Sub

Public Sub SyntaxCheck()TextViewerror = FalseMessage = ""i = 0Do Until (Cmmd(i).CmmdName = "END") Or (i = 30)i = i + 1If Not (Inset(Cmmd(i).CmmdName, CmmdNameSet)) Then Message = Message + Chr(10) + "Error Command Name in Block " + Cmmd(i).BlockAdrr error = TrueElse Select Case Cmmd(i).CmmdName Case "AND", "OR", "NAND", "NOR" Call CheckInOut(Cmmd(i).In3, InOutBlkSet) Call CheckInOut(Cmmd(i).In2, InOutBlkSet) Call CheckInOut(Cmmd(i).In1, InOutBlkSet) Case "NOT" Call CheckInOut(Cmmd(i).In1, InOutBlkSet) Case "RS" Call CheckInOut(Cmmd(i).In2, InOutBlkSet) Call CheckInOut(Cmmd(i).In1, InOutBlkSet) Case "ON_DELAY", "OFF_DELAY" Call CheckData(Cmmd(i).Data, True) Call CheckInOut(Cmmd(i).In1, InOutBlkSet) Case "FULSE_DELAY" Call CheckInOut(Cmmd(i).In2, InOutBlkSet) Call CheckInOut(Cmmd(i).In1, InOutBlkSet) Case "INTERVAL_DELAY", "COUNTER" Call CheckData(Cmmd(i).Data, True) Call CheckInOut(Cmmd(i).In2, InOutBlkSet) Call CheckInOut(Cmmd(i).In1, InOutBlkSet) Case "MOVE" Call CheckData(Cmmd(i).In2, False) Call CheckData(Cmmd(i).In1, True) Case "CLOCK_ON", "CLOCK_OFF", "CLOCK_SET" Call CheckTime(Cmmd(i).In1) Call CheckDate(Cmmd(i).In2) Case "MOVX" Call CheckData16(Cmmd(i).In1, False) Call CheckData16(Cmmd(i).In2, False) Call CheckData16(Cmmd(i).In3, False) Call CheckCompat(Cmmd(i).In1, Cmmd(i).In2, Cmmd(i).In3) End Select If (Cmmd(i).CmmdName <> "MOVE") And (Cmmd(i).CmmdName <> "MOVX") And (Cmmd(i).CmmdName <> "CLOCK_SET") Then Call CheckInOut(Cmmd(i).Out, InOutBlkSet) End IfEnd IfLoopIf error Then

Page 73: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Call MsgBox(Message, vbOKOnly, "Syntax Error")ElseCall MsgBox("No error", vbOKOnly, "Syntax Checking")End IfEnd SubPrivate Function GetByte(CString As String) As ByteDim GetChar As StringIf CString = Empty Or CString = Null ThenGetByte = 0ElseGetChar = Left(CString, 1)CString = Mid(CString, 2)GetByte = Asc(GetChar)End IfEnd FunctionPublic Sub TextView()Dim PrgStr, TmpStr, CString As StringDim i As IntegerDim EOC As Booleani = 0EOC = FalsePrgStr = ""CString = CompiledStrCmmdDat.Recordset.MoveFirstDo While Not (CmmdDat.Recordset.EOF Or EOC) With CmmdDat.Recordset i = i + 1 TmpStr = .Fields(1) 'Read Block Name PrgStr = PrgStr + Chr(9) + UCase(TmpStr) + ":" + String(3, 9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).BlockAdrr = UCase(TmpStr) TmpStr = .Fields(2) 'Read Command Name PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).CmmdName = UCase(TmpStr) If UCase(TmpStr) = "END" Then EOC = True Cmmd(i).Out = "X" Exit Do End If Select Case Cmmd(i).CmmdName Case "AND", "OR", "NAND", "NOR" GoTo ReadIn3 Case "RS", "FULSE_DELAY", "RETENTIVE_DELAY", "COUNTER", "MOVE" GoTo ReadIn2 Case "ON_DELAY", "OFF_DELAY", "NOT" GoTo ReadIn1 Case "MOVX" TmpStr = .Fields(3) 'Read Input 1 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Chr(10) Cmmd(i).In1 = UCase(TmpStr) TmpStr = .Fields(5) 'Read Input 2 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Chr(10) Cmmd(i).In2 = UCase(TmpStr) TmpStr = .Fields(6) 'Read Input 3 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Chr(10) Cmmd(i).In3 = UCase(TmpStr) GoTo LastCode

Page 74: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Case "CLOCK_ON", "CLOCK_OFF" TmpStr = .Fields(3) 'Read Input 1 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).In1 = UCase(TmpStr) TmpStr = .Fields(5) 'Read Input 2 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).In2 = UCase(TmpStr) GoTo NoIn Case "CLOCK_SET" TmpStr = .Fields(3) 'Read Input 1 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).In1 = UCase(TmpStr) TmpStr = .Fields(5) 'Read Input 2 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Hex(GetByte(CString)) + Chr(9) + Chr(10) Cmmd(i).In2 = UCase(TmpStr) GoTo LastCode Case Else TmpStr = "???" PrgStr = PrgStr + UCase(TmpStr) + Chr(10) GoTo NoIn End Select

ReadIn3: TmpStr = .Fields(6) 'Read Input 3 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).In3 = UCase(TmpStr)ReadIn2: TmpStr = .Fields(5) 'Read Input 2 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).In2 = UCase(TmpStr)ReadIn1: TmpStr = .Fields(3) 'Read Input 1 PrgStr = PrgStr + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).In1 = UCase(TmpStr) If Cmmd(i).CmmdName = "MOVE" Then GoTo LastCodeNoIn: TmpStr = .Fields(7) 'Read Out PrgStr = PrgStr + " Out : " + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).Out = UCase(TmpStr) Select Case Cmmd(i).CmmdName Case "ON_DELAY", "OFF_DELAY", "RETENTIVE_DELAY", "COUNTER" TmpStr = .Fields(4) 'Read Data PrgStr = PrgStr + "Data:" + UCase(TmpStr) + String(4, 9) + Hex(GetByte(CString)) + Chr(10) Cmmd(i).Data = UCase(TmpStr) End SelectLastCode:

Page 75: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

.MoveNext End WithLoopPrgText.Text = PrgStrEnd Sub

Private Sub BtnDel_Click()CmmdDat.Recordset.DeleteIf Not CmmdDat.Recordset.EOF ThenCmmdDat.Recordset.MoveNextEnd IfEnd Sub

Private Sub BtnFirst_Click()CmmdDat.Recordset.MoveFirstEnd Sub

Private Sub BtnLast_Click()CmmdDat.Recordset.MoveLastEnd Sub

Private Sub btnNew_Click()CmmdDat.Recordset.AddNewEnd Sub

Private Sub BtnNext_Click()CmmdDat.Recordset.MoveNextIf CmmdDat.Recordset.EOF ThenCmmdDat.Recordset.MovePreviousEnd IfEnd Sub

Private Sub BtnPrev_Click()CmmdDat.Recordset.MovePreviousIf CmmdDat.Recordset.BOF ThenCmmdDat.Recordset.MoveNextEnd IfEnd Sub

Private Sub CmmdDat_Reposition()TxtCmmdName_Validate (True)End Sub

Private Sub CmmdDat_Validate(Action As Integer, Save As Integer)If Action < 7 ThenSaved = FalseEnd IfEnd Sub

Private Sub Form_Load() Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1260) Me.Top = GetSetting(App.Title, "Settings", "MainTop", 900) Me.Width = GetSetting(App.Title, "Settings", "MainWidth", 7455) Me.Height = GetSetting(App.Title, "Settings", "MainHeight", 5220) FullPath = App.Path + "\" FileName = FullPath + "NoName.prg" CmmdDat.DatabaseName = FullPath + "PrgTable.mdb" TxtCmmdName.CausesValidation = True DataName = CmmdDat.DatabaseName Saved = True

Page 76: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

sbStatusBar.Panels.Item(1).Text = FileName LoadFile (FileName)End Sub

Private Sub Form_Unload(Cancel As Integer) Dim i As Integer 'close all sub forms For i = Forms.Count - 1 To 1 Step -1 Unload Forms(i) Next If Me.WindowState <> vbMinimized Then SaveSetting App.Title, "Settings", "MainLeft", Me.Left SaveSetting App.Title, "Settings", "MainTop", Me.Top SaveSetting App.Title, "Settings", "MainWidth", Me.Width SaveSetting App.Title, "Settings", "MainHeight", Me.Height End If closeFileEnd Sub

Private Sub imnCompile_Click()CompileEnd Sub

Private Sub imnDownLoad_Click()CompileFrDown.ShowEnd Sub

Private Sub imnEditText_Click()PrgFrame.Visible = FalsePrgText.Visible = TrueEnd Sub

Private Sub imnLadder_Click()frmLadder.ShowEnd Sub

Private Sub imnIOWatch_Click()frmWatch.Show 1End Sub

Private Sub imnSyntaxCheck_Click()Dim Cmmd As TCommandSyntaxCheckEnd Sub

Public Sub PrgText_GotFocus()TextViewEnd Sub

Private Sub tbToolBar_ButtonClick(ByVal Button As MSComctlLib.Button) On Error Resume Next Select Case Button.Key Case "IO Watch" 'ToDo: Add 'IO Watch' button code. imnIOWatch_Click Case "Edit Program" 'ToDo: Add 'Edit Program' button code. mnuEditimnProgram_Click

Page 77: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Case "Help" 'ToDo: Add 'Help' button code. mnuHelpContents_Click Case "Download" 'ToDo: Add 'Download' button code. imnDownLoad_Click Case "Compile" 'ToDo: Add 'Compile' button code. imnCompile_Click Case "SyntaxCheck" 'ToDo: Add 'SyntaxCheck' button code. imnSyntaxCheck_Click Case "View Details" 'ToDo: Add 'View Details' button code. mnuViewimnCmmWnd_Click Case "Text View" 'ToDo: Add 'Text View' button code. imnEditText_Click Case "New" mnuFileNew_Click Case "Open" mnuFileOpen_Click Case "Save" mnuFileSave_Click End SelectEnd Sub

Private Sub mnuHelpAbout_Click() frmAbout.Show vbModal, MeEnd Sub

Private Sub mnuHelpSearchForHelpOn_Click() Dim nRet As Integer 'if there is no helpfile for this project display a message to the user 'you can set the HelpFile for your application in the 'Project Properties dialog If Len(App.HelpFile) = 0 Then MsgBox "Unable to display Help Contents. There is no Help associated with this project.", vbInformation, Me.Caption Else On Error Resume Next nRet = OSWinHelp(Me.hwnd, App.HelpFile, 261, 0) If Err Then MsgBox Err.Description End If End If

End Sub

Private Sub mnuHelpContents_Click() Dim nRet As Integer 'if there is no helpfile for this project display a message to the user 'you can set the HelpFile for your application in the 'Project Properties dialog If Len(App.HelpFile) = 0 Then MsgBox "Unable to display Help Contents. There is no Help associated with this project.", vbInformation, Me.Caption Else On Error Resume Next nRet = OSWinHelp(Me.hwnd, App.HelpFile, 3, 0) If Err Then

Page 78: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MsgBox Err.Description End If End If

End Sub

Private Sub mnuViewimnCmmWnd_Click() CmmdFrm.ShowEnd Sub

Private Sub mnuViewRefresh_Click() MsgBox "Add 'mnuViewRefresh_Click' code."End Sub

Private Sub mnuEditimnProgram_Click()PrgText.Visible = FalsePrgFrame.Visible = TrueEnd Sub

Private Sub mnuEditimnSystem_Click() MsgBox "Add 'mnuEditimnSystem_Click' code."End Sub

Private Sub mnuEditUndo_Click() MsgBox "Add 'mnuEditUndo_Click' code."End Sub

Private Sub mnuFileExit_Click() Unload MeEnd Sub

Private Sub mnuFilePrint_Click() MsgBox "Add 'mnuFilePrint_Click' code."End Sub

Private Sub mnuFileSaveAs_Click()SaveFileAsEnd Sub

Private Sub SaveFileAs()dlgCommonDialog.ShowSaveOn Error GoTo ErrorMessFileName = dlgCommonDialog.FileNameIf FileName <> "" ThendlgCommonDialog.FileName = "*.prg"sbStatusBar.Panels.Item(1).Text = FileNameSaveFile (FileName)End IfErrorMess:End Sub

Private Sub SaveFile(FileName As String)Dim SF, DF As String, TByte(512) As ByteSF = "PrgTable.mdb"DF = FileNameIf DF = "NoName.prg" ThenCall MsgBox("ERROR!" + Chr(10) + " File name can't be NoName" + Chr(10) + "Mission Fail", vbOKOnly)Exit SubEnd If

Page 79: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Open SF For Binary As #1Open DF For Binary As #2Do Until EOF(1)Get #1, , TBytePut #2, , TByteLoopClose 2Close 1End SubPrivate Sub LoadFile(FileName As String)Dim SF, DF As String, TByte(512) As ByteSF = FileNameDF = "PrgTable.mdb"CmmdDat.DatabaseName = ""Open SF For Binary As #1Open DF For Binary As #2Do Until EOF(1)Get #1, , TBytePut #2, , TByteLoopClose 2Close 1 CmmdDat.DatabaseName = DataName CmmdDat.RefreshEnd Sub

Private Function SaveCfgOK() As BooleanSaveCfgOK = (MsgBox("Would you like to Save", vbYesNo, "Save confirm") = vbYes)End Function

Private Sub closeFile()If (Not Saved) ThenIf SaveCfgOK Then mnuFileSave_ClickEnd IfEnd IfEnd SubPrivate Sub mnuFileSave_Click()If (FileName <> "NoName.prg") And (FileName <> FullPath + "NoName.prg") Then SaveFile (FileName)Else SaveFileAsEnd IfEnd Sub

Private Sub mnuFileOpen_Click() Dim sFile As String closeFile With dlgCommonDialog .DialogTitle = "Open" .CancelError = False .Filter = "uPLC Program Files (*.prg)|*.prg" .ShowOpen If Len(.FileName) = 0 Then Exit Sub End If sFile = .FileName End With FileName = sFile

Page 80: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

LoadFile (FileName) sbStatusBar.Panels.Item(1).Text = FileNameEnd Sub

Private Sub mnuFileNew_Click()closeFileFileName = "NoName.prg"LoadFile (FileName)sbStatusBar.Panels.Item(1).Text = FileNameEnd Sub

Private Sub TxtCmmdName_Validate(Cancel As Boolean)Dim st As String DataFrame.Visible = True LbIn1.Visible = True LbIn2.Visible = True lbIn3.Visible = True TxtIn1.Visible = True TxtIn2.Visible = True TxtIn3.Visible = True LbIn1.Caption = "In1" LbIn2.Caption = "In2" lbIn3.Caption = "In3" st = UCase(TxtCmmdName.Text)Select Case stCase "AND", "OR", "NAND", "NOR" DataFrame.Visible = FalseCase "NOT" DataFrame.Visible = False LbIn2.Visible = False lbIn3.Visible = False TxtIn2.Visible = False TxtIn3.Visible = FalseCase "RS" DataFrame.Visible = False lbIn3.Visible = False TxtIn3.Visible = False LbIn1.Caption = "Reset" LbIn2.Caption = "Set"Case "ON_DELAY", "OFF_DELAY" LbIn2.Visible = False TxtIn2.Visible = False lbIn3.Visible = False TxtIn3.Visible = False LbIn1.Caption = "Trig"Case "FULSE_DELAY" LbIn2.Caption = "Trig" lbIn3.Visible = False TxtIn3.Visible = False LbIn1.Caption = "Reset" DataFrame.Visible = FalseCase "RETENTIVE_DELAY" LbIn2.Caption = "Trig" lbIn3.Visible = False TxtIn3.Visible = False LbIn1.Caption = "Reset"Case "COUNTER" lbIn3.Visible = False TxtIn3.Visible = False LbIn2.Caption = "Trig"

Page 81: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

LbIn1.Caption = "Reset"Case "MOVE" DataFrame.Visible = False lbIn3.Visible = False TxtIn3.Visible = False LbIn1.Caption = "Source" LbIn2.Caption = "Destinaton"Case "MOVX" DataFrame.Visible = False lbIn3.Caption = "Length" LbIn1.Caption = "Source" LbIn2.Caption = "Destinaton"Case "CLOCK_ON" DataFrame.Visible = False lbIn3.Visible = False TxtIn3.Visible = False LbIn1.Caption = "Time" LbIn2.Caption = "Date"Case "CLOCK_OFF" DataFrame.Visible = False lbIn3.Visible = False TxtIn3.Visible = False LbIn1.Caption = "Time" LbIn2.Caption = "Date"Case "CLOCK_SET" DataFrame.Visible = False lbIn3.Visible = False TxtIn3.Visible = False LbIn1.Caption = "Time" LbIn2.Caption = "Date"Case "WOO WANG JIN" frmProDevper.Show 1Case Else DataFrame.Visible = False LbIn1.Visible = False LbIn2.Visible = False lbIn3.Visible = False TxtIn1.Visible = False TxtIn2.Visible = False TxtIn3.Visible = FalseEnd SelectIf Not (CmmdDat.Recordset.EOF Or CmmdDat.Recordset.BOF) Then TxtBlocName.Text = "TB" + Str(CmmdDat.Recordset.Fields(0)) End IfEnd Sub

Form IOWatchConst InAddress = 2Const OutAddress = 3Dim ReceivedCount As SingleDim Addr As ByteDim InStatus As Byte, OutStatus As Byte

Private Sub btnClose_Click()Unload MeEnd Sub

Private Sub Form_Load()Dim i

Page 82: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

For i = 0 To 5imI(i).Picture = ilInOut.ListImages(1).PictureIf i < 4 Then imOut(i).Picture = ilInOut.ListImages(3).PictureNext icbBaud.AddItem ("110")cbBaud.AddItem ("300")cbBaud.AddItem ("1200")cbBaud.AddItem ("2400")cbBaud.AddItem ("4800")cbBaud.AddItem ("9600")cbBaud.AddItem ("14400")cbBaud.AddItem ("19200")cbBaud.AddItem ("28800")cbBaud.AddItem ("38400")cbBaud.AddItem ("56000")cbBaud.AddItem ("57600")cbBaud.AddItem ("115200")cbBaud.AddItem ("128000")cbBaud.AddItem ("256000")cbCommPort.AddItem "COM1"cbCommPort.AddItem "COM2"cbCommPort.AddItem "COM3"cbCommPort.AddItem "COM4"Addr = 3End SubPrivate Sub UpdateConfig()If MSComm2.PortOpen Then MSComm2.PortOpen = FalseEnd IfMSComm2.CommPort = Val(Right(cbCommPort, 1))MSComm2.Settings = cbBaud.Text + ",S,8,1"On Error GoTo EndSubMSComm2.PortOpen = TrueExit SubEndSub:sbStatus.Panels.Item(1).Text = "Error"End SubPrivate Function BitString(Data As Byte) As StringDim i, TempBitString = ""For i = 0 To 7 Temp = Data And 2 ^ i If Temp <> 0 Then BitString = BitString + "Y" Else BitString = BitString + "N" End IfNext iEnd FunctionPrivate Sub UpdateIO()Dim i'OutStatus = 11For i = 0 To 3 If Mid(BitString(OutStatus), i + 1, 1) = "Y" Then imOut(i).Picture = ilInOut.ListImages(4).Picture Else imOut(i).Picture = ilInOut.ListImages(3).Picture End IfNext iFor i = 0 To 5 If Mid(BitString(InStatus), i + 1, 1) = "Y" Then

Page 83: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

imI(i).Picture = ilInOut.ListImages(2).Picture Else imI(i).Picture = ilInOut.ListImages(1).Picture End IfNext iEnd SubPrivate Sub UpdateStatus()sbStatus.Panels.Item(1).Text = Left(MSComm2.Settings, Len(MSComm2.Settings) - 6) + ",COM" + Str(MSComm2.CommPort)sbStatus.Panels.Item(2).Text = Str(Now)End Sub

Private Sub Form_Unload(Cancel As Integer)If MSComm2.PortOpen Then MSComm2.PortOpen = FalseEnd IfEnd Sub

Private Sub MSComm2_OnComm()Dim AddString As StringDim InString As StringIf MSComm2.CommEvent = comEvReceive Then InString = MSComm2.Input pos = InStr(InString, Chr(&H3)) OutStatus = Asc(Mid(InString, pos + 1, 1)) InStatus = Asc(Mid(InString, pos + 4, 1))

End IfEnd Sub

Private Sub TmrCycle_Timer()UpdateStatusUpdateConfigUpdateIOEnd Sub

Modul StartUp

Public Cmmd(32) As TCommandPublic error As BooleanPublic Message As StringPublic InOutBlkSet() As StringPublic DataSet() As StringPublic CmmdNameSet() As StringPublic i As IntegerPublic CompiledText As StringPublic NameCodeArray() As BytePublic InOutCodeArray() As BytePublic fMainForm As frmMainPublic fSplash As frmSplashPublic CompiledStr As StringType TCommand BlockAdrr As String CmmdName As String In1 As String In2 As String In3 As String Out As String Data As String End Type

Page 84: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Function ChopChar(TmrStr As String) As StringTmrStr = TmrStr & "?"ChopChar = Left(TmrStr, 1)TmrStr = Right(TmrStr, Len(TmrStr) - 1)End FunctionPublic Sub CompileItem(Item As String)Dim i, jDim StrBlkVal As StringFor i = LBound(InOutCodeArray) + 1 To UBound(InOutCodeArray)If Item = InOutBlkSet(i) Then CompiledStr = CompiledStr + Chr(InOutCodeArray(i))End IfNext iFor j = LBound(NameCodeArray) + 1 To UBound(NameCodeArray)If Item = CmmdNameSet(j) Then CompiledStr = CompiledStr + Chr(NameCodeArray(j))End IfNext jIf IsBlockName(Item) Then StrBlkVal = Right(Item, Len(Item) - 3) CompiledStr = CompiledStr + Chr(&H4F + Val(StrBlkVal))End IfEnd SubPublic Sub CompileData16(ByVal Data As String)Dim ValStr As StringDim hiVal, loVal As ByteIf Left(Data, 2) = "ME" Then ValStr = Right(Data, Len(Data) - 2) hiVal = (Val(ValStr) + &H7FF) \ 256 loVal = (Val(ValStr) + &H7FF) Mod 256Else hiVal = Val(Data) \ 256 loVal = Val(Data) Mod 256 If Left(Data, 1) = "M" Then ValStr = Mid(Data, 2, 2) hiVal = &H49 loVal = Val(ValStr) + &H6F End IfEnd If

CompiledStr = CompiledStr + Chr(hiVal) + Chr(loVal)End SubPublic Sub Compiledata(DataStr As String)Dim ValStr As StringIf Right(DataStr, 2) = ".0" Then ValStr = Mid(DataStr, 2, 2) Num = Val(ValStr) Num = Num + &H6FElse Num = Int(Val(DataStr))End IfCompiledStr = CompiledStr + Chr(Num)End SubPublic Sub CompileTime(ByVal TimeStr As String)Dim ss, mm, hh As Stringss = ChopChar(TimeStr) & ChopChar(TimeStr)ChopChar TimeStrmm = ChopChar(TimeStr) & ChopChar(TimeStr)ChopChar TimeStr

Page 85: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

hh = ChopChar(TimeStr) & ChopChar(TimeStr)CompiledStr = CompiledStr + Chr(BCD(ss)) + Chr(BCD(mm)) + Chr(BCD(hh))End SubPublic Sub CompileDate(ByVal dateStr As String, dayon As Boolean)Dim DayStr, dd, mm, yy As StringDayStr = ChopChar(dateStr) & ChopChar(dateStr) & ChopChar(dateStr)ChopChar dateStrdd = ChopChar(dateStr) & ChopChar(dateStr)ChopChar dateStrmm = ChopChar(dateStr) & ChopChar(dateStr)ChopChar dateStryy = ChopChar(dateStr) & ChopChar(dateStr)CompiledStr = CompiledStr + Chr(DayOfWeek(DayStr)) + Chr(BCD(dd)) + Chr(BCD(mm)) + Chr(BCD(yy))End SubFunction DayOfWeek(ByVal DayStr As String) As ByteSelect Case DayStr Case "SUN" DayOfWeek = &H1 Case "MON" DayOfWeek = &H2 Case "TUE" DayOfWeek = &H3 Case "WED" DayOfWeek = &H4 Case "THU" DayOfWeek = &H5 Case "FRI" DayOfWeek = &H6 Case "SAT" DayOfWeek = &H7 Case "XXX" DayOfWeek = &H78End SelectEnd Function

Private Function IsInsideM(IdStr As String) As BooleanIsInsideM = (Right(IdStr, 2) = ".0") Or (Right(IdStr, 2) = ".1")End Function

Private Function IsBlockName(el As String) As BooleanDim StrBlkVal As StringIf Left(el, 2) = "TB" Then StrBlkVal = Right(el, Len(el) - 3) If Val(StrBlkVal) <> 0 Then IsBlockName = True End IfElse IsBlockName = FalseEnd IfEnd FunctionPublic Sub CheckCompat(ByVal Source As String, ByVal Dest As String, ByVal lenght As String)Dim ReadyRead As Boolean, ReadyWrite As Boolean, OverWrite As BooleanDim AdSource As Integer, AdDest As Integer

ReadyRead = FalseReadyWrite = FalseOverWrite = FalseIf IsInsideM(Source) Then

Page 86: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

AdSource = Int(Val(Mid(Source, 2))) If AdSource + lenght <= 16 Then ReadyRead = TrueElse AdSource = Int(Val(Mid(Source, 3))) If AdSource + lenght <= 1023 Then ReadyRead = TrueEnd If

If IsInsideM(Dest) Then AdDest = Int(Val(Mid(Dest, 2))) If AdDest + lenght <= 16 Then ReadyWrite = TrueElse AdDest = Int(Val(Mid(Dest, 3))) If AdDest + lenght <= 1023 Then ReadyWrite = TrueEnd If If (IsInsideM(Source) And IsInsideM(Dest)) Or (Not (IsInsideM(Source) Or IsInsideM(Dest))) ThenIf (AdSource + lenght - 1 >= AdDest) And (AdSource <= AdDest) Then OverWrite = TrueIf (AdDest + lenght - 1 >= AdSource) And (AdSource >= AdDest) Then OverWrite = TrueEnd IfIf Not (ReadyRead And ReadyWrite And (Not OverWrite)) ThenMessage = Message + Chr(10) + "Invalid Data area in Block " + Cmmd(i).BlockAdrrerror = TrueEnd If

End SubPublic Sub CheckTime(ByVal TimeString As String)Dim ss, mm, hh As StringDim correct As Booleancorrect = Truess = ChopChar(TimeString) & ChopChar(TimeString)If (ChopChar(TimeString) <> ":") Then correct = Falsemm = ChopChar(TimeString) & ChopChar(TimeString)If (ChopChar(TimeString) <> ":") Then correct = Falsehh = ChopChar(TimeString) & ChopChar(TimeString)If Not (IsNumber(ss, 2)) Or Val(ss) > 59 Then correct = FalseIf Not (IsNumber(mm, 2)) Or Val(mm) > 59 Then correct = FalseIf Not (IsNumber(hh, 2)) Or Val(hh) > 23 Then correct = FalseIf Not (correct) Then Message = Message + Chr(10) + "Time Indentify error in Block " + Cmmd(i).BlockAdrr error = TrueEnd IfEnd SubPublic Sub CheckDate(ByVal DateString As String)Dim DayStr, dd, mm, yy As StringDim correct As Booleancorrect = TrueDayStr = ChopChar(DateString) & ChopChar(DateString) & ChopChar(DateString)If (ChopChar(DateString) <> " ") Then correct = Falsedd = ChopChar(DateString) & ChopChar(DateString)If (ChopChar(DateString) <> "/") Then correct = Falsemm = ChopChar(DateString) & ChopChar(DateString)If (ChopChar(DateString) <> "/") Then correct = Falseyy = ChopChar(DateString) & ChopChar(DateString)If Not (IsWeekDay(DayStr)) Then correct = FalseIf Not (IsNumber(dd, 2)) Or Val(dd) > 31 Then correct = FalseIf Not (IsNumber(mm, 2)) Or Val(mm) > 12 Then correct = False

Page 87: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

If Not (IsNumber(yy, 2)) Or Val(yy) > 75 Then correct = FalseIf Not (correct) Then Message = Message + Chr(10) + "Date Indentify error in Block " + Cmmd(i).BlockAdrr error = TrueEnd IfEnd Sub

Function IsNumber(ByVal TmrStr As String, ByVal length As Integer) As BooleanIf Len(Str(Val(TmrStr))) = length + 1 Then IsNumber = TrueElse If Left(TmrStr, 1) = "0" Then IsNumber = (Len(Str(Val(TmrStr))) = length) Else IsNumber = False End IfEnd IfIf UCase(TmrStr) = "XX" Then IsNumber = TrueEnd Function

Public Sub CheckInOut(ByVal el As String, StrSet() As String)If Not ((Inset(el, StrSet)) Or IsBlockName(el)) Then Message = Message + Chr(10) + "Error In Out in Block " + Cmmd(i).BlockAdrr error = True End IfEnd SubPublic Sub CheckData16(ByVal DataStr As String, ByVal ValEnable As Boolean)Dim StrVal As IntegerDim correct As BooleanDim OneD As BooleanDim TwoD As Boolean

correct = False'16 bit checkIf Left(DataStr, 2) = "ME" Then StrVal = Val(Right(DataStr, Len(DataStr) - 2))Else StrVal = Val(DataStr)End IfIf Left(DataStr, 2) = "ME" Then If (Len(DataStr) - 1 = Len(Str(StrVal))) And (StrVal > 1) And (StrVal < 512) Then correct = True End IfElse If (StrVal <= &H7FFF) And (Len(DataStr) + 1 = Len(Str(StrVal))) Then correct = True End IfEnd If'8 Bit CheckIf ValEnable And (Right(DataStr, 2) = ".1") Then ValStr = Str(Int(Val(DataStr))) TwoD = ((Len(ValStr) = 3) And (Val(ValStr) < 100) And (Val(ValStr) >= 10)) OneD = ((Len(ValStr) = 2) And (Val(ValStr) < 10) And (Val(ValStr) >= 1)) If TwoD Or OneD Then correct = True

Page 88: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

End IfEnd IfIf (Right(DataStr, 2) = ".0") And (Left(DataStr, 1) = "M") Then ValStr = Str(Int(Val(Mid(DataStr, 2)))) TwoD = ((Len(ValStr) = 3) And (Val(ValStr) < 17) And (Val(ValStr) >= 10)) OneD = ((Len(ValStr) = 2) And (Val(ValStr) < 10) And (Val(ValStr) >= 1)) If TwoD Or OneD Then correct = True End IfEnd If

If Not correct ThenMessage = Message + Chr(10) + "Error Data in Block " + Cmmd(i).BlockAdrrerror = TrueEnd IfEnd SubPublic Sub CheckData(DataStr As String, ByVal ValEnable As Boolean)Dim ValStr As StringDim correct As BooleanDim OneD As BooleanDim TwoD As Booleancorrect = FalseIf ValEnable And (Right(DataStr, 2) = ".1") Then ValStr = Str(Int(Val(DataStr))) TwoD = ((Len(ValStr) = 3) And (Val(ValStr) < 100) And (Val(ValStr) >= 10)) OneD = ((Len(ValStr) = 2) And (Val(ValStr) < 10) And (Val(ValStr) >= 1)) If TwoD Or OneD Then correct = True End IfEnd IfIf (Right(DataStr, 2) = ".0") And (Left(DataStr, 1) = "M") Then ValStr = Str(Int(Val(Mid(DataStr, 2)))) TwoD = ((Len(ValStr) = 3) And (Val(ValStr) < 17) And (Val(ValStr) >= 10)) OneD = ((Len(ValStr) = 2) And (Val(ValStr) < 10) And (Val(ValStr) >= 1)) If TwoD Or OneD Then correct = True End IfEnd IfIf Not correct ThenMessage = Message + Chr(10) + "Error Data in Block " + Cmmd(i).BlockAdrrerror = TrueEnd IfEnd Sub

Public Function Inset(ByVal el As String, StrSet() As String) As BooleanDim iInset = FalseFor i = LBound(StrSet) To UBound(StrSet) Step 1If el = StrSet(i) Then Inset = TrueEnd IfNextEnd FunctionPrivate Function IsWeekDay(ByVal DayStr As String) As BooleanSelect Case UCase(DayStr)

Page 89: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Case "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "XXX" IsWeekDay = True Case Else IsWeekDay = FalseEnd SelectEnd Function

Private Sub SetSetup()ReDim InOutBlkSet(29) As StringInOutBlkSet(0) = "I0"InOutBlkSet(1) = "I1"InOutBlkSet(2) = "I2"InOutBlkSet(3) = "I3"InOutBlkSet(4) = "I4"InOutBlkSet(5) = "I5"InOutBlkSet(6) = "I6"InOutBlkSet(7) = "I7"InOutBlkSet(8) = "I8"InOutBlkSet(9) = "I9"InOutBlkSet(10) = "I10"InOutBlkSet(11) = "I11"InOutBlkSet(12) = "I12"InOutBlkSet(13) = "Q1"InOutBlkSet(14) = "Q2"InOutBlkSet(15) = "Q3"InOutBlkSet(16) = "Q4"InOutBlkSet(17) = "Q5"InOutBlkSet(18) = "Q6"InOutBlkSet(19) = "Q7"InOutBlkSet(20) = "Q8"InOutBlkSet(21) = "X"InOutBlkSet(22) = "F1"InOutBlkSet(23) = "F2"InOutBlkSet(24) = "F3"InOutBlkSet(25) = "F4"InOutBlkSet(26) = "F5"InOutBlkSet(27) = "F6"InOutBlkSet(28) = "F7"InOutBlkSet(29) = "F8"ReDim CmmdNameSet(17) As StringCmmdNameSet(1) = "AND"CmmdNameSet(2) = "OR"CmmdNameSet(3) = "NAND"CmmdNameSet(4) = "NOR"CmmdNameSet(5) = "NOT"CmmdNameSet(6) = "RS"CmmdNameSet(7) = "ON_DELAY"CmmdNameSet(8) = "OFF_DELAY"CmmdNameSet(9) = "FULSE_DELAY"CmmdNameSet(10) = "RETENTIVE_DELAY"CmmdNameSet(11) = "COUNTER"CmmdNameSet(12) = "MOVE"CmmdNameSet(13) = "END"CmmdNameSet(14) = "MOVX"CmmdNameSet(15) = "CLOCK_ON"CmmdNameSet(16) = "CLOCK_OFF"CmmdNameSet(17) = "CLOCK_SET"End SubPrivate Sub ArraySetUp()ReDim InOutCodeArray(29) As ByteInOutCodeArray(0) = &H3F

Page 90: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

InOutCodeArray(1) = &H30InOutCodeArray(2) = &H31InOutCodeArray(3) = &H32InOutCodeArray(4) = &H33InOutCodeArray(5) = &H34InOutCodeArray(6) = &H35InOutCodeArray(7) = &H36InOutCodeArray(8) = &H37InOutCodeArray(9) = &H38InOutCodeArray(10) = &H39InOutCodeArray(11) = &H3AInOutCodeArray(12) = &H3BInOutCodeArray(13) = &H40InOutCodeArray(14) = &H41InOutCodeArray(15) = &H42InOutCodeArray(16) = &H43InOutCodeArray(17) = &H44InOutCodeArray(18) = &H45InOutCodeArray(19) = &H46InOutCodeArray(20) = &H47InOutCodeArray(21) = &H78InOutCodeArray(22) = &H48InOutCodeArray(23) = &H49InOutCodeArray(24) = &H4AInOutCodeArray(25) = &H4BInOutCodeArray(26) = &H4CInOutCodeArray(27) = &H4DInOutCodeArray(28) = &H4EInOutCodeArray(29) = &H4FReDim NameCodeArray(17) As ByteNameCodeArray(1) = &HF0NameCodeArray(2) = &HF1NameCodeArray(3) = &HF2NameCodeArray(4) = &HF3NameCodeArray(5) = &HF4NameCodeArray(6) = &HF5NameCodeArray(7) = &HF6NameCodeArray(8) = &HF7NameCodeArray(9) = &HF8NameCodeArray(10) = &HF9NameCodeArray(11) = &HFANameCodeArray(12) = &HFBNameCodeArray(13) = &HFCNameCodeArray(14) = &HD0NameCodeArray(15) = &HFDNameCodeArray(16) = &HFENameCodeArray(17) = &HFFEnd Sub

Sub Main() Set fSplash = New frmSplash fSplash.Show 1 Set fMainForm = New frmMain fMainForm.Show SetSetup ArraySetUpEnd Sub

Private Function BCD(ByVal ValueStr As String) As ByteDim hiDigit As Byte, loDigit As BytehiDigit = Val(Left(ValueStr, 1)) * 16

Page 91: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

loDigit = Val(Right(ValueStr, 1))BCD = hiDigit + loDigitIf ValueStr = "XX" Then BCD = &H78End Function

Page 92: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

PHAÀN CHÖÔNG TRÌNH CHO PLC

CAÛI TIEÁN

Page 93: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Form DownLoadDim PrgStr, SentStr As StringDim ByteCnt, i As IntegerDim EndDown, Sending As BooleanDim Finish As BooleanDim TestStr As StringDim PrevChar As StringPrivate Sub SetAddMode()Dim BaudStr As StringWith MSComm1 .PortOpen = False BaudStr = Left(.Settings, Len(.Settings) - 6) .Settings = BaudStr & ",M,8,1" .PortOpen = TrueEnd WithEnd SubPrivate Sub ClearAddMode()Dim BaudStr As StringWith MSComm1 .PortOpen = False BaudStr = Left(.Settings, Len(.Settings) - 6) .Settings = BaudStr & ",S,8,1" .PortOpen = TrueEnd WithEnd SubPrivate Sub SendOneByte()Dim OneChar As StringOneChar = Left(PrgStr, 1)PrgStr = Mid(PrgStr, 2)TestStr = TestStr & Hex(Asc(OneChar)) + Chr(&HD)MSComm1.Output = OneCharIf Asc(PrevChar) = &HFC Then EndDown = TrueEnd IfPrevChar = OneCharEnd SubPrivate Sub UpDateConfg()Dim BaudStr, ParStr, DataStr, StopStr As StringIf Not MSComm1.PortOpen Then If RBCom1.Value Then MSComm1.CommPort = 1 End If If RBCom2.Value Then MSComm1.CommPort = 2 End If If RBCom3.Value Then MSComm1.CommPort = 3 End If If RBCom4.Value Then MSComm1.CommPort = 4 End IfEnd IfBaudStr = CbBaud.TextParStr = Left(CbParity.Text, 1)DataStr = CbData.TextStopStr = CbStop.TextMSComm1.Settings = BaudStr + "," + ParStr + "," + DataStr + "," + StopStrEnd Sub

Page 94: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Private Sub btnClose_Click()Unload MeEnd Sub

Private Sub BtnStart_Click()Dim Space As IntegerByteCnt = 0EndDown = FalseSpace = 8 - (Len(CompiledStr) - ((Len(CompiledStr) \ 8) * 8))If Space = 8 Then Space = 0End IfPrgStr = "Start" + String(3, &H78) + CompiledStr + String(Space, &H78) + "END" + String(5, &H78)Sending = TrueUpDateConfgMSComm1.ParityReplace = ""On Error GoTo MSGError:MSComm1.PortOpen = TruePrimaryTmr.Enabled = TrueBtnStart.Enabled = FalseFinish = FalsePrevChar = Chr(&H78)Exit SubMSGError:MsgBox "COMM port conflicted."End Sub

Private Sub Form_Load()CbBaud.AddItem ("110")CbBaud.AddItem ("300")CbBaud.AddItem ("1200")CbBaud.AddItem ("2400")CbBaud.AddItem ("4800")CbBaud.AddItem ("9600")CbBaud.AddItem ("14400")CbBaud.AddItem ("19200")CbBaud.AddItem ("28800")CbBaud.AddItem ("38400")CbBaud.AddItem ("56000")CbBaud.AddItem ("57600")CbBaud.AddItem ("115200")CbBaud.AddItem ("128000")CbBaud.AddItem ("256000")CbParity.AddItem ("Event")CbParity.AddItem ("Mark")CbParity.AddItem ("None")CbParity.AddItem ("Odd")CbParity.AddItem ("Space")CbData.AddItem ("4")CbData.AddItem ("5")CbData.AddItem ("6")CbData.AddItem ("7")CbData.AddItem ("8")CbStop.AddItem ("1")CbStop.AddItem ("1.5")CbStop.AddItem ("2")TestStr = ""

End Sub

Page 95: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Private Sub MSComm1_OnComm()Dim TestByte(8) As ByteDim ReceivedStr As String

If Finish Then TimOutTmr.Enabled = False Finish = False If (MSComm1.PortOpen = True) Then MSComm1.PortOpen = False End If Call MsgBox("DownLoad Already", vbOKOnly, "DownLoad") ProgressBar1.Value = 100 PercentTxt.Text = Str(ProgressBar1.Value) BtnStart.Enabled = True PrimaryTmr.Enabled = FalseEnd If

If (MSComm1.CommEvent = comEvReceive) And (Not Finish) Then ReceivedStr = MSComm1.Input TimOutTmr.Enabled = False If (Left(ReceivedStr, 1) = Chr(0)) And (Right(ReceivedStr, 1) = Chr(&HD)) Then ReceivedStr = Mid(ReceivedStr, 2, 8) End If If (ReceivedStr <> SentStr) And (Not Finish) Then If MSComm1.PortOpen Then MSComm1.PortOpen = False End If Call MsgBox("Error! Incorrect feedback data", vbOKOnly, "DownLoad Error") MsgBox "Sent:" & Chr(13) & TestStr & Chr(13) & "Received:" & Chr(13) & ReceivedStr BtnStart.Enabled = True PrimaryTmr.Enabled = False Else TmrSDelay.Enabled = True End If TestStr = "" On Error GoTo EHandler If EndDown Then Finish = True End IfEnd IfExit SubEHandler: MsgBox Err.Description, , Err.Source + Err.LastDllErrorEnd Sub

Private Sub PrimaryTmr_Timer()If Sending Then ByteCnt = ByteCnt + 1 If (ByteCnt / (Len(CompiledStr) + 24)) * 100 < 100 Then ProgressBar1.Value = (ByteCnt / (Len(CompiledStr) + 24)) * 100 Debug.Print ByteCnt Else ProgressBar1.Value = 100 End If PercentTxt.Text = Str(ProgressBar1.Value) i = (i + 1) Mod 10 If i = 1 Then SetAddMode

Page 96: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

MSComm1.Output = Chr(&H1) SentStr = Left(PrgStr, 8) TmrSDelay.Enabled = True End If If i = 0 Then ClearAddMode MSComm1.Output = Chr(&HD) Sending = False TimOutTmr.Enabled = True End If If i > 1 Then ClearAddMode SendOneByte End IfEnd IfEnd Sub

Private Sub TimOutTmr_Timer()Call MsgBox("TIME OUT!Invalid hardware", vbOKOnly, "Timeout Error")MsgBox TestStr, vbOKOnly, "Last sent codes"BtnStart.Enabled = TrueUnload MeEnd Sub

Private Sub TmrSDelay_Timer()Sending = TrueTmrSDelay.Enabled = FalseEnd

Form LadderDim PicVal(MaxRow, MaxCol) As Integer

Private Sub EditText_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = 13 ThengrdDiagram.row = grdDiagram.row + 1End IfEnd Sub

Private Sub Form_Activate()For j = 1 To MaxRow For i = 0 To MaxCol - 1 grdDiagram.Col = i grdDiagram.row = j grdDiagram.Text = TextArray(i, j) UpdatePrg ItemArray(i, j) Next iNext jEnd Sub

Private Sub Form_Deactivate()BrowserProgram 0, 1End Sub

Private Sub Form_Load()Dim i, jWith grdDiagram.Rows = MaxRow + 1.Cols = MaxCol.FixedCols = 0

Page 97: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

For i = 1 To .Rows - 1 Step 1.RowHeight(i) = 975Next iFor j = 1 To .Cols - 1 Step 1.ColWidth(j) = 975Next jFor i = 0 To .Rows - 1 For j = 0 To .Cols - 1 PicVal(i, j) = 29 Next jNext iEnd With

End Sub

Private Sub Form_Resize()With grdDiagramIf Height > 1645 Then.Height = Height - 1645End IfIf Width > 330 Then.Width = Width - 330End IfEnd WithEnd Sub

Private Sub Form_Unload(Cancel As Integer)BrowserProgram 0, 1End Sub

Private Sub grdDiagram_Click()Debug.Print ItemArray(grdDiagram.Col, grdDiagram.row)End Sub

Private Sub grdDiagram_LeaveCell()grdDiagram.CellAlignment = flexAlignCenterTopIf EditText <> "" ThengrdDiagram.Text = EditText.TextEnd IfEditText.Text = ""EditText.Visible = FalseTextArray(grdDiagram.Col, grdDiagram.row) = grdDiagram.TextEnd Sub

Private Sub UpdatePrg(ItemCode As Single)With grdDiagramItemArray(.Col, .row) = ItemCodePicVal(.Col, .row) = ItemCodeIf PicVal(.Col, .row) <> 0 Then Set .CellPicture = ILDrawCell.ListImages.Item(PicVal(.Col, .row)).PictureEnd IfEnd WithEnd SubPrivate Sub tbrDraw_ButtonClick(ByVal Button As MSComctlLib.Button)With grdDiagramSelect Case Button.Key Case "NOpen" UpdatePrg (25) Case "NClose" UpdatePrg (21)

Page 98: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Case "ROpen" UpdatePrg (17) Case "RClose" UpdatePrg (5) Case "Dash" UpdatePrg (1) Case "Root" UpdatePrg (13) Case "NullBoth" If (PicVal(.Col, .row) Mod 4 = 0) Then PicVal(.Col, .row) = PicVal(.Col, .row) - 4 PicVal(.Col, .row) = (PicVal(.Col, .row) \ 4) * 4 + 2 ItemArray(.Col, .row) = PicVal(.Col, .row) Set .CellPicture = ILDrawCell.ListImages.Item(PicVal(.Col, .row)).Picture Case "NullDown" If (PicVal(.Col, .row) Mod 4 = 0) Then PicVal(.Col, .row) = PicVal(.Col, .row) - 4 PicVal(.Col, .row) = (PicVal(.Col, .row) \ 4) * 4 + 3 ItemArray(.Col, .row) = PicVal(.Col, .row) Set .CellPicture = ILDrawCell.ListImages.Item(PicVal(.Col, .row)).Picture Case "NullUp" If (PicVal(.Col, .row) Mod 4 = 0) Then PicVal(.Col, .row) = PicVal(.Col, .row) - 4 PicVal(.Col, .row) = (PicVal(.Col, .row) \ 4) * 4 + 4 ItemArray(.Col, .row) = PicVal(.Col, .row) Set .CellPicture = ILDrawCell.ListImages.Item(PicVal(.Col, .row)).Picture Case "Output" UpdatePrg (33) Case "Null" UpdatePrg (29) Case "Text" EditText.Left = .CellLeft + .Left EditText.Top = .CellTop + .Top EditText.Visible = True EditText.SetFocus Case "Timer" UpdatePrg (37) .row = .row + 1 UpdatePrg (41) Case "Counter" UpdatePrg (45) .row = .row + 1 UpdatePrg (49) Case "End" UpdatePrg (53) End SelectEnd WithEnd Sub

From MainPrivate Sub Savefile(FileName As String)

Open FileName For Output As #1For j = 1 To MaxRow For i = 0 To MaxCol - 1 Write #1, ItemArray(i, j) Write #1, TextArray(i, j)

Page 99: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Next iNext jClose #1lstSectionLog.AddItem (FileName + " Saved")End SubPrivate Sub Openfile(FileName As String)Open FileName For Input As #1For j = 1 To MaxRow For i = 0 To MaxCol - 1 Input #1, ItemArray(i, j) Input #1, TextArray(i, j) Next iNext jClose #1BrowserProgram 0, 1lstSectionLog.AddItem (FileName + " Loaded")End SubPrivate Sub Dir1_Change()File1.Path = Dir1.PathEnd Sub

Private Sub Drive1_Change()Dir1.Path = Left(Drive1.Drive, 2)End Sub

Private Sub File1_Click()MsgBox File1.FileNameEnd Sub

Private Sub Form_Load()File1.Pattern = "*.prg"End Sub

Private Sub imnDownLoad_Click()FrDown.Show 1lstSectionLog.AddItem "Download already"End Sub

Private Sub imnExit_Click()EndEnd Sub

Private Sub imnOpen_Click()

If Right(File1.FileName, 3) = "prg" ThenOpenfile (File1.FileName)ElseOpenfile ("Test.prg")End If

End Sub

Private Sub imnSave_Click()If Right(File1.FileName, 3) = "prg" ThenSavefile (File1.FileName)ElseSavefile ("Test.prg")End IfEnd Sub

Private Sub imnSTL_Click()

Page 100: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

frmSTL.ShowEnd Sub

Private Sub imuCompile_Click()frmSTL.ShowfrmSTL.CompilelstSectionLog.AddItem "Compiled"'Do While Len(CompiledStr) <> 0' MsgBox Hex(Asc(Left(CompiledStr, 1)))' CompiledStr = Right(CompiledStr, Len(CompiledStr) - 1)'LoopEnd Sub

Private Sub imuLadder_Click()frmLadder.ShowEnd Sub

Private Sub imuSaveAs_Click()frmGetFName.Show 1If Right(FileName, 3) = "prg" Then Savefile (FileName)File1.RefreshEnd Sub

Form STLPublic Sub Compile()CompiledStr = ""With datSTL.Recordset .MoveFirst Do CompiledStr = CompiledStr + Chr(CodeOf(.Fields(1).Value)) If (.Fields(1).Value <> "ORLD") And (.Fields(1).Value <> "END") Then CompiledStr = CompiledStr + Chr(CodeOf(.Fields(2).Value)) End If .MoveNext Loop While (.Fields(1).Value <> "END") And Not (.EOF) CompiledStr = CompiledStr + Chr(CodeOf("END"))End WithEnd SubPrivate Sub Form_Activate()Dim PrgPath As StringDim i As SinglePrgPath = Pathi = 0With datSTL.Recordset .MoveFirst Do While Not .EOF i = i + 1 .Edit .Fields(0).Value = AddressStr(i) .Fields(1).Value = " " .Fields(2).Value = " " .Update .MoveNext Loop .MoveFirst i = 0 Do While Not .EOF i = i + 1 .Edit

Page 101: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

.Fields(0).Value = AddressStr(i) .Fields(1).Value = GetCommand(PrgPath) .Fields(2).Value = GetParam(PrgPath) .Update If (Left(.Fields(1).Value, 3) = "END") Then .Edit .Fields(1).Value = Left(.Fields(1).Value, 3) .Update Exit Sub End If .MoveNext LoopEnd WithEnd SubPrivate Function AddressStr(Addr As Single)AddressStr = String(5 - Len(Str(Addr)), "0") + Right(Addr, Len(Str(Addr)))End Function

Private Sub Form_Load()datSTL.DatabaseName = App.Path + "\CrrntProg.mdb"Me.Width = 5175End Sub

Private Sub Form_Resize()With grdSTLIf Height > 645 Then.Height = Height - 645End IfIf Width > 330 Then.Width = Width - 330End IfEnd WithEnd Sub

Modul DeclarePublic Const MaxRow = 25Public Const MaxCol = 25Public Const MaxName = 25

Public Const idNOpen = 25Public Const idNClose = 21Public Const idROpen = 17Public Const idRClose = 5Public Const idDash = 1Public Const idRoot = 13Public Const idOutput = 33Public Const idTimer = 37Public Const idCounter = 45

Public Const cNull = 7Public Const cDash = 0Public Const cRoot = 3Public Const cEnd = 13Public Const cNOpen = 6Public Const cNClose = 5Public Const cROpen = 4Public Const cRClose = 1Public Const cOutput = 8Public Const cTimer = 9

Page 102: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Public Const cCounter = 11Public Const cResetC = 12

Public Const bRight = 0Public Const bDown = 2Public Const bUp = 3Public Const bBoth = 1

Public ItemName(0 To MaxName) As StringPublic frmMainForm As FormPublic BreakPoints As TStackPublic FileName As StringPublic CompiledStr As String Public ItemArray(0 To MaxCol - 1, 1 To MaxRow) As SinglePublic CodeArray(0 To &HFF) As StringPublic TextArray(0 To MaxCol - 1, 1 To MaxRow) As StringPublic Visitted(0 To MaxCol - 1, 1 To MaxRow) As Boolean

Public Sub Main()Path = "END " + Chr(10)Set frmMainForm = New frmMainSet BreakPoints = New TStackfrmMainForm.ShowNameArraySetupCodeArraySetupCompiledStr = Chr(&HF8)For j = 1 To MaxRow For i = 0 To MaxCol - 1 TextArray(i, j) = " " Next iNext jEnd SubPrivate Sub NameArraySetup()ItemName(1) = "LDNOT"ItemName(2) = ""ItemName(3) = ""ItemName(4) = "LD"ItemName(5) = "ANDNOT"ItemName(6) = "AND"ItemName(7) = ""ItemName(8) = "OUT"ItemName(9) = "TIMER"ItemName(10) = "#"ItemName(11) = "COUNTER"ItemName(12) = "RESETC"ItemName(13) = "END"End SubPrivate Sub CodeArraySetup()CodeArray(&HA0) = "I0"CodeArray(&HA1) = "I1"CodeArray(&HA2) = "I2"CodeArray(&HA3) = "I3"CodeArray(&HA4) = "I4"CodeArray(&HA5) = "I5"CodeArray(&HA6) = "I6"CodeArray(&HA7) = "I7"

CodeArray(&HB0) = "Q0"CodeArray(&HB1) = "Q1"

Page 103: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

CodeArray(&HB2) = "Q2"CodeArray(&HB3) = "Q3"CodeArray(&HB4) = "Q4"CodeArray(&HB5) = "Q5"CodeArray(&HB6) = "Q6"CodeArray(&HB7) = "Q7"

CodeArray(&HC0) = "T0"CodeArray(&HC1) = "T1"CodeArray(&HC2) = "T2"CodeArray(&HC3) = "T3"CodeArray(&HC4) = "T4"CodeArray(&HC5) = "T5"CodeArray(&HC6) = "T6"CodeArray(&HC7) = "T7"

CodeArray(&HD0) = "C0"CodeArray(&HD1) = "C1"CodeArray(&HD2) = "C2"CodeArray(&HD3) = "C3"CodeArray(&HD4) = "C4"CodeArray(&HD5) = "C5"CodeArray(&HD6) = "C6"CodeArray(&HD7) = "C7"

CodeArray(&HF0) = "LDNOT"CodeArray(&HF1) = "LD"CodeArray(&HF2) = "ANDNOT"CodeArray(&HF3) = "AND"CodeArray(&HF4) = "OUT"CodeArray(&HF5) = "TIMER"CodeArray(&HF6) = "COUNTER"CodeArray(&HF7) = "RESETC"CodeArray(&HF8) = "END"CodeArray(&HF9) = "END "CodeArray(&HFA) = "ORLD"

Modul TreeProcessPublic Path As StringDim Joint As BooleanPublic Function CodeOf(STLString As String) As ByteDim iIf (Val(STLString) = 0) And (Len(STLString) <> 1) Then For i = &HA0 To &HFF If CodeArray(i) = STLString Then CodeOf = i Next iElse CodeOf = Val(STLString)End IfEnd Function

Public Function ItemCode(ByVal Col As Single, ByVal row As Single) As SingleItemCode = (ItemArray(Col, row) - 1) \ 4End Function

Public Function BranchCode(ByVal Col As Single, ByVal row As Single) As SingleBranchCode = (ItemArray(Col, row) - 1) Mod 4

Page 104: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

End Function

Public Sub SearchRoot(x As Single, y As Single)x = 0y = y + 1Do While ((ItemCode(x, y) = cRoot) Or Visitted(x, y))y = y + 1If y = MaxRow Then Exit SubLoopEnd Sub

Public Sub BrowserProgram(ByVal Left As Single, ByVal Top As Single)Dim i As Single, j As SingleFor i = Left To MaxCol - 1 For j = Top To MaxRow Visitted(i, j) = False Next jNext ii = Leftj = Top - 1SearchRoot i, jPath = ""Do While True DoEvents If (ItemCode(i, j) <> cNull) And (ItemCode(i, j) <> cDash) And (ItemCode(i, j) <> cRoot) Then Path = Path + ItemName(ItemCode(i, j)) + " " + TextArray(i, j) + Chr(10) End If Visitted(i, j) = True Select Case ItemCode(i, j) Case cOutput, cTimer, cCounter, cResetC SearchRoot i, j Case cEnd MsgBox Path Exit Do Case cNull, cRoot If (BranchCode(i, j) = bBoth) Then j = j - 1 End If If (BranchCode(i, j) = bDown) Then i = i + 1 End If Case Else

Select Case BranchCode(i, j) Case bRight i = i + 1 Case bDown BreakPoints.Push i + 1, j SearchRoot i, j Case bUp If BreakPoints.StackEmpty Then j = j - 1 Else BreakPoints.Pop i, j Path = Path + "ORLD" + Chr(10) End If

Page 105: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

End Select End Select

LoopEnd SubPublic Function GetCommand(PathStr As String) As StringIf (Left(PathStr, 4) = "ORLD") Or (Left(PathStr, 3) = "END") Then Pos = InStr(PathStr, Chr(10)) Joint = TrueElse Pos = InStr(PathStr, " ")End IfIf PathStr <> "" ThenGetCommand = Left(PathStr, Pos - 1)ElseGetCommand = " "End IfPathStr = Right(PathStr, Len(PathStr) - Pos)End FunctionPublic Function GetParam(PathStr As String) As StringPos = InStr(PathStr, Chr(10))If Joint Then Joint = False GetParam = " " Exit FunctionEnd IfIf PathStr <> "" Then GetParam = Left(PathStr, Pos - 1)PathStr = Right(PathStr, Len(PathStr) - Pos)End Function

Class TStackPrivate Type TCoordinate Col As Single row As SingleEnd TypeConst StackSize = 50Private Items(1 To StackSize) As TCoordinatePrivate Top As Single'local variable(s) to hold property value(s)Private mvarStackEmpty As Boolean 'local copyPrivate mvarStackFull As Boolean 'local copy'To fire this event, use RaiseEvent with the following syntax:'RaiseEvent OnFull[(arg1, arg2, ... , argn)]Public Event OnFull()'To fire this event, use RaiseEvent with the following syntax:'RaiseEvent OnEmpty[(arg1, arg2, ... , argn)]Public Event OnEmpty()

Public Sub Flush()Top = 0End Sub

Public Function Pop(Col As Single, row As Single) As BooleanIf Not StackEmpty Then Col = Items(Top).Col row = Items(Top).row Top = Top - 1 Pop = TrueElse

Page 106: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Pop = False RaiseEvent OnEmptyEnd IfEnd Function

Public Function Push(ByVal Col As Single, ByVal row As Single) As BooleanIf Not StackFull Then Top = Top + 1 Items(Top).Col = Col Items(Top).row = row Push = TrueElse Push = False RaiseEvent OnFullEnd IfEnd Function

Public Property Get StackFull() As Boolean'used when retrieving value of a property, on the right side of an assignment.'Syntax: Debug.Print X.StackFull mvarStackFull = (Top = StackSize) StackFull = mvarStackFull End Property

Public Property Get StackEmpty() As Boolean'used when retrieving value of a property, on the right side of an assignment.'Syntax: Debug.Print X.StackEmpty mvarStackEmpty = (Top = 0) StackEmpty = mvarStackEmptyEnd Property

Private Sub Class_Initialize()Top = 0End Sub

Taøi lieäu tham khaûo1. Ño löôøng vaø ñieàu khieån baèng maùy tính -Ngoâ Dieân Taäp2. Vi xöû lyù trong ño löôøng vaø ñieàu khieån -Ngoâ Dieân Taäp3. Sô ñoà chaân linh kieän baùn daãn -Döông Minh Trí4. Giaùo trình vi xöû lyù - ÑH Kyõ Thuaät TP HCM 5. Microcontrollers Databook -ATMEL 6. LOGO! User Guide -Siemen7. S7- User Guide -Siemen8. Data communication cmputer network and open systems

- FRED HALSALL9. Visual Basic 6.0 10. Visual Basic, Programmer Guide to Serial Communication

- Richard Grier11. Soå tay ngöôøi laäp trình PC - Ngoâ Dieân Taäp.

Page 107: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Sô ñoà khoái toång quaùt cuûa µPLC:

Sô ñoà khoái cuûa module PLC neàn

Module PLC neàn

(CPU)

ModuleI/O PLC

Module chuyeån ñoåi

RS-232RS 485

Module giao dieän laäp

trình baèng tay

Maùy tính( laäp trình vaø theo doõi I/O)

RS-232

RS-485 RS-485

RS-485

Nguoàn

AT89C51

Choïn cheá ñoä vaø hieån thò traïng thaùi

RAM ngoaøivaø

Pin nuoâi RAM

Giao tieáp maïng RS-485

Xöû lyù thôøi gian thöïc

BẢO VỆ

Page 108: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]ô ñoà khoái cuûa module I/O PLC:

Sô ñoà khoái cuûa module giao dieän laäp trình baèng tay:

AT89C2051

Nguoàn

Giao tieápOUTPUT

Giao tieápOUTPUT

Hieån thò traïng thaùi truyeàn thoâng vaø cuûa INPUT/ OUTPUT

Giao tieáp maïng RS-485

AT89C52

Nguoàn

Giao tieápPHÍM NHAÁN

Giao tieáp hieån thò6 LED 15-SEG

(Interface programmer)

Giao tieáp maïng RS-485

Page 109: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Hoaït ñoäng cuûa µPLC ôû cheá ñoä LOAD:

Soaïn thaûo chöông trình treân maùy tính

hoaëc töø boä giao dieän laäp trình

Laäp trình xong vaø khoâng coù loãi

PLC neàn ôû cheá ñoä LOAD

Ghi maõ chöông trình nhaän ñöôïc vaøo vuøng nhôù chöông trình trong Ram

ngoaøi

Load xong?

Maõ chöông trình naøy ñöôïc löu giöõ cho ñeán khi load laïi chöông trình

môùi. Chôø chuyeån sang cheá ñoä STOP hay RUN

Tieáp tuïc load vaø kieåm tra loãi truyeàn nhaän

END LOAD

Maùy tính baùo loãi vaø chôø download laïi

Bieân dòch vaø kieåm tra loãi

Neáu xaûy ra loãi thì maùy tính baùo loãi vaø chôø download

laïi

N

Y

N

Y

Y

N

LOAD

Page 110: c1CT Cho VXL-cho VB-cho PLC Cai Tien

Chinh sua boi: [email protected]

Hoaït ñoäng cuûa µPLC ôû cheá ñoä RUN trong 1 chu kyø queùt:

I/O PLC laáy traïng thaùi ngoõ vaøo(INPUT) :I1I6

Gôûi traïng INPUT ñeán PLC neàn

PLC neàn caäp nhaät INPUT vaøo vuøng ñeäm

INPUT IMAGE

Ñaàu chu kyø queùt?

Caäp nhaät INPUT töø INPUT IMAGE

Ñoïc maõ chöông trình töø vuøng RAM löu tröõ

chöông trình theo töøng khoái leänh lieân tieáp

Giaûi maõ vaø thöïc thi töøng khoái leänh lieân tieáp

Xuaát ngoõ ra cuûa khoái leänh vaøo vuøng nhôù taïm

hay ñòa chæ khoái

Leänh END?

Xuaát ngoõ ra sau khi queùt vaøo OUTPUT IMAGE

PLC gôûi byte traïng thaùi OUTPUT ñeán I/O PLC

I/O PLC caäp nhaät OUTPUT vaø ñoùng ngaét

ngoõ ra töông öùng

1

END

RUN

1

Y

Y

N

N