[西门子] GxWork2结构化编程五 做一个简单的脉冲信号发生器及模拟运行

[复制链接]
查看83910 | 回复0 | 2024-2-22 11:03:44 | 显示全部楼层 |阅读模式
实验内容:1,用ST语言做一个简单的脉冲发生器,根据输入的脉宽(周期)、ON持续时间、及脉冲数量,输出脉冲信号。2,主程序使用LAD/FBD方式,调用上述FB块,实现两路(多路)脉冲信号输出。3,使用模拟运行方式,对上述程序进行模拟运行。

FB块逻辑流程大致描述如下:



FB块变量表:



FB块语句:







;                                             (*复位错误标志*)

RST(1,bErr  );

;                                                                          (*命令OFF*)

IF  NOT  bExecute               THEN                     

;;

RST(1,bBusy);

RST(1,bPulse);

RST(1,bExLast );

RST(1,bDone );

diTm        :=        0;       

diNoComp:=0;       

RETURN;

;         

END_IF;

;                                            (*输入错误判别    出错 *)

IF  (diRise> diCycle) OR (diCycle<=0)  OR (diRise >H7FFFFFFF/10)  OR  ( diCycle >H7FFFFFFF/10)  THEN

;;

RST(1,bBusy);

RST(1,bPulse);

RST(1,bDone );

diTm                :=        0;               

diNoComp:=0;       

SET(1,bErr  );

RETURN;

;

END_IF;

;                                                                (*命令ON*)

;                                                      (*命令上升沿*)

IF NOT bExLast THEN

;;

SET(1,bBusy);

;

END_IF;

;

SET(1,bExLast );

;                                                          (*发送完成  *)

IF(diN>0) AND (diNoComp=diN) THEN

;;

SET(1,bDone );

diTm        :=        0;

RETURN;

;

ELSE

;;

RST(1,bDone );

;

END_IF;               

;                                                         

IF bBusy THEN

;;                                             (*发脉冲执行  *)

IF diTm=0 THEN

;; ;

diTm        :=                1- INT_TO_DINT(iScanTime);

;;

END_IF;

;;

diTm        :=                diTm        +INT_TO_DINT(iScanTime);

;;                                                                                       (* 累计时间翻转*)

IF  (diTm<0) THEN

;; ;

diTm:=diCycle*10+1;

;;

END_IF;

;;                                             (*脉冲信号输出 *)

IF diTm<=diRise*10 THEN

;;;

SET(1,bPulse);

;;                       

ELSE

;;;

RST(1,bPulse);

;;

END_IF;

;;

IF diTm>diCycle*10 THEN

;;;

diTm        :=diTm        -        diCycle*10;

IF diN>0 THEN

;;;

diNoComp        :=diNoComp        +        1;

;;;

END_IF;                       

;;

END_IF;

;

END_IF;

>>>>

main程序调用FB:



模拟运行测试:



本实验中,模拟PWM信号发生器的波形不能等同于PLC系统的PLS脉冲输出,只能用在一些粗略的脉冲应用中,如信号灯闪烁,电磁阀和继电器的开关控制等一些不需要精确脉冲信号控制的场合。

(完)

如有错漏,敬待指点!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则