文档库 最新最全的文档下载
当前位置:文档库 › 程序调试

程序调试

程序调试
程序调试

加减法参考程序

DATA SEGMENT P ARA PUBLIC …DATA?

DATA ENDS

STACK SEGMENT P ARA STACK …STACK?

DB 512 DUP (?)

STACK ENDS

CODE SEGMENT P ARA PUBLIC …CODE?

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,0000

MOV DX,0000

MOV SI,2050H

MOV DI,2150H

MOV BP,2250H

MOV WORD PTR[SI],0205H

MOV WORD PTR[DI],0408H

MOV WORD PTR[BP],0109H

MOV AL,…;送被加数低8位AL=

…;低8位相加AL= ,AH= ,CF= …;加法ASCII调整AL= ,AH= ,CF=

MOV DL,AL ;DL=

MOV AL,[SI+1] ;AL=

…;带进位加;AL= ,CF=

…;加法ASCII调整AL= ,AH= ,CF= …;AL与DL交换AL= ,DL=

…;和的低8位减减数的低8位AL=

…;减法ASCII调整AL= ,AH= ,CF= …;AL与DL交换,存低8位结果AL= ,DL= …;高8位带进位减AL=

…;减法ASCII调整AL= ,AH= ,CF= MOV DH,AL ;DH=

RET

START ENDP

CODE ENDS

END START

乘法参考程序

DATA SEGMENT P ARA PUBLIC …DATA?

DATA ENDS

STACK SEGMENT P ARA STACK …STACK?

DB 512 DUP (?)

STACK ENDS

CODE SEGMENT P ARA PUBLIC …CODE?

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,0

MOV BX,0

MOV DI,223AH

MOV SI,2230H

MOV AL,04H

MOV BL,06H

…;相乘,AL=,CF=

…;调整,AH=,AL=

MOV WORD PTR [DI],AX

MOV AL,03H

…;被乘数高8位乘以乘数低8位…;调整

…;部分积相加

…;调整

MOV WORD PTR [DI+1],AX

MOV AL,04H

MOV BL,05H

…;相乘

…;调整

MOV WORD PTR[SI],AX

MOV AL, 03H

MUL BL

…;调整

…;部分积相加

…;调整

MOV WORD PTR [SI+1],AX

MOV AL,[DI] ;

MOV BP,2240H

MOV [BP],AL

MOV AL,[DI+1]

…;部分积相加

…;调整

MOV [BP+1],AL

MOV AL,[DI+2] ;

…;部分积相加

…;调整

MOV [BP+2],AL

MOV AL,0

…;部分积相加

…;调整

MOV [BP+3],AL

RET

START ENDP

CODE ENDS

END START

16进制到ACII码参考程序

name HEXASC

data segment para public 'data'

hex dw 0A5E9h

asc db 20 dup(0)

data ends

stack segment para stack 'stack'

db 512 dup (?)

stack ends

code segment para public 'code'

assume c s:code,ds:data, es:data,ss:stack

start proc far

push ds

mov ax,0

push ax

mov ax,data

mov ds,ax

mov es,ax

mov cx,0004h

mov ax, …;AX= ,取十六进制数0ebf9h

lea bx,asc

aa: push cx

…;给循环计数器赋转换代码长度

…;AX= ,十六进制数循环左移

push ax

and ax,000fh ;AX= ;AX= AX= ;AX=

cmp al, …;判别是否为“0~9”

… ascii;是“0~9”转ascii

add al,07h

ascii: add al,30h ;al = ;al = al= ;al =

pop ax

loop aa

ret

start endp

code ends

end start

ACII码到BCD码参考程序

NAME A SCBCD

DATA SEGMENT PARA PUBLIC'DATA'

ORG 0150H

DATA1 DW 3538H,4237H,3946H,3639H,3642H

ORG 0160H

DB 10 DUP(?)

DATA ENDS

STACK SEGMENT PARA STACK'STACK'

DB 512 DUP(?)

STACK ENDS

CODE SEGMENT PARA PUBLIC'CODE'

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV CX,05H

…; DI= ,[DI]= ASCII首址送DI …; SI= , BCD首址送SI

BB:

MOV BL,0FFH

MOV AL,[DI] ;AL=

…;检查是否为大于9的ASCII码

…;是转DONE

…;AL= ,[DI]= 不是,取ASCII码低4位

…; 小于0的十进制数,转DONE

MOV BL,AL

DONE:

MOV AL,BL ; AL= ,[DI]=

MOV [SI],AL ;[SI]=

…;指针加1

…;指针加1

…;(CX)不为0,转BB

RET [160H]=

START ENDP

CODE ENDS

END START

BCD码→二进制参考程序

NAME BCD2

DATA SEGMENT

ORG 0180H

DAT1 DW 0802H,0103H,0009H,0706H,0407H

ORG 0190H

DAT2 DB 10 DUP(?)

DATA ENDS

STACK SEGMENT PARA STACK'STACK'

DB 512 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

…;循环计数器赋转换代码长度

…;BCD码首址送DI

…;二进制首址送SI

XL: …;BCD码十位数值赋AL MOV BL,0AH

MUL BL ;乘10

INC DI

MOV AH,00H

…;BCD码十位和个位相加,转换结束…;转换结果存二进制起始地址

INC DI

INC DI

INC SI ;(CX)不为0转AA

LOOP XL

RET

START ENDP

CODE ENDS

END START

查表处理参考程序

DATA SEGMENT

LIST DW 12,11H,22H,33H,44H,55H,66H,77H,88H,99H,111H,222H,333H DATA ENDS

CODE SEGMENT

DEL_UL PROC FAR

ASSUME CS:CODE,DS:DATA,ES:DATA

MAIN: PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX, ….. ;AX=

CLD

LEA DI, …; DI= ,[DI]= ….. …取得数据区首地址PUSH DI

MOV CX,ES:[DI] ;CX=

ADD DI,2

…SCASW ; AX= ,DI= ,[DI-2]= 字符串比较…DELETE ;字符相同转移

JMP SHORT EXIT

DELETE:…DEC_CNT ;CX寄存器内容为0则到数据区尾转结束NEXT_EL: MOV BX,ES:[DI] ;BX= , [DI-2]

MOV ES:[DI-2],BX ; (DI-2)= ,(DI)=

ADD DI,2

LOOP NEXT_EL

DEC_CNT: POP DI

DEC WORD PTR ES:[DI] ; (0H)= ……….

EXIT: RET

DEL_UL ENDP

CODE ENDS

END MAIN

分支与循环参考程序

DATA SEGMENT

ORG 200H

