松下公司出的一道题目,那位帮忙讲解一下思路。 点击:1354 | 回复:19



梦醒七分

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 61回
  • 年度积分:0
  • 历史总积分:320
  • 注册:2018年3月20日
发表于:2018-12-12 08:15:28
楼主
求助帖30分-已结帖

5726d7a7417428ac408624b2df69d89.png

哪位大神帮忙看看这题目如果用三菱PLC做的话,该怎么做,能不能提供一下思路,谢谢。




请叫我王老湿

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:626帖 | 8688回
  • 年度积分:87
  • 历史总积分:345358
  • 注册:2011年4月25日
发表于:2018-12-12 08:36:32
1楼

采用移位指令可以简单实现该功能,正常是OK产品,当有NG产品时,触发移位寄存器第0位置1,检测产品,移动一位。

梦醒七分

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 61回
  • 年度积分:0
  • 历史总积分:318
  • 注册:2018年3月20日
发表于:2018-12-12 09:08:56
2楼


回复内容:

对: 请叫我王老湿 采用移位指令可以简单实现该功能,正常是OK产品,当有N... 内容的回复!

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

移位指令我也想过,但是这个产品之间距离不等,我感觉不好实现。

summer sky

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 50回
  • 年度积分:25
  • 历史总积分:6863
  • 注册:2018年5月29日
发表于:2018-12-12 11:26:53
3楼

时间不小于1S画起来  

chaochaocgc

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 75回
  • 年度积分:2
  • 历史总积分:663
  • 注册:2012年11月10日
发表于:2018-12-12 14:36:41
4楼

