如何使用SCL语言输出脉冲信号 点击:448 | 回复:12



Wach0405

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 2回
  • 年度积分:20
  • 历史总积分:20
  • 注册:2020年10月24日
发表于:2020-10-24 08:20:09
楼主
求助帖50分-已结帖

大家好,本人是plc新手,来询问一下如何使用SCL语言输出一个脉冲信号。


输入是一个普通的脉冲信号,比如M0.0, M0.1 ... M0.7,其中任意一个。外加两个BOOL信号,start和reset。


输出要是DWORD信号,QW地址,显示在数字输出(DI)卡上。每次分别显示在不同的LED上。从Q0.0到Q1.7,总共16个bit, 依次循环显示。

如下:

0000 0000 0000 0001

0000 0000 0000 0010

0000 0000 0000 0100

...

...

0100 0000 0000 0000

1000 0000 0000 0000

0000 0000 0000 0001

0000 0000 0000 0010

....


我使用了FOR语句加SHL语句,但是效果不是很好。


请问各位大神有没有好的建议,或者相关的编程信息。


多谢大家了!!




落叶归根87

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 253回
  • 年度积分:42
  • 历史总积分:117
  • 注册:2013年8月05日
发表于:2020-10-24 11:04:01
1楼

跑马灯,中间数据移位完后需要给个延时,

没积分

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 131回
  • 年度积分:60
  • 历史总积分:260
  • 注册:2020年7月01日
发表于:2020-10-24 16:27:03
2楼

路过,来学习学习

Wach0405

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 2回
  • 年度积分:20
  • 历史总积分:20
  • 注册:2020年10月24日
发表于:2020-10-24 16:34:33
3楼

"落叶归根87" 的回复,发表在1楼
        对内容: 【跑马灯,中间数据移位完后需要给个延时,】进行回复:

        -----------------------------------------------------------------

嗯,对,就是跑马灯一样的效果。

这个需要什么函数来做么? 

延时的话,估计可以用Off-Delay Timer来实现。


多谢大神回复啊!

1663436895@qq.com

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 302回
  • 年度积分:0
  • 历史总积分:54
  • 注册:2016年3月13日
发表于:2020-10-24 21:29:39
4楼

谢谢楼主,学习一下

三维组态设计

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 197回
  • 年度积分:185
  • 历史总积分:531
  • 注册:2012年10月08日
发表于:2020-10-24 22:13:14
5楼

RROR 

LLOR循环移位指令

http://bbs.gongkong.com/D/202009/840749/840749_1.shtml

Wach0405

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 2回
  • 年度积分:20
  • 历史总积分:20
  • 注册:2020年10月24日
发表于:2020-10-25 10:07:21
6楼

FUNCTION_BLOCK FB8


VAR_INPUT

Takt:      BOOL;  // Takt-Signal input, such as M0.0 to M0.7

Start:     BOOL;

Reset:     BOOL;

END_VAR


VAR

Takt_old:               BOOL;

BitNr :                 INT;

currTime:               S5TIME;

biVal:                  WORD;

actFlag:                BOOL;

END_VAR


VAR_TEMP

Word_Temp:              WORD;

Key_Bit AT Word_Temp:   ARRAY[0..15] OF BOOL;

END_VAR


VAR_OUTPUT

OutputWord:     WORD; // Output assigns in QW Address

END_VAR


FOR BitNr:=0 TO 15 DO

IF Takt AND NOT Takt_old THEN // detect the rising edge of Takt Input

//Key_Bit[BitNr]: = Takt;

//OutputWord: = Word_Temp;

//currTime:=S_ODT (T_NO:=T10, S:=TRUE, TV:=T#1S,

//                 R:=FALSE; BI:=biVal,

//                 Q:=actFlag);

OutputWord := SHL(IN:=OutputWOrd, N:=1);

END_IF;

IF BitNr = 15 THEN

BitNr := 0;

END_IF;

END_FOR;


END_FUNCTION_BLOCK


以上是我的代码。但是如何执行

Key_Bit[BitNr]: = Takt;

currTime:=S_ODT (T_NO:=T10, S:=TRUE, TV:=T#1S,

                 R:=FALSE; BI:=biVal,

                 Q:=actFlag);

这两行代码呢—


多谢大家的指教!!

miy_gongkong

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 3056回
  • 年度积分:617
  • 历史总积分:12403
  • 注册:2008年9月18日
发表于:2020-10-26 16:33:10
7楼

定时器触发,循环执行移位指令

雨天2018

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 9回
  • 年度积分:37
  • 历史总积分:101
  • 注册:2018年5月19日
发表于:2020-10-30 13:45:28
8楼

IF #start AND NOT #stop THEN
    // Statement section
    #run_status:=TRUE ;
ELSIF #stop THEN
    #run_status:= FALSE;
END_IF;
IF NOT #run_status THEN
    // Statement section IF
    #lamp := 1;
    #Word_temp := 1;
    #word_temp2 := 1;
END_IF;
IF #Word_temp=16#800000 THEN
    // Statement section IF
    #Word_temp:=1 ;
END_IF;
#R_TRIG_Instance(CLK:=#clock,
                 Q=>#run_status_rise);
IF #run_status_rise AND #run_status THEN
    // Statement section IF
    #word_temp2:=SHL(IN:=#Word_temp, N:=1) ;
END_IF;
#Word_temp := #word_temp2;
#lamp := #Word_temp;

雨天2018

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 9回
  • 年度积分:37
  • 历史总积分:101
  • 注册:2018年5月19日
发表于:2020-10-30 13:50:11
9楼

lamp.png

工业技术互联

  • 精华:0帖
  • 求助:1帖
  • 帖子:8帖 | 48回
  • 年度积分:18
  • 历史总积分:400
  • 注册:2014年12月18日
发表于:2020-11-09 19:30:23
10楼

恰好,我在更新西门子SCL的编程方式,使用SCL进行西门子1200系列PLC编程,已经更新8篇文章了,如果你想看可以去关注一下。

我把文章发在上面,给你看一下。


image.png

此篇内容主要使用2个功能块:

1、ROR(循环右移)

2、ROL(循环左移)

3、R_TRIG


基本思想是,使用脉冲发生器产生定时震荡,捕获每个震荡周期的上升沿用于驱动ROR或者ROL移位。

通过一个位(M1.0)来设定跑马灯的方向。


首先,新建工程,参考此篇文章

然后为PLC分配时钟地址,如下图所示

image.png


工业技术互联

  • 精华:0帖
  • 求助:1帖
  • 帖子:8帖 | 49回
  • 年度积分:19
  • 历史总积分:401
  • 注册:2014年12月18日
发表于:2020-11-09 19:31:08
11楼

给"mb10"赋值1,用于循环移动的开始,编译下载后,可以通过"M1.0"进行控制流水灯的运行。

image.png13—20行的代码,没实际意义,用来监控程序的。

Smile-lyc

  • [版主]
  • 精华:179帖
  • 求助:44帖
  • 帖子:4010帖 | 19756回
  • 年度积分:565
  • 历史总积分:107277
  • 注册:2006年8月04日
发表于:2020-12-02 14:29:07
12楼

感谢求助者和答疑者对求助答疑板块的厚爱,赠人玫瑰,手留余香。

对于求助者要求:

1、请在一个月内自行结贴,把悬赏积分(如果设置积分悬赏求助)发放给答疑者;

2、如果在求助答疑过程中,自己已经有效解决问题,建议大家把解决问题方法在自己求助帖分享,有效分享可以获得50积分奖励。



相关主题

官方公众号

智造工程师