ARRAY DW 56H,12H,-6790H,0,78H,0H,-1H,0H,3000H,90H

DATA ENDS

CODE SEGMENT

MAIN PROC FAR

ASSUME CS:CODE,DS:DATA

START:

PUSH DS

MOVAX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV CX,…;CX= 循环计数器赋转换代码长度

MOV BX,0

MOV DI,BX

MOV SI,BX

…;BX= ……字数组首址送BX AGAIN:

MOV AX,[BX]

…;与0比较

…LEQ ;小于或等于0转

INC DI ;AX= ,DI=

JMP SHORT NEXT

LEQ: …NEXT ;小于0转

INC SI ;AX= ,SI=

NEXT:ADD BX,2

LOOP AGAIN

MOV AX,10

…;字数组长度减负数

…; AX= 字数组长度减负数再减零

RET

MAIN ENDP

CODE ENDS

END START

排序参考程序

DATA SEGMENT

DAT DW 10,1234H,2345H,3456H,9999H

DW 8700H,7000H,0,6500H,5111H,4FBDH

DATA ENDS

CODE SEGMENT

MAIN PROC FAR

ASSUME CS:CODE,DS:DATA,ES:DATA

START:

PUSH DS ;初始化

SUB AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

…;字数组首地址送DI

…;循环长度送CX

…;循环长度减1(10个数据,循环9次) LOOP1:

MOV SI,CX

INC DI

INC DI

LOOP2:

…;取DAT(I)个数据

…;与DAT(I+1)个数据比较

…;如果DAT(I+1)大于或等于DAT(I)转移

…; AX= ,(DI)=

否则交换…;(DI)=存较小的数

CON: ADD DI,2

LOOP LOOP2

…;(DI)=……. 取循环长度,准备下次比较

…;字数组首地址送DI

LOOP LOOP1 ;(DI)=……..

RET

MAIN ENDP

CODE ENDS

END START

6264参考程序

.486

DATA SEGMENT AT 0 USE16

ORG 4000H

DATA1 DB 6 DUP(?)

DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA,ES:DATA

ORG 2000H

BEG: JMP START

START: MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,0

MOV SS,AX

MOV SP,1000H

MOV AX,…;6264段地址

MOV DS,AX

XOR AX,AX

MOV BX,…;偏移地址

MOV CX,…;数据长度

M1: M OV BYTE PTR[BX],AL ; (BX)= , (BX)= , (BX)=送数据INC AL

INC BX

LOOP M1

HART

ENDP

CODE ENDS

END BEG

8255参考程序

.486

DATA SEGMENT AT 0 USE16

PORTA EQU …;A口

PORTB EQU …;B口

PORTC EQU …;C口

CONTROL E QU 20FH ;控制口

PORT1 EQU 340H ;七段码段地址

PORT2 EQU 360H ;七段码位地址

ORG …H

DATA1 DB 6 DUP (?) ;输入数据区

ORG …H

DATA2 DB 6 DUP (?) ;显示缓冲区

DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA,ES:DATA

ORG 2000H

BEG: JMP START

TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

DB 67H,77H,7CH,39H,5EH,79H,71H ;段码表STlART: MOV AX,DATA ;初始化

MOV DS,AX

MOV ES,AX

MOV AX,0

MOV SS,AX

MOV SP,1000H

…;8255初始化

…;清显示

LP:

…; AL= 读数据

…;存数据

CALL CZ ;调用拆字子程序

CALL DISP ;调用显示子程序

JMP …;循环取数显示CZ PROC

PUSH CX

LEA SI,DATA1 ; SI= 拆字,取数

LEA DI,DATA2 ;DI= 显示缓冲区首址CZ0:

MOV BL,[SI]

AND BL,0F0H ;BL=

MOV CL,4

ROL BL,CL

MOV [DI],BL ;(DI)=

INC DI

MOV BL,[SI]

AND BL,0FH ;BL=

MOV [DI],BL

INC SI

INC DI

CMP SI, …H

JBE CZ0

POP CX

RET

CZ ENDP

DISP PROC ;显示子程序

PUSH CX

PUSH DX

LEA BX,TAB

LEA SI,DATA2

MOV AH,0C1H

DISP1:

MOV DX,PORT2

MOV AL,AH

OUT DX,AL ; AL= , AL= 位输出

MOV DX,PORT1

MOV AL,[SI]

XLAT

OUT DX,AL ;AL= ,AL= 段输出

MOV CX,0200H

LOOP $

INC SI

SAL AH,1

OR AH,0C0H

CMP AH,0C0H

JNZ DISP1

POP DX

POP CX

RET

DISP ENDP

CODE ENDS

END BEG

8253参考程序

.486

DATA SEGMENT AT 0 USE16

ZDXL EQU 20H ;中断向量(20H) OPORT EQU 3A0H ;8259偶地址

JPORT EQU 3A8H ;8259奇地址

PORT1 EQU 340H ;段地址

PORT2 EQU 360H ;位地址

DS0 EQU 300H ;8253通道0

DSC EQU 30CH ;8253控制口COUNT EQU 50

ORG 4000H

DATA1 DB 6 DUP(?)

ORG 4040H

DATA2 DB 3 DUP(?)

DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA,ES:DATA

ORG 2000H

BEG: CLI

JMP START

TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,

DB 7FH,67H,77H,7CH,39H,5EH,79H,71H ;段码表TIMER DB 0 ;延时、计数初值

START:

…;初始化

INIT8253:

MOV DX,DSC

MOV AL, …;方式3,方波发生器

OUT DX,AL

MOV DX,DS0

MOV AL,0BH

OUT DX,AL

MOV AL,0E9H

OUT DX,AL

SETVECT:

MOV DI,0

MOV DX,OFFSET SERVER ;中断服务子程序偏移地址

;送中断向量低位

MOV ZDXL[DI],DX

MOV DX,CS ;中断服务子程序段地址

;送中断向量高位

MOV ZDXL[DI+2],DX ,(00:20H)

INIT8259:

MOV AL,00010011B ;ICW1

MOV DX,OPORT

OUT DX,AL

MOV AL,00001000B ;ICW2

MOV DX,JPORT

OUT DX,AL

MOV AL,00001101B ;ICW4

MOV DX,JPORT

OUT DX,AL

MOV AL,11111110B ;OCW1

MOV DX,JPORT

OUT DX,AL

MOV AL,20H ;EOI(20H)

MOV DX,OPORT

AGAIN:

STI ;开中断

CALL CZ ;调拆字

CALL DISP ;调显示

JMP AGAIN

CZ PROC

RET

CZ ENDP

DISP PROC

RET

DISP ENDP

