技术论坛

怎么用312plc时钟定时触发一个bool量

作者 主题
游民

经验值: 70
发帖数: 15
精华帖: 0
主题:【求助】怎么用312plc时钟定时触发一个bool量


只看楼主 楼主 2021-05-07 00:09:09

大家好,求助大家个问题,我在使用博图v16对312plc进行编程时需要利用时钟触发一个变量,应该怎么做,我会读取和设置plc时钟,但是怎么用时钟触发一个变量不会做,比如我要每天8点钟开启某个设备,我的方法是采用时钟比较,因为每天都会有个8点钟,我想把时钟中的小时单独拿出来做比较,只要它和8相等就触发一个BOOL量。

1.我先是考虑用T_COMP时钟比较指令,但是这个指令支持比较的数据类型为DT,它只能比较年月日小时分钟秒,不能单独比较时钟中的小时。

2.我通过move指令把时钟中的小时,也就是LB15发送到某个字节比如MB10中,MB10的数据类型应该是BCD码,然后把MB10BCD码转换成十进制数,再通过和8比较,如果等于8就触发一个BOOL量,但是转换指令CONVERT不支持一个字节的BCD码转十进制。

3.我通过T_CONV转换时间并提取指令先把DT(日期和时间)转换为TOD(当天时间),在对TOD做比较或者转换成整数再做比较,但比较指令里不支持TOD,转换指令里也不支持TOD。

请教大家这个问题要怎么解决,或者有什么更好的方法,谢谢。


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1694365&b_id=4&s_id=0&num=7

版主

经验值: 16187
发帖数: 6610
精华帖: 50
回复:怎么用312plc时钟定时触发一个bool量


只看楼主 1楼 2021-05-07 13:05:18

定时中断也可以。


知其道,用其妙!
以下网友喜欢您的帖子:

  
游民

经验值: 70
发帖数: 15
精华帖: 0
回复:怎么用312plc时钟定时触发一个bool量


只看楼主 楼主 2楼 2021-05-14 14:00:40

我知道用定时器也可以实现,但定时器和时钟有区别的,比如我用时钟每天12点触发一个bool量,那么每天12点都是很准时的,即使plc停电2个小时,内部时钟还是会继续走的,通电后不需要再对时间,如果用定时器定24小时,那还要考虑plc的初始运行时间,如果plc第一次运行的时间是在8点,那么定时24小时后还是8点,而我需要的是每天12点触发一个变量,假如plc初始运行时间刚好在12点,我定时24小时,但是哪天plc停掉2小时又不准了,所以我想用时钟,大家有什么好的方法吗?


 
以下网友喜欢您的帖子:

  
侠客

经验值: 900
发帖数: 87
精华帖: 0
回复:怎么用312plc时钟定时触发一个bool量


只看楼主 3楼 2021-05-15 20:43:51

我是新手,似乎定时中断可以在你指定的时间进行输出,但是PLC的时间准不准这个我也不知道,我们这使用的PLC我最近还校正过一次时间,用了一年误差几十分钟了


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2790
发帖数: 390
精华帖: 5
回复:怎么用312plc时钟定时触发一个bool量


只看楼主 4楼 2021-05-15 23:09:10

按照你的说明

要求在自定义时间的某刻 取触发一个信号,你想用小时比较。好吧,

VAR_OUTPUT

year:INT;

month:INT;

day:INT;

hour:INT;

mins:INT;

second:INT;

week:INT;

END_VAR

VAR

read_status:INT;

copy_status1:INT;

read_time:DT;

act_time:ARRAY[0..8] OF BYTE;

TS:WORD;

week_no:INT;

END_VAR

//读取前 先将PLC时间与PG 时间同步  300PLC 没有用TIA  

read_status:= READ_CLK(CDT := read_time   //SFC1  

         ); // 读取系统时间

copy_status1:= BLKMOV(SRCBLK := read_time    //SFC20

       ,DSTBLK := act_time 

        );   //转化当前时间,并显示时间。

year:=BCD_TO_INT(act_time[0])+2000;

month:=BCD_TO_INT(act_time[1]);

day:=BCD_TO_INT(act_time[2]);

hour:=BCD_TO_INT(act_time[3]);

mins:=BCD_TO_INT(act_time[4]);

second:=BCD_TO_INT(act_time[5]);

TS:=BYTE_TO_WORD(act_time[7]);

week_no:=WORD_TO_INT(ts AND W#16#F) -1;

IF week_no = 0 THEN

    week:= 7;

ELSE

    week:=week_no;

END_IF;

可以根据你的要求取比较。
因为我不喜欢用TIA  一直时PCS7  + 300 这样用。


大家同行,you ok ? me !
以下网友喜欢您的帖子:

  
新手

经验值: 7
发帖数: 4
精华帖: 0
回复:怎么用312plc时钟定时触发一个bool量


只看楼主 5楼 2021-05-17 08:56:08

可以在CPU里定时时钟中断


 
以下网友喜欢您的帖子:

  
版主

经验值: 16187
发帖数: 6610
精华帖: 50
回复:怎么用312plc时钟定时触发一个bool量


只看楼主 6楼 2021-05-17 10:45:45

plc时钟累计误差是很明显的,需要定期对时矫正。


知其道,用其妙!
以下网友喜欢您的帖子:

  
游侠

经验值: 329
发帖数: 35
精华帖: 0
回复:怎么用312plc时钟定时触发一个bool量


只看楼主 7楼 2022-04-21 09:33:07

2.我通过move指令把时钟中的小时,也就是LB15发送到某个字节比如MB10中,MB10的数据类型应该是BCD码,然后把MB10BCD码转换成十进制数,再通过和8比较,如果等于8就触发一个BOOL量,但是转换指令CONVERT不支持一个字节的BCD码转十进制。

这一步前半步都会做了,只需要MB10和8对应的BCD码比(也即10进制数直接加16#,其他类推)较就可以了。


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
怎么用312plc时钟定时触发一个bool量
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。