首页 上一页 1 2 3 下一页 尾页

求助:s7-300日期比较及时间控制问题,急! 点击:9840 | 回复:50



ld3506

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 7回
  • 年度积分:0
  • 历史总积分:120
  • 注册:2006年10月20日
发表于:2007-05-17 10:03:00
楼主
小弟初次使用S7300,遇到如下问题还望高手指点.
   1.根据PLC系统时间,当其在某一时间段如(11-25至03-22)则进入冬天程序控制,否则为夏天控制.请问如何进行以上判断及操作?
   2.有三台电机为循环控制,如昨天运行1#机,则今天运行2#机,明天运行3#机,后天又运行1#机,如此反复.但用定时器最多满足不了定时要求.问要实现以上功能该如何编程序?
  谢谢!急!



天天看书不烦

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 38回
  • 年度积分:0
  • 历史总积分:64
  • 注册:2005年9月05日
发表于:2007-05-17 11:26:00
1楼
第一个问题:好像可以用读取时钟指令来读取当前日期作为比较判      断来实现.
第二个问题:用S7-GRAPH(顺控)应该很容易做到.

小沟

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 36回
  • 年度积分:0
  • 历史总积分:118
  • 注册:2003年4月23日
发表于:2007-05-17 20:39:00
2楼
第一个可用SET_CLK(SFC0)和READ_CLK(SFC1)实现。
第二个的方法应该很多,逻辑也很简单。

帮主

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 34回
  • 年度积分:0
  • 历史总积分:102
  • 注册:2005年2月23日
发表于:2007-05-17 21:29:00
3楼
第二个题目用计时器是一个比较简单的方法!

yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2007-05-18 06:23:00
4楼
第二个问题的解决方法和第一个一样,通过读取时间日期并比较,如果不是同一天,则将输出点移位就可以了。

guafa58

  • 精华:1帖
  • 求助:0帖
  • 帖子:43帖 | 2142回
  • 年度积分:4
  • 历史总积分:3969
  • 注册:2006年1月13日
发表于:2007-05-18 08:19:00
5楼
同意楼上啊,方法很多,第一个可用SET_CLK(SFC0)和READ_CLK(SFC1)实现。
第二个的方法应该很多,逻辑也很简单。这个用的多啊,也容易操作啊

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2007-05-18 09:33:00
6楼
第一个:比较当前时间;
第二个:可以同第一个,也可以计时器×计数器;

指点江山

  • 精华:1帖
  • 求助:0帖
  • 帖子:13帖 | 124回
  • 年度积分:0
  • 历史总积分:308
  • 注册:2005年7月23日