;--------------------------------------

SERVER PROC ;8253中断入口

CLI

PUSH AX

PUSH CX

PUSH DX

PUSH SI

PUSH DI

LEA SI,TIMER

MOV AL,[SI]

INC AL

CMP AL, …;与延时、计数值终值比较

…WORK ;大于、等于(到1秒)转移

MOV [SI],AL ;[SI]= , [SI]= ,[SI]=

JMP EXIT

WORK:

MOV AL,0

MOV [SI],AL

LEA SI,DATA2+2

MOV AL,[SI]

INC AL

…;十进制调整

CMP AL, …;与60秒比较

…MINUTE ;大于、等于(60秒)转移

MOV [SI],AL

JMP EXIT

MINUTE:

MOV AL,0

LEA SI,DATA2+1

MOV AL,[SI]

INC AL

…;十进制调整

CMP AL, …;与60分比较

…HOURE ;大于、等于(60分)转移

MOV [SI],AL

JMP EXIT

HOURE:

MOV AL,0

MOV [SI],AL

LEA SI,DATA2

MOV AL,[SI]

INC AL

…;十进制调整

CMP AL, …;与24小时比较

…NEXT ;大于、等于(24小时)转移

MOV [SI],AL

JMP EXIT

NEXT:

MOV AL,0

MOV [SI],AL

EXIT:

MOV AL,20H

MOV DX,OPORT

OUT DX,AL

POP DI

POP SI

POP DX

POP CX

POP AX

IRET

SERVER ENDP

CODE ENDS

END BEG

A/D、D/A参考程序

.486

DATA SEGMENT AT 0 USE16

ORG 4000H

DATA1 DB 6 DUP(?) ;转换数据暂存区

ORG 4010H

DATA2 DB 3 DUP(?) ;显示缓冲区DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA,ES:DATA

ORG 2000H

BEG: JMP START

TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH DB 67H,77H,7CH,39H,5EH,79H,71H ;段码表ADPORT EQU 3C0H

ADPORT7 EQU 3DCH

DAPORT EQU 3E0H

ZDXL EQU 20H ;中断向量(20H) OPORT EQU 3A0H ;8259偶地址JPORT EQU 3A8H ;8259奇地址PORT1 EQU 340H

PORT2 EQU 360H

START:

…;初始化SETVECT:

…;中断初始化LAST: MOV DX,ADPORT ;启动ADC

OUT DX,AL

;--------------------------------------

AGAIN:

STI

CALL CZ ;调用拆字子程序

CALL DISP ;调用显示子程序

JMP AGAIN

;--------------------------------------

CZ PROC

RET

CZ ENDP

DISP PROC

RET

DISP ENDP

;--------------------------------------

IRQ2 PROC ; A/D中断服务程序CLI

PUSH AX

PUSH SI

PUSH DX

…;取A/D转换通道地址

…;读A/D转换数据

LEA SI,DATA1

MOV [SI],AL ;保存A/D转换数据

…;启动A/D

…;取D/A转换通道地址

…;启动D/A

MOV AL,20H ;EOI(20H)

MOV DX,OPORT

OUT DX,AL

POP DX

POP SI

POP AX

IRET

IRQ2 ENDP

;--------------------------------------

CODE ENDS

END BEG

8251参考程序(中断方式,异步数据发送)

.486

DATA SEGMENT AT 0 USE16

ORG 4000H

DATA1 DB 1 DUP(?) ;发送数据区

OUNT EQU 02 ;延时、计数终值

C8251 EQU 330H ;8251控制口地址

D8251 EQU 320H ;8251数据口地址

DS0 EQU 300H ;8253通道0

DSC EQU 30CH ;8253控制口

DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA

ORG 2000H

BEG: CLI ;关中断

JMP START

START:

…;初始化

INIT8253:

…;8253初始化。方式3,方波发生器SETVECT:

…;送中断向量高、低位

INIT8259:

…;8259初始化

INIT8251:

MOV DX,C8251

…;命令字:异步方式,2位停止位,偶校验,

;8位数据,1;位起始位

OUT DX,AL

…;允许发送

OUT DX,AL

LEA SI,DATA1 ;发送数据区

AGAIN:STI

JMP AGAIN

IRQ0 PROC

MOV DX, D8251

MOV AL,[SI] ;取数据

…;发送

MOV AL,20H

MOV DX,OPORT

OUT DX,AL

IRET

IRQ0 ENDP

CODE ENDS

END BEG

嵌入式软件动态测试工具Tessy

嵌入式软件动态测试工具Tessy Tessy是一个专门针对嵌入式软件的C/C++代码进行单元、集成测试的工具,它可以自动化地执行测试、评估测试结果并生成测试报告。Tessy的目标就是:通过自动化整个测试周期,在所有测试阶段完美支持针对C语言的单元测试,当然,Tessy也同样关注测试组织和测试管理。 Tessy软件源自戴姆勒-奔驰公司的软件技术实验室。从1997年,Tessy就在戴姆勒-奔驰公司得到广泛的使用,之后独立成为专业的软件测试工具公司Razorcat,由德国Hitex负责全球销售及技术支持服务。北汇信息作为Hitex/Razorcat公司的中国合作伙伴,将为中国汽车客户提供Tessy软件及优秀的软件测试服务。 Tessy的应用 在以V模型为例的开发模式中,Tessy主要处理右半部分验证和确认中单元/模块测试,集成/组件测试以及系统测试的内容。在V模型的开发模式中,单元测试是第一个测试活动。它阻止了每一类错误,比如算法错误,在V模式的右边向上蔓延,这样可以尽可能早得发现Bug,防止直到后面的测试过程或者直到最终用户那里才被发现,单元测试有经济效益,越早发现bug越好。 另外,Tessy也可以满足各类标准(ISO26262、IEC 61508、EN 50128/50129、DO-178B、汽车SPiCE 或FDA的软件验证通用原则)对测试的需求,比如ISO26262中各个测试等级中对模块测试的要求可以使用Tessy来满足,当然Tessy本身也通过了TUeV的认证,被证明是安全可靠的,可以在安全相关性的软

件研发过程中被使用。 Tessy的特性 自动生成测试环境: Tessy可以自动生成测试环境驱动,选择自动或者手动打桩以及自动生成测试用例模板,帮助客户提高测试用例设计效率。 多种测试用例确定方式: 除了从Excel中导入测试用例,手动地设计测试用例外,Tessy里集成了CTE软件,根据分类树的方法通过Tessy自动化地关联测试用例。

C程序调试步骤to初学者