/////////////// "Global".Global.BUFFER[#I]为缓存数据用数组\\\\\\\\\\\\
///////////////通过BOOL_IN上升沿,数据按号顺序存储到数组内\\\\\\\\\\\\
IF #BOOL_IN AND NOT "Tag_5" THEN
    #I := #I + 1;
    "Global".Global.BUFFER[#I] := #CCD_IN;
END_IF;
"Tag_5" := #BOOL_IN;
///////////////通过BOOL_OUT上升沿,读取最先进栈的数据状态输出给OUT_Y\\\
///////////////状态读取后,栈位往下移一位,刷新堆栈数据\\\\\\\\\\\\
IF #BOOL_OUT AND NOT "Tag_6" THEN
    #OUT_Y := "Global".Global.BUFFER[1];
    FOR #J := 2 TO 11 DO
        "Global".Global.BUFFER[#J - 1] := "Global".Global.BUFFER[#J];
    END_FOR;
ELSIF NOT #BOOL_OUT THEN
    #OUT_Y := 0;
END_IF;
"Tag_6" := #BOOL_OUT;

chaochaocgc

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 75回
  • 年度积分:2
  • 历史总积分:663
  • 注册:2012年11月10日
发表于:2018-12-12 14:36:49
5楼

/////////////// "Global".Global.BUFFER[#I]为缓存数据用数组\\\\\\\\\\\\
///////////////通过BOOL_IN上升沿,数据按号顺序存储到数组内\\\\\\\\\\\\
IF #BOOL_IN AND NOT "Tag_5" THEN
    #I := #I + 1;
    "Global".Global.BUFFER[#I] := #CCD_IN;
END_IF;
"Tag_5" := #BOOL_IN;
///////////////通过BOOL_OUT上升沿,读取最先进栈的数据状态输出给OUT_Y\\\
///////////////状态读取后,栈位往下移一位,刷新堆栈数据\\\\\\\\\\\\
IF #BOOL_OUT AND NOT "Tag_6" THEN
    #OUT_Y := "Global".Global.BUFFER[1];
    FOR #J := 2 TO 11 DO
        "Global".Global.BUFFER[#J - 1] := "Global".Global.BUFFER[#J];
    END_FOR;
ELSIF NOT #BOOL_OUT THEN
    #OUT_Y := 0;
END_IF;
"Tag_6" := #BOOL_OUT;

PLC咕噜咕噜

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 33回
  • 年度积分:0
  • 历史总积分:89
  • 注册:2018年12月12日
发表于:2018-12-12 20:47:54
6楼

谢谢楼主分享!前来学习了!

木渎

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 27回
  • 年度积分:0
  • 历史总积分:106
  • 注册:2018年12月11日
发表于:2018-12-12 20:52:03
7楼

学习上面大神的思路。

大白菜

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 11回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2018年12月13日
发表于:2018-12-13 04:42:58
8楼

来学习 的路过

景果果

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 130回
  • 年度积分:0
  • 历史总积分:924
  • 注册:2018年10月12日
发表于:2018-12-13 13:43:21
9楼

学习一下,感谢楼主的分享


梦醒七分

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 61回
  • 年度积分:0
  • 历史总积分:318
  • 注册:2018年3月20日
发表于:2018-12-14 10:03:41
10楼


回复内容:

对: chaochaocgc /////////////// "Global".Gl... 内容的回复!

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

多谢大神讲解,要是能用梯形图或者模块化程序表示就更好了,这个ST语言对我还有一点难度。

Sammine

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 24回
  • 年度积分:0
  • 历史总积分:20
  • 注册:2014年5月27日
发表于:2018-12-20 18:09:52
11楼

好厉害,学习学习

Eleven_Uncle

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 8回
  • 年度积分:0
  • 历史总积分:78
  • 注册:2018年7月03日
发表于:2018-12-21 15:24:12
12楼

确实只有用移位才能记录产品状态01011111。

Enoch

  • 精华:0帖
  • 求助:2帖
  • 帖子:5帖 | 26回
  • 年度积分:0
  • 历史总积分:232
  • 注册:2012年3月11日
发表于:2018-12-25 19:09:33
13楼

1、出入栈

2、数据残存buffer

都可以

碧海_80

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 134回
  • 年度积分:0
  • 历史总积分:239
  • 注册:2002年1月06日
发表于:2018-12-25 23:57:28
14楼

直接移位指令就是,我的行业,这个就有实际应用了,多个工位检测,多个工位剔除都可以实现

maker210

  • 精华:0帖
  • 求助:2帖
  • 帖子:4帖 | 113回
  • 年度积分:0
  • 历史总积分:154
  • 注册:2014年8月11日
发表于:2019-01-21 17:52:43
15楼

image.png定义缓存容量的时候估计一下写入到读出中间最大会有多少的个产品。可以实现同时读写不干涉。

bubu唓

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 56回
  • 年度积分:0
  • 历史总积分:189
  • 注册:2011年9月11日
发表于:2019-03-26 14:34:14
16楼

5楼真的是牛,学习学习

HE启GEN

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 183回
  • 年度积分:0
  • 历史总积分:467
  • 注册:2017年1月08日
发表于:2019-11-30 22:30:05
17楼

IF "FirstScan" = TRUE THEN;

    #i := 0;

    #J := 0;

END_IF;

IF #传感器A信号=TRUE AND NOT #A脉冲信号 THEN ;

    #数组A[#i] := NOT #相机信号A AND #相机信号B = TRUE;

    #i := #i + 1;

END_IF;

#A脉冲信号 := #传感器A信号;

IF #传感器B信号 = TRUE AND NOT #B脉冲信号 THEN ;

    #OUT := #数组A[0];

    FOR #J := 1 TO 10 BY 1 DO;

        #数组A[#J - 1] := #数组A[#J];

    END_FOR;

END_IF;

IF #传感器B信号 = TRUE AND NOT #B脉冲信号 AND #i>0 THEN;

    IF #OUT = TRUE THEN ;

        #OUT_A := TRUE;

        #OUT_B := FALSE;

    END_IF;

    IF #OUT = 0 THEN ;

        #OUT_A := FALSE;

        #OUT_B := TRUE;

    END_IF;

    #计时器启动 := TRUE;

END_IF;

#B脉冲信号 := #传感器B信号;

#IEC_Timer_0_Instance(IN :=#计时器启动 ,

                          PT := T#0.6S,

                          Q => #计时器A);

 IF #计时器A = TRUE THEN;

   #OUT_A := FALSE;

   #OUT_B := FALSE;

   #OUT := FALSE;

   RESET_TIMER(#IEC_Timer_0_Instance);

   #计时器启动 := FALSE;

   #i := #i - 1;

  END_IF;

  IF "FirstScan" = TRUE THEN;

    #i := 0;

    #J := 0;

END_IF;

IF #传感器A信号=TRUE AND NOT #A脉冲信号 THEN ;

    #数组A[#i] := NOT #相机信号A AND #相机信号B = TRUE;

    #i := #i + 1;

END_IF;

#A脉冲信号 := #传感器A信号;

IF #传感器B信号 = TRUE AND NOT #B脉冲信号 THEN ;

    #OUT := #数组A[0];

    FOR #J := 1 TO 10 BY 1 DO;

        #数组A[#J - 1] := #数组A[#J];

    END_FOR;

END_IF;

IF #传感器B信号 = TRUE AND NOT #B脉冲信号 AND #i>0 THEN;

    IF #OUT = TRUE THEN ;

        #OUT_A := TRUE;

        #OUT_B := FALSE;

    END_IF;

    IF #OUT = 0 THEN ;

        #OUT_A := FALSE;

        #OUT_B := TRUE;

    END_IF;

    #计时器启动 := TRUE;

END_IF;

#B脉冲信号 := #传感器B信号;

#IEC_Timer_0_Instance(IN :=#计时器启动 ,

                          PT := T#0.6S,

                          Q => #计时器A);

 IF #计时器A = TRUE THEN;

   #OUT_A := FALSE;

   #OUT_B := FALSE;

   #OUT := FALSE;

   RESET_TIMER(#IEC_Timer_0_Instance);

   #计时器启动 := FALSE;

   #i := #i - 1;

  END_IF;

  


明mC12

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 127回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2020年8月20日
发表于:2022-08-04 17:53:46
18楼

用三菱梯形图怎么编写?


热门招聘
相关主题

官方公众号

智造工程师