蓝色港湾 发表于 2023-11-22 16:06:51

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的方波信号。


谢谢大家~

foliagelx 发表于 2023-11-24 17:17:25





谢谢大家~

焕游仁阿生 发表于 2024-3-17 20:19:00

好东西学习学习
页: [1]
查看完整版本: Codesys——输出PWM波形(FB块)