调试程序一般应经过以下几个步骤: 1、先进行人工检查,即静态检查。 在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多数错误。而这一步骤往往容易被人忽视。有人总希望把一切推给计算机系统去做,但这样就会多占用机器时间,作为一个程序人员应当养成严谨的科学作风,每一步都要严格把关,不把问题留给后面的程序。 为了更有效地进行人工检查,所编的程序应注意力求做到以下几点: (1)应当采用结构化程序方法编程,以增加可读性;(2)尽可能多加注释,以帮助理解每段程序的作用;(3)在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。这样既易于阅读也便于调试,各函数之间除用参数传递数据这一渠道以外,数据间尽量少出现耦合关系,便于分别检查和处理。 2、在人工检查无误后,才可以上机调试。通过上机发现错误称动态检查。在编译时给出语法错误的信息,可以根据提示的信息具体找出程序中出错之处并改正之。 应当注意的是有时提示的出错并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多各种错误互有关联,因止要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。如果系统提示的出错信息多,应当从上到下一一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一二个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;有的是少了“}”或多了“}”有的是书写语句时忘记写“;”或是全角的“;”了,只要加上一个变量定义,或填加“};”就所有错误都消除了。 3、在改正语法错误后,程序经过连接就得到可执行的目标程序。运行程序,输入程序所需数据,就可得到运行结果。应当对运行结果作分析,看它是否符合要求。 有的初学者看到运行结果就认为没问题了,不作认真分析,这是危险的。 有时,数据比较复杂,难以立即判断结果是否正确。可以事先考虑好一批“试验数据”,输入这些数据可以得出容易判断正确与否的结果。可以在计算的输出结果的程序地方加入一段输出到屏幕窗口的程序,利用屏幕窗口可以方便看到结果的,很直观。例如,if语句有两个分支,有可能在流程经过其中一个分支时结果正确,而经过其它一个分支时结果不对等。必须考虑周全。 事实上,当程序复杂时很难把所有的可能方案全部都试到,选择典型的情况作试验即可。 4、运行结果不对,大多属于逻辑错误。对这类错误往往需要仔细检查和分析才能发现。可以采用以下办法: (1)将程序与流程图仔细对照,如果流程图是正确的话,程序写错了,是很容易发现的。例如,复合语句忘记写花括弧,只要一对照流程图就能很快发现。 (2)如果实在找不到错误,可以采用“分段检查”的方法。在程序不同的位置设几个printf 函数语句,输出有关变量的值,往下检查。直到找到在哪一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就可能发现错误所在。 (3)也可以用“条件编译”命令进行程序调试(在程序调试阶段,若干printf函数语句就要进行编译并执行。当调试完毕,这些语句不要再编译了,也不再被执行了)。这种方法可以不必一一去printf函数语句,以提高效率。 5、如果在程序中没有发现问题,就要检查流程图有无错误,即算法有无问题,如有则改正

模块现场安装调试步骤

安标模块安装调试步骤 1、安装前准备工作。安装网络报警模块配置软件DeviceMan,测试软件CK Demo,关闭测 试用电脑上的系统防火墙及其他网络防护软件; 2、按模块说明书连接与主机的通讯及电源线,确认正确后上电; 3、根据模块说明书及主机说明书的要求对主机进行编程,编程完成后主机断电重启; 4、将调试用电脑的有线网络设置为静态固定网络参数,其中IP地址设置为:134.103.115.3, 子网掩码设置为:255.255.255.0,网关不设; 5、用网线或者通过二层交换机将调试用电脑和模块网络连接; 6、打开测试软件CK Demo,点击连接按钮后,连接状态指示变为绿色图标时表示连接正常, 连接前状态; 连接正常状态; 7、按主机状态查询,可以看到主机当前布撤防状态及防区的触发报警状态 防区状态正常或者状态未知,系统撤防; 防区回路触发,撤防状态时红外防区触发时将会随机变化 电源正常,系统准备好 系统设防,防区报警 8、根据主机布撤防命令,在测试软件上按与真实键盘上相同的操作命令测试是 否可以正常布撤防,以及测试软件上的布撤防状态与主机上的状态是否及时同步;(CP816布撤防:1234+ Enter;4110DL布防12342撤防12341;ST2008布撤防1111。1234和1111为密码,现场以使用密码替代) 9、防区报警测试。触发24小时防区或者布防后触发防区测试;(根据现场情况 可以不测试) 10、用配置软件DeviceMan找到当前测试的模块后,按现场网管员提供的网络参数配 置模块的IP,掩码,网关,串口1参数中的服务器IP地址和端口号。服务器IP和端口号根据监控系统软件的要求设置,模块IP与服务器IP在同一子网时网关必须改为 0.0.0.0。(也可以通过IE访问模块IP进行网络配置参数的修改,修改后必须返回到主菜 单按Apply Configuration重启应用新的网络参数。 11、与中心服务器软件确认模块已经连接成功,布撤防状态与现场主机同步 后安装调试结束。 12、将模块的IP地址,现场主机所有24小时无声求助防区的防区编号汇总交与中心测试员。

两种“动态调试程序”的方法

两种“动态调试程序”的方法——写给编程的新人们 调试程序是一件苦差事,即使是经验老到的程序员,也会有焦头烂额的时候。对于大段大段的代码,找了几个钟头还没发现其中的错误,难免头昏眼花,这时我们就想到:既然眼睛没看出代码中的错误,那么,我们让错误在运行的时候暴露出来,然后顺藤摸瓜,找到代码中的错误处。这就是所谓的“动态调试”。相对的,不让程序运行,而是一行一行的看代码,找错误,可称为“静态调试”。 方法一:使用断言。 C和C++有一个很好用的东西:assert(即:断言),就是说程序员认为assert里面的东西必然成立。如果断言失败(程序员认为它必然成立,但事实上不成立),说明程序某个地方出了问题,程序将终止。 例如,我们希望求一个整数x的算术平方根的整数部分r,如果计算正确,则必然有r*r<=x, (r+1)*(r+1)>x,所以我们可以这样写: #include /*在C++中,用#include*/ int SquareRoot( int x ) { int r; /* 计算r */ assert( r*r <= x ); assert( (r+1)*(r+1) > x ); return r; } 如此一来,一旦计算发生错误,程序就会立即终止,并提醒程序员有错误发生,在哪一行。在写代码的时候插入一些assert,可以有效的帮助程序员找出错误。同时,也可以在错误时停止程序,避免错误的扩大。

方法二:在IDE中使用动态调试。 很多IDE(集成编辑环境)都带有动态调试功能,诸如:单步运行、变量监视等,有的甚至给出了寄 存器、反汇编、函数调用堆栈。但使用最频繁的应该是前两种。 单步运行和变量监视通常结合使用。以VC2003中文版为例,当程序编译以后,每按一次F10键,可执行一条语句,然后停下来。这时调试者可以看看哪些变量发生了改变,这种改变是否在自己预料之中。 监视变量的方法是,在单步运行的时候选择菜单中的“调试”->“窗口”->“监视”(VC的其他版本也比较类似),打开监视的窗口,在窗口左边输入需要监视的表达式(比如:要监视变量a,就输入“a”;要监视a+3的值,就输入a+3)。 除了F10以外,还有几个快捷键。如果正在被运行的行是一个函数,则按F11,可运行到函数的内部。按Shift+F11可以将所在的函数运行完,直到所在的函数返回才停下。按F5可一直运行直到程序结束。当然,遇到“断点”的话,程序也会停下。在编辑或调试的时候,按F9可以把所在的行设置/取消断点。 这样一行一行的执行,可以把诸如循环、if语句的处理都看得请清楚楚。甚至,通过监视“函数调用堆栈”,对学习递归也有一定的好处。 可能我说得不是很清楚,但初学编程的话一定要学调试。不然可能程序编译连接都通过,但运行起来错误一堆一堆的,用不了多久就没信心继续学下去了。 #include main() {int a=2,b; b=((++a)*(++a)*(++a)); printf("%d\n",a); printf("%d",b); } 这个分析很正确的我也上机调试过 结果是a=5 b=80 其实++,--运算符都属于单目运算符 它们都有两种方式:一种是前缀方式,一种是后缀方式。 前缀运算表达式的值为原来变量值加1,后缀表达式的值为原变量值 也就是说前缀形式是先增1,后被引用;后缀形式是先被引用,后增1 再一个就是运算符优先级的问题:小括号为最高优先级,应该先计算,计算方向为从左向右,单目运算符优先级次之,计算方向为从右向左

数控车床基本操作简单程序调试

数控车床的基本操作与简单程序调试 一、实训目的 < 1 >掌握数控车削加工基本编程指令及其应用 < 2 >熟悉了解数控车床的操作面板和控制软件; < 3 >掌握数控车床的基本操作方法和步骤; < 4 >进一步了解数控车床的结构组成、加工控制原理; < 5 >熟练掌握精车程序的输入调 二、预习要求 认真阅读数控车床组成、位置调整和坐标系设定及基本编程指令与调试的章节内容。 三、实训理论基础 1.基本编程指令功能介绍 1 ). G 功能 ( 格式: G 2 G 后可跟 2 位数 ) 常用 G 功能指令 (1) 、表内 00 组为非模态指令,只在本程序段内有效。其它组为模态指令,一次指定后持续有效,直到被本组其它代码所取代。 (2) 、标有 * 的 G 代码为数控系统通电启动后的默认状态。

