S7-200用脉冲输出测试高速计数器,不知为什莫I0.0每输入一个脉冲, HC0计数器变化10几,明显不对,请高手赐教!
程序附后!
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
LD SM0.0
= L60.0
LD SM0.0
= L63.7
LD L60.0
CALL SBR1, L63.7, 10000, 5000, MB2
Network 2
LD SM0.1
CALL SBR2
Network 3
LD I0.6
R Q0.0, 4
Network 4 //
LDD>= HC0, 46
EU
S Q0.0, 4
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK PWM1_RUN:SBR1
TITLE=
VAR_INPUT
RUN:BOOL;
Cycle:WORD;
Pulse:WORD;
END_VAR
VAR_OUTPUT
Error:BYTE;
END_VAR
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK HSC_INIT:SBR2
TITLE=
BEGIN
Network 1 // HSC 指令向导
// 要在程序中使用此配置,请在主程序块中使用 SM0.1 或一条沿触发指令调用一次此子程序。
// 配置 HC0 为模式 0;CV = 15; PV = 500;增计数;
// 连接中断程序 COUNT_EQ 到事件 12 (HC0 的 CV = PV)。
// 开放中断和启动计数器。
//
LD SM0.0
MOVB 16#F8, SMB37 //设置控制位:增计数;已使能;
MOVD 0, SMD38 //装载 CV
MOVD +50, SMD42 //装载 PV
HDEF 0, 0
ATCH INT1, 12 //中断程序 COUNT_EQ:HC0 的 CV = PV
ENI
HSC 0
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK COUNT_EQ:INT1
TITLE=
BEGIN
Network 1 // HSC 指令向导
// (CV = PV) 的第 1 步/共 2 步;HC0
// 编程动态改变 HC0 的参数;CV = 18;
// 连接中断程序 HSC0_STEP1 到事件 12 (HC0 的 CV = PV)。
// 启动计数器。
//
LD SM0.0
MOVD 0, SMD38 //设置控制位:写入当前值;
ATCH INT2, 12 //CV = 18;
HSC 0 //中断程序 HSC0_STEP1:HC0 的 CV = PV
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK HSC0_STEP1:INT2
TITLE=
BEGIN
Network 1 // HSC 指令向导
// (CV = PV) 的第 2 步/共 2 步;HC0
// 编程动态改变 HC0 的参数;
// 启动计数器。
//
LD SM0.0
MOVB 16#80, SMB37 //设置控制位:
HSC 0
MOVW 3840, QW0
END_INTERRUPT_BLOCK
lei_starter@126.com