Codesys——输出PWM波形(FB块)
以下内容纯属个人理解,如有错误欢迎指正。本篇主要讲述如何创建并调用FB块,并书写出占空比可调的FB块,并插入trace进行监控输出波形。
首先创建一个FB块。右键application-添加对象-程序组织单元,创建并打开。
创建FB之后,编写程序。首先定义输入接口(启动、停止、占空比),输出(out)。占空比就是高电平占整个周期的比例。在这个程序里面,没有定义周期的输入接口,固定周期为1S,根本占空比计算高电平和低电平的时间。并用两个定时器进行编写。
定义完成之后,书写主函数,本程序原理类似于振荡电路。代码如下。
/********************变量声明************************/
FUNCTION_BLOCK POU
VAR_INPUT
START: BOOL;
STOP: BOOL;
DUTY: REAL;
END_VAR
VAR_OUTPUT
OUT:BOOL;
END_VAR
VAR
START_UP: BOOL;
STOP_UP: BOOL;
TON0_PT: TIME;
TON1_PT: TIME;
TON0_ET: TIME;
TON1_ET: TIME;
TON0_Q: BOOL;
TON1_Q: BOOL;
//TON0_Q_NOT: BOOL;
PLUS_UP: DINT;
PLUS_DOWN: DINT;
R_TRIG_0: R_TRIG;
R_TRIG_1: R_TRIG;
TON_0: TON;
TON_1: TON;
END_VAR
/********************程序书写************************/
//R_TRIG_0(CLK:=START , Q=>START_UP );
//R_TRIG_1(CLK:=STOP , Q=>STOP_UP );
START_UP := START_UP AND (NOT STOP_UP);
PLUS_UP := REAL_TO_DINT(1000*DUTY);
PLUS_DOWN := 1000 - PLUS_UP;
TON0_PT := DINT_TO_TIME(PLUS_UP);
TON1_PT := DINT_TO_TIME(PLUS_DOWN);
IF START THEN
TON_0(IN:=NOT TON1_Q , PT:=TON0_PT , Q=>TON0_Q , ET=>TON0_ET );
TON_1(IN:= TON0_Q , PT:=TON1_PT , Q=>TON1_Q , ET=>TON1_ET );
OUT :=TON1_Q OR (NOT TON0_Q);
END_IF实例化。FB块编写完成之后,在PLC_PRG函数中对FB块进行实例化。然后在代码区调用PWM_FB这个FB块就可以了,可以进行多次调用设置不同的占空比。
/********************变量声明************************/
PROGRAM PLC_PRG
VAR
PWM_FB: POU;
DUTY0: REAL := 0.2;
START0: BOOL;
STOP0: BOOL;
OUT0: BOOL;
END_VAR
/********************程序书写************************/
PWM_FB(
START := START0,
STOP := STOP0,
DUTY := DUTY0,
OUT => OUT0
);
添加trace。右键application-添加对象-跟踪。
配置所选跟踪。跟踪配置中需要跟踪的变量所在的任务。
添加需要跟踪的变量。单击省略号选择需要跟踪的变量。
在仿真运行的时候需要下载跟踪。右键-下载跟踪。
占空比为0.5的方波信号。
占空比为0.2的方波信号。
谢谢大家~
谢谢大家~ 好东西学习学习
页:
[1]