2 ). M 功能 ( 格式: M2 M 后可跟 2 位数 ) 车削中常用的 M 功能指令有: M00-- 进给暂停 M01-- 条件暂停 M02-- 程序结束 M03-- 主轴正转 M04-- 主轴反转 M05-- 主轴停转 M98-- 子程序调用 M99-- 子程序返回。 M08-- 开切削液 M09-- 关切削液 M30-- 程序结束并返回到开始处 3 ). T 功能 ( 格式: T2 或 T 4 ) 有的机床 T 后只允许跟 2 位数字,即只表示刀具号,刀具补偿则由其它指令。 有的机床 T 后则允许跟 4 位数字,前 2 位表示刀具号,后 2 位表示刀具补偿号。如: T0211 表示用第二把刀具,其刀具偏置及补偿量等数据在第 11 号地址中。 4 ). S 功能 ( 格式: S4 S 后可跟 4 位数 ) 用于控制带动工件旋转的主轴的转速。实际加工时,还受到机床面板上的主轴速度修调倍率开关的影响。按公式: N=1000Vc / p D 可根据某材料查得切削速度 Vc ,然后即可求得 N. 例如:若要求车直径为 60mm 的外圆时切削速度控制到 48mm/min ,则换算得: N=250 rpm ( 转 / 分钟 ) 则在程序中指令 S250; 5 ).车床的编程方式 ( 1 ).绝对编程方式和增量编程方式。 图 2-1 编程方式示例 绝对编程是指程序段中的坐标点值均是相对于坐标原点来计量的,常用 G90 来指定。增量( 相对 ) 编程是指程序段中的坐标点值均是相对于起点来计量的。常用 G91 来指定。如对图 2-1 所示的直线段 AB 编程 绝对编程: G90 G01 X100.0 Z50.0; 增量编程: G91 G01 X60.0 Z-100.0;

PLC程序现场调试的方法

P L C程序现场调试的方 法 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

PLC程序现场调试的方法——【非常重要】 02-04 16:42更新林慧玲分类:围观:625人次微信二维码 1、要查接线、核对地址 要逐点进行,要确保正确无误。可不带电核对,那就是查线,较麻烦。也可带电查,加上信号后,看电控系统的动作情况是否符合设计的目的。 2、检查模拟量输入输出 看输入输出模块是否正确,工作是否正常。必要时,还可用标准仪器检查输入输出的精度。 3、检查与测试指示灯 控制面板上如有指示灯,应先对应指示灯的显示进行检查。一方面,查看灯坏了没有,另一方面检查逻辑关系是否正确。指示灯是反映系统工作的一面镜子,先调好它,将对进一步调试提供方便。 4、检查手动动作及手动控制逻辑关系 完成了以上调试,继而可进行手动动作及手动控制逻辑关系调试。要查看各个手动控制的输出点,是否有相应的输出以及与输出对应的动作,然后再看,各个手动控制是否能够实现。如有问题,立即解决。 5、半自动工作 如系统可自动工作,那先调半自动工作能否实现。调试时可一步步推进。直至完成整个控制周期。哪个步骤或环节出现问题,就着手解决哪个步骤或环节的问题。 6、自动工作 在完成半自动调试后,可进一步调试自动工作。要多观察几个工作循环,以确保系统能正确无误地连续工作。 7、模拟量调试、参数确定 以上调试的都是逻辑控制的项目。这是系统调试时,首先要调通的。这些调试基本完成后,可着手调试模拟量、脉冲量控制。最主要的是选定合适控制参数。一般讲,这个过程是比较长的。要耐心调,参数也要作多种选择,再从中

VC动态调用DLL的调试方法