发表于:2007-05-18 10:49:00
7楼
我说一下第二个问题的思路:[color=#0000FF]读取当前的日期,取日数值存到VB中,然后做除法运算(除3,即除你的电机数)求余数,记住余数存放VB的位置,比较余数跟0、1、2的关系,
=0,驱动1#电机;
=1,驱动2#电机;
=2,驱动3#电机;
、、、、、、、[/color]
【注意】[color=#FF0000]电机机械、电气互锁[/color]
不用循环,不用移位。

ld3506

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 7回
  • 年度积分:0
  • 历史总积分:120
  • 注册:2006年10月20日
发表于:2007-05-18 11:11:00
8楼
谢谢大家的指导, 但用SET_CLK(SFC0)和READ_CLK(SFC1)的数据类型都为DT。其包括年\月\日\时\分\秒,而我想每年的某一时间段如(11-25至03-22)则进入冬天程序控制,否则为夏天控制.其中只需要判断比较月\日就行,请问如何提取月\日及进行以上判断及操作?谢谢!

老工控

  • 精华:1帖
  • 求助:0帖
  • 帖子:61帖 | 4475回
  • 年度积分:0
  • 历史总积分:22733
  • 注册:2003年6月25日
发表于:2007-05-18 11:28:00
9楼
第一个问题,读取当前时间进行比较,启动相应程序

第二个问题,取出当前日期存入MB1,同时置位M0.1,启动M1
M0.1的上升沿(必须用边沿触发)将MB1送入MB2
一直比较MB1和MB2,如相等,M1继续运行;
如不相等,加上M0.1置位M0.2,同时复位M0.1,启动M2
同理,在M0.2接通时,如果数据不等,置位M0.3,同时复位M0.2启动M3
同理,在M0.3接通时,如果数据不等,置位M0.1,同时复位M0.3启动M1

注意:MB1送入MB2的条件必须使用边沿,否则MB1和Mb2总是相等,无法比较

ld3506

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 7回
  • 年度积分:0
  • 历史总积分:120
  • 注册:2006年10月20日
发表于:2007-05-18 12:52:00
10楼
谢谢老工控的解答,第一个问题还不是很明白,尤其是如何提取READ_CLK(SFC1)读出数据中的月\日,希望详解,谢谢!

亚星

  • 精华:1帖
  • 求助:0帖
  • 帖子:14帖 | 340回
  • 年度积分:0
  • 历史总积分:394
  • 注册:2001年1月08日
发表于:2007-05-18 14:15:00
11楼
你看一下READ_CLK(SFC1)的在线帮助.在LAD编辑器里,找到系统功能的程序块里选中SFC1,而后点击F1键就会跳出在线帮助

老工控

  • 精华:1帖
  • 求助:0帖
  • 帖子:61帖 | 4475回
  • 年度积分:0
  • 历史总积分:22733
  • 注册:2003年6月25日
发表于:2007-05-18 14:28:00
12楼
用SFC0设置时间,SFC1读出时间进行比较。方法如下:
  1、建立一共享数据块,比如DB1,SYMBOLS设为AA(DB1和AA可以任意设定,在此只是举例)
  2、打开数据块DB1,进行变量声明:(第1个字由系统占用,我们从第2个字开始)在NAME栏中声明名称为DW2,TYPE栏中声明变量类型为“DATE_AND_TIME”,初始值自动生成。同样在声明DW10。每个变量占用8个字节,分别代表年、月、日、时、分、秒、星期。
  3、在OB1里调用DB1
  4、设定时间:调用SFC0,在PDT端输入“AA”.DW2,在RET_VAL端输入一个字,比如MW100
  5、读出时间:调用SFC1,在CDT端输入“AA”.DW10,在RET_VAL端输入一个字,比如MW102
  6、在DB1中,自DB1.DBW2到DB1.DBW9存放须设定的年、月、日、时、分、秒、星期的值;自DB1.DBW10到DB1.DBW17存放实际的年、月、日、时、分、秒、星期的值;
  7、比较DB1.DBW10到DB1.DBW17的值和你需要的值,进行你的比较操作。
  
  
  
  说明:STEP7中有这方面的介绍,大致是在OB1里面进行变量声明,进行时间的设定和取出,由于取出的值不能直接应用,再通过FC6、7、8等转换出来,我觉得很麻烦,因此应用如上方法实现。






具体参考:
http://www.gongkong.com/tech/detail.asp?id=291603

ld3506

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 7回
  • 年度积分:0
  • 历史总积分:120
  • 注册:2006年10月20日
发表于:2007-05-18 16:21:00
13楼
谢谢大家!我再去试试!

NEWBRIDGE

  • 精华:0帖
  • 求助:0帖
  • 帖子:20帖 | 650回
  • 年度积分:0
  • 历史总积分:1212
  • 注册:2005年3月05日
发表于:2007-05-18 17:03:00
14楼
我的建议是:
一、有人参与非24小时连续运行
1、搞个选择开关,分为“冬天”、“夏天”两位
2、还是搞个选择开关,让工人每天开机时拨一下。
二、无人值守24小时连续运行
1、还是建议用:选择开关,分为“冬天”、“夏天”两位,因为每年跑两次不算麻烦,还安全可靠,
2、首先了解清楚每天的时间界限,如要求不高,可用“老工控”的方法,如果要求高就要用外部同步标准时间来控制,具体的比较简单

天使有错

  • 精华:0帖
  • 求助:0帖
  • 帖子:14帖 | 62回
  • 年度积分:0
  • 历史总积分:110
  • 注册:2005年6月10日
发表于:2007-05-27 08:18:00
15楼
同意NEWBRIDGE的说法,我感觉这种方法比较可靠,而且这方法和现场工艺能够结合在一起,当然如果是现场工艺要求不严格的情况下老工控这位朋友的作法很可取,相当好。

博异

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 70回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2006年7月24日
发表于:2007-05-27 09:50:00
16楼
你用计数器和定时器合用,随便哪个时期的时间,都能很好的控制!很简单的

sharq-james

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:100
  • 注册:2006年8月27日
发表于:2007-05-27 17:47:00
17楼
我同意大家的思路

123789

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 129回
  • 年度积分:0
  • 历史总积分:392
  • 注册:2006年2月20日
发表于:2007-05-27 20:46:00
18楼
第二个问题,取出当前日期存入MB1,同时置位M0.1,启动M1
M0.1的上升沿(必须用边沿触发)将MB1送入MB2
一直比较MB1和MB2,如相等,M1继续运行;
如不相等,加上M0.1置位M0.2,同时复位M0.1,启动M2
同理,在M0.2接通时,如果数据不等,置位M0.3,同时复位M0.2启动M3
同理,在M0.3接通时,如果数据不等,置位M0.1,同时复位M0.3启动M1

注意:MB1送入MB2的条件必须使用边沿,否则MB1和Mb2总是相等,无法比较


请问老工控:
1.如何取出当前日期存入MB1,当前日期格式是怎样的?
2.(必须用边沿触发),这个对应的指令是什么?
3.老工控能不能抽点时间把上面文字描述的转化为语句表贴出来,让我们这些新手学习一下

非常感谢!
永远支持老工控!

老工控

  • 精华:1帖
  • 求助:0帖
  • 帖子:61帖 | 4475回
  • 年度积分:0
  • 历史总积分:22733
  • 注册:2003年6月25日
发表于:2007-05-29 11:58:00
19楼
1、当前日期和时间为“DATE_AND_TIME”,你按上面的步骤去做,就会把时间格式转化为数据格式读出来
2、边沿触发就是上升沿,是最基本的指令,请看一下指令表
3、其实程序本身不是这里的重点,重点是要进行变量声明,将时间取出

彩云之滇东北

  • 精华:20帖
  • 求助:5帖
  • 帖子:107帖 | 2725回
  • 年度积分:0
  • 历史总积分:21121
  • 注册:2005年6月14日
发表于:2007-05-29 15:04:00
20楼
学习学习

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 3 下一页 尾页