VC动态调用DLL的调试方法 学习各种高级外挂制作技术,马上去百度搜索"魔鬼作坊",点击第一个站进入,快速成为做挂达人。 很多初学DLL和COM编程的人都为DLL的调试方法发愁。我结合自己学习COM的体验,总结DLL程序的调试如下。 DLL是一个不可运行的程序,它必须有其它程序的加载才可运行。故要调试DLL程序,需要一个测试程序。根据测试程序的不同,我将DLL调试分三种请况。 1.测试程序有源码。 2.测试程序无源码,只有可执行(exe)文件。 3.对DLLRegisterServer函数和DLLUnregisterServer函数的调试。 一:测试程序有源码 对于这种情况,我们可将测试程序的工程(dllCall)和dll程序的工程(dllTest)建立在同一个工作区下。 编译链接dllCall文件,确保生成了dllCall.exe,然后我们将dllTest设置为活动工程。因dllTest需要有测试程序,我们可按如下方法设置。 选择Project->Settings->Debug->Executable for Debug session: 在其文本框中填入dllCall.exe的路径。 按以上操作设置好后,编译,链接dllTest没错后,开始调试。 在dllCall中设置断点。 在dllTest中设置断点。 断点设置好后,在确保dllTest为活动工程的前提下,开始调试,程序将在断点处停下。 二:测试程序无源码 如果测试程序无源码,则不能将测试程序和dll程序联合调试,但可以只调试dll文件。在这种情况下,dllCall.exe的路径要填对,确定dllCall.exe的确调用了dllTest工程下的dllTest.dll文件。

实验一-Keil软件的使用及简单程序的调试方法

实验一Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下:

几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示

单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。 (3)将文件添加到工程中 单击“T arget 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。

现场调试步骤及注意事项

可控整机现场调试步骤 1.在进入现场调试时,要注意现场的安全情况。特别是有的现场正在安装铜排,现场情况较为复杂,一定要注意做好自身的安全保护工作,例如,带好安全帽等。 2.严格遵守用户厂家的各种规章制度。使用我们设备的厂家基本都是严禁吸烟,特别是化工行业很多易燃、易爆的气体和各种化学物品,我们进入用户的厂内就要遵守他们的规章制度。 3.我们到达现场时,我们要仔细检查用户或安装公司的接线,确保接线的准确,减少或避免因接线错误造成的故障和损失。特别重要的接线,如控制柜的三相交流进线(线电压AC380V、相电压AC220V)建议三相四线的颜色黄、绿、红、黑分别对应A相、B相、C相和地线、PT同步电源线(线电压AC100V)、交流反馈线(CT)、控制柜到整流柜的控制电源线、PLC的电源线(UPS)进线、直流反馈线(直流传感器)信号的正负极性等,应要求用户或安装公司校对并确认连接正确、可靠。 4.我们要仔细检查用户或安装公司的接线,特别是第3条涉及的以及我们本身的比较重要的控制线。如强触发电源线从整流柜到控制柜的连线一定要准确、可靠,连线不能压接到导线的表皮,造成因强触发电源的不可靠而引起直流电流的波动。 5.检查整流柜进线与整流变压器二次侧间的连接铜排是否可靠(软连接弧度间距离是否足够),特别是有的用户用夹紧装置夹紧,软连接弧度又不够,很容易引起爬电,我们要用文字方式通知用户。 6.检查PLC各种电源--------PLC本身的交流电源(L1 N为AC220V),开关量电源(DC24V)、输出电源(输出公共线我们一般有三种0V2、+24V、交流电源的某一相电源)、PLC接地线等是否可靠。PLC是我们控制的核心,如果接线正确可给我们带来很大的方便,如果没按要求接线,又很容易损坏PLC的某个输入、输出点或损坏整个模块。

PLC程序的调试方法及步骤(精)

PLC程序的调试方法及步骤 PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,最好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。 1.程序的模拟调试 将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。 在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。 如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟测试结束后再写入它们的实际设定值。 在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。 2.程序的现场调试 完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,通常只

电气控制设备现场调试方法及步骤

电气控制设备现场调试方法及步骤 电气控制设备的安装调试工作非常重要,其质量直接影响设备的正常运行及效果。调试前,应先了解电气控制系统的设计原理、生产工艺和要求达到的各项指标,熟悉系统中各种元器件的性能参数和调试中使用的仪器设备的使用方法。在此基础上,制定周密的调试计划,按计划实施调试。电气控制设备现场调试内容包括:一般检查、绝缘检查、控制单元调试、操作控制电路调试。 1.一般检查及线路检查 电气控制设备安装就位后,应首先进行一般性的外观检查,着重检查所有电控设备和相关设备(包括电机、变流装置、互感器、变压器等)的数量、型号、规格及技术参数等是否符合相应的规范要求;检查各项设备及元器件安装质量是否符合相应的规范要求;检查各动力线与控制线的型号、规格是否符合设计要求;检查各项设备的接地线及整个接地系统是否符合设计要求。 检查线路时应根据原理图或接线图检查各电控设备内部及外部连线是否正确。查线时应注意连接线头是否有松动、虚焊和接触不良等。控制柜至外部设备的连线应通过接线端子连接。在同一端子上一般不应压接三个以上的线头。 2.绝缘检查

绝缘检查主要是检查设备在运输、储存、安装过程中是否使电气设备的绝缘受到损伤或受潮湿气体的侵蚀。当受热或受潮时,绝缘材料便老化,其绝缘电阻便降低,从而造成电器设备漏电或发生短路事故。 绝缘电阻一般都是采用绝缘电阻表进行测量,使用的绝缘电阻表的电压等级及绝缘电阻的标准应遵照各类电气设备的技术标准的规定。一般可按下表所列电压等级选用合适的绝缘电阻表: 对于1000V以下的各种交直流电动机、电器和线路的绝缘电阻值应不小于0.5兆欧;1000V以上应不小于1兆欧或按1兆欧/1000V来考虑。对于某些控制电器及继电保护系统和自动化控制系统为防止元器件及系统的误动作,则要求每一导电回路对地的绝缘电阻不小于1兆欧。 绝缘电阻检查一般包括导电部件对地、两个不相同的导电回路之间等部位。测量前,应切断被测设备的电源,并对被测设备进行充分的放电,保证被测设备不带电。用绝缘电阻表测试过的电气设备也要及时放电,以确保安全。此外,要将不能承受绝缘电阻表输出电压的元器件(如电容器及各种电力电子器件等)从回路中断开或将其短接,对于这些元器件本身的检查,应使用电压不超过它们实验电压值的绝缘电阻表或万用表进行。 3.控制单元调试 根据电控设备系统图和原理图,首先检查各控制单元的电源电压与极性,并参照各单元的实验规范进行调试。一般的调试内容包括乘法器、除法器、运算放大器及其他模拟量器件的调零,输入输出特性的检查,以及逻辑控制信号的检查等。 在所有单元调试好后,可以按原理图将各单元逐步接入系统中,并送入给

C#代码动态编译、动态执行、动态调试

C#代码动态编译、动态执行、动态调试 前几天看到一篇关于.net动态编译的文章.NET中的动态编译,很受启发。在此基础上我做了一些封装,为使调用更加简单,并增加了对动态代码调试的支持,相同代码只编译一次的支持,代码改动自动重新编译,代码引用文件的自动加载和手工加载等功能。 如上图,我封装的类CSharpProvider很简单,下面说明一下一些公共成员的用法。 公共属性 AssemblyFileName:这个属性指定动态编译后生成的配件名称。 CompilerParameters:这个属性指定编译的参数

References:这个属性指定被编译代码中的引用。调用者只要调用 References.Add("xxx.dll"),就可以加入自己的引用,对于System命名空间的所有引用,不需要手工加入,该类会自动加载。对于用户自己的组件,如果不手工指定引用文件,该类会自动根据名字空间名进行猜测。 SourceCodeFileEncoding:如果以文件形式编译,指定文件的编码类型。 公共方法 public bool Compile(string code) 输入代码字符串,并编译 public bool CompileFromFile(string sourceCodeFileName) 编译输入的代码文件 public object CreateInstance(string code, string typeFullName) 创建类的实例 如下面代码,可以输入CreateInstance(code, "MyInterface.IHelloWorld"),也可以输入CreateInstance(code, "HelloWorld"),程序会根据 类型名称来自动找到符合条件的类并实例化。如果代码中有多个指定类型的类,将实例化第一个。 using System; using MyInterface; [Serializable] public class HelloWorld : MarshalByRefObject, IHelloWorld { public string Say()

实验一调试程序DEBUG的使用实验报告

南昌理工学院实验报告 二O一二年月日 课程名称:微机原理与接口技术实验名称:调试程序DEBUG的使用班级:姓名:同组人: 指导教师评定:签名: 【一、实验名称】 调试程序DEBUG的使用 【二、实验目的】 1.掌握汇编程序的编辑,编译,连接和执行的全过程; 2.学习和掌握用DEBUG 调试程序的方法。 【三、实验内容和原理】 1.用编辑软件,输入以下汇编语言源程序: DAT SEGMENT A D B 20 ;(自定) B DB 15 ;(自定) Y DB 3 DUP(0) Z DB 0,0 DAT ENDS STA SEGMENT STACK DW 50 DUP(?) STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT STAR PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,A MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,B MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,A MOV Z,AL MOV AL,B MOV Z+1,AL CALL SUB1 ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET STAR ENDP SUB1 PROC MOV AL,Z MOV AH,Z+1 MUL AH ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET SUB1 ENDP COD ENDS END STAR

混凝土搅拌站现场调试步骤(详)电子教案

混凝土搅拌站现场调试基本步骤 混凝土搅拌站现场调试可以划分为以下十大块: 动力柜及操作台、皮带传输系统、电子计量系统、骨料站配料系统、粉料配料系统、添加剂及水称量系统、搅拌机及除尘系统、空压机、计算机及接口、总体调试。 一.动力柜及操作台调试: 1.检查三相电源是否平衡稳定,有无缺相(看电压表); 2.检查线路是否存在短路、对地、错接现象,检查布线的合理性; 2.1对照电气图纸检查元器件的型号、布置是否相符; 2.2用万用表检查线路是否有短路、错接现象,如有短路或有疑问的地方,应将问题完全 查清,才能进行下一步工作; 2.3用500V摇表检查电机的绝缘,是否有对地现象; 2.4检测各100号线之间电阻不大于1欧; 2.5检查接地线是否接触良好、牢固; 2.6传感器信号线是否尽量远离大电流线; 2.7检查动力柜内各电气元件的电气参数。 3.检查电路的正确性: 3.1将所有断路器、熔断器断开; 3.2合上主回路断路器QF,接通熔断器FU1、FU2后合上控制电源开关S0,检查变压器 输出是否正常; 3.3检查24v开关电源输出是否正常; 3.4逐个接通熔断器,PLC得电,面板电源指示灯工作,称量仪表得电; 3.5仔细观察所有元件是否有发热、是否有焦味; 3.6对照原理图用万用表逐个检查各电压是否准确; 4.检查PLC输入部分线路的正确性; 4.1将PLC置于“STOP”位置; 4.2逐个检查面板上所有旋钮开关、按钮开关及现场急停开关对应指示灯亮/灭的情况。 4.3逐个检查限位开关、料位计、压缩空气管道电接点压力表; 4.4检查检修保护开关,在检修门打开时按下电机启动按钮,PLC输入点有无信号输入;(特别要注意的是各旋钮的功能位置与其输入信号是否对应) 5.检查PLC输出部分外部线路的正确性; 5.1用万用表仔细检查各个输出点对地电阻,是否存在短路现象; 5.2仔细对照原理图,检测各控制回路与图纸是否一致; (通电前特别注意检测不同电压等级的控制回路是否与PLC模块对应的电压等级一致) 6.检查各个称的屏蔽电缆与仪表终端的对应是否正确; 7.检查操作台上的紧急停止按钮是否有效。 二.皮带传输系统调试: 1.确认斜皮带与平皮带电机的转向是否正确。(斜皮带请先点动) 2.确认急停开关是否安装正确、可靠。(在皮带空载运转过程中,按下急停开关,观察皮带是否停止运转) 3.检查斜、平皮带是否跑偏。(调斜皮带尾端的调节螺杆以及悬挂式托辊)

调试程序的简单说明

难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。 我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下: VC调试篇 设置 为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。 为了增加调试信息,可以按照下述步骤进行: ?打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开) ?选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试信息方式包括: ?选择Link页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL ?如果C/C++页中设置了Program Database以上的选项,则Link incrementally可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。 调试方法:

1、使用 Assert(原则:尽量简单)assert只在debug下生效,release下不会被编译。 2、防御性的编程 3、使用Trace 4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因 5、把错误信息记录到文件中 位置断点(Location Breakpoint) 大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码: void CForDebugDlg::OnOK() { for (int i = 0; i < 1000; i++) //A { int k = i * 10 - 2; //B SendTo(k); //C int tmp = DoSome(i); //D int j = i / tmp; //E } } 执行此函数,程序崩溃于E行,发现此时tmp为0,假设tmp本不应该为0,怎么这个时候为0呢?所以最好能够跟踪此次循环时DoSome函数是如何运行的,但由于是在循环体内,如果在E行设置断点,可能需要按F5(GO)许多次。这样手要不停的按,很痛苦。使用VC6断点修饰条件就可以轻易解决此问题。步骤如下。 1 Ctrl+B打开断点设置框,如下图:

调试程序的简单说明.

难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。 我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下: VC 调试篇 设置 为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard 创建的工程中包含的Debug Configuration 自动包含调试信息,但是是不是Debug 版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration 中增加调试信息,包括Release 版本。 为了增加调试信息,可以按照下述步骤进行: ? 打开Project settings 对话框(可以通过快捷键ALT+F7打开,也可以通过IDE 菜单Project/Settings 打开 ?选择C/C++页,Category 中选择general ,则出现一个Debug Info 下拉列表框,可供选择的调试信息方式包括: 命令行 Project settings 说明 无 None 没有调试信息 /Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息

/Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等 /Zi Program Database 创建一个程序库(PDB,包括类型信息和符号调试信息。 /ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使 #pragma 设置的优化功能无效 ? 选择Link 页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL ?如果C/C++页中设置了Program Database 以上的选项,则Link incrementally 可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译,而不必每次都从头开始编译。调试方法: 1、使用 Assert(原则:尽量简单assert只在debug下生效,release下不会被编译。 2、防御性的编程 3、使用Trace 4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因 5、把错误信息记录到文件中 位置断点(Location Breakpoint 大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码:

交通信号灯程序调试步骤

交通信号灯调试 一、线路板的检测和调试 1.硬件调试 硬件调试是利用基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。其中硬件调试可分为静态调试与动态调试两步进行 1.1静态调试 静态调试是在用户系统未工作时的一种硬件检测。 第一步:目测: 检查外部的各种元件或者是电路是否有断点。 第二步:用万用表测试: 先用万用表测试目测中有疑问的连接点,再监测电源和地线是否正确、可靠连接已经他们之间是否有短路现象,发现问题后及时修改,以免通电试验后造成线路板和元器件的毁坏。 第三步:通电检测: 给焊接好的线路板通电,通电后先目测有无异常现象(冒烟,火花现象),然后用手背测试大功率器件和集成电路等有无温升,若出现以上现象,立即断电; 检测所有有插座的器件的电源和地是否符合要求; 在本项目中需要测试的有: U1-40=5V,U1-31=5V,U1-9=0V(S1没按下),U1-9=5V(S1按下),还有SB1—SB4 4个按键分别是按下时=0V,弹起时=5V; 利用导线分别把LED、蜂鸣器、数码管接到相应的低电平,测试线路和元器件是否正常工作。 1.2动态调试 动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干

块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。 2软件调试 在本项目中,我们首先将教材《单片机应用技术》中的第二页的“信号灯的闪烁控制”的程序录入,并烧录到芯片中去,然后通电试验,这是合格的线路板的状态时所有发光二极管闪烁,按下复位按键S1,系统复位。 下面我详细介绍下程序录入、烧录的整个过程,在这个过程中需要一个编译软件和一个烧录器,在这儿我们的编译软件采用的是万利电子的“MedWin V2.39中文版”烧录器采用的是致远电子“EasyPRO 80B”。 2.1 编写程序 双击桌面的“MedWin V2.39中文版”图标,弹出对话框: 在这儿,我们不是选用的万利电子的仿真器,所以我们选择“模拟仿真”选项后,单击“模拟仿真”就会进入MedWin V2.39中文版的操作界面,在此时如果是第一次使用这个软件,他会首先弹出一个对话框:

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入 变量 这样可以比较好地找到问题 二,msgbox 三,监视窗口,如下面的例子 For i=1 to 10000 A=sqr(i) next i 你想再监视当i=799时A的值,就可以添加监视,方法:点调试,添加监视,选择“当监视值为真时中断”,上面表达式框中写上i=799, 这样你按F5,运行程序,程序会在i=799时中断。其他选项你可以自己去琢磨一下。 一个程序如何顺利的“脱产”,调试的过程是非常重要的。学过、钻研过程序设计的人都有同样的感受,很多情况下,调试程序的过程会比程序编写的过程更为困难。任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。 程序中的典型错误类型 A类:语法错误。 B类:编译错误。

C类:属性设置错误。 D类:逻辑错误。 调试方法 方法一:利用“MSDN帮助菜单” “MSDN帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。 不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。

实验一动态LED显示程序的编程与调试

实验一动态LED显示程序的编程与调试 一、实验目的 1、通过编程熟悉和掌握动态LED显示的工作原理; 2、熟悉Keil uVision4的使用方法; 3、了解和掌握C程序的编程与调试。 二、实验设备 计算机一台 单片机开发板一套 三、实验原理 本实验是利用AT89C51单片机的定时中断来实现动态LED显示的设计。该实验的硬件电路原理图如下图所示。该硬件主要包括AT89C51单片机,8位共阴极数码管,74573锁存器等电路。8位数码管在AT89C51单片机的控制下完成动态LED显示,74573锁存器用于锁存P0口的数据。

LED显示程序的流程图如下所示。该程序在定时中断中调用,每次显示一位LED,轮流进行, 实现动态LED显示。 四、实验步骤 1、连接试验相关模块的连线; a.J21跳线帽接左边

b.JP165断开 c.JP10(P0)接J12 d.JP16(右排)接JP8 注意:排线有金属触点的一面朝右。 连接完毕如下图所示: 2、根据流程图及已给出的附件来完成C语言源程序。 3、修改并完善实验程序。 4、用单片机开发板对所编程序进行调试。调试步骤如 下: a.双击桌面上的“PZISP自动下载软件”快捷键; b.在弹出的对话框中,芯片类型选择STC90C5XX系列; c.点击打开文件,找到你编写的C语言程序所产生的test1.hex 文件; d.打开单片机开发板上的开关键;

e.点击下载程序即可。 注意:出现下载失败的情况及修改方法: 1)擦除下载失败-------波特率调低一点 2) 波特率超时----------低速下载 5、把实验仪器恢复原状,本次实验结束。 五、注意事项 1、按要求连接计算机与单片机开发板并检查正确后再通 电开始操作。 2、用完后要关掉所有的电源,最后再拆排线。 六、实验报告及要求 1、总结用C语言编写动态LED显示的应用程序的原理与方 法。 2、本实验的中断程序初值是定时1ms所得到的,由于动 态显示就是利用人的视觉暂停作用使人看到多个数码管同时显示的效果,所以同学们可以把时间改为50ms,100ms观察数码管的显示有什么不同。 3、分析你所编写的程序,画出各个函数的流程图,并作 必要的说明。 4、写出你的心得体会。

相关文档