马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?请使用中文注册
×
100个数据的输入输出延时方式的SCL编程 昨天,帮公司同事处理一个编程逻辑关系问题,在处理过程中发现原程序者用最原始的方式处理多个I、Q输入、输出变量的延时,作为输入、输出的防抖动和滤波,虽然,效果能够同样达到,但是,总感觉似乎缺少一点什么“东西”似的。晚上吃过晚饭就想起这个事情,于是,打开电脑准备按自己的思路测试一番自己的想法。 过程: 1) 新建一个测试项目,选择plc为s7-1214C,新建一个FB1,语言下载SCL及测试用的DB1,图示: 假设测试100个输入I变量的接通延时的测试。 定时器编号定义Array[0..99] of IEC_TIMER,定时器延时数据定义Array[0..99] of Time
2) 在Array[0..99] of Time的默认值中,分别填写需要延时的定时数据,图示: 本次测试,只写了定时器[0] ~ 定时器[9]这样10个为例,分别写入1 ~ 10S不同的定时数据。
3) 在DB1中新建测试用的数据,图示:100个输入,100个输出。 4) 在OB1中调用,并下载到仿真测试,图示:
5) 为测试方便,新建监控表_1,图示:
将输入[0] ~ 输入[9]同时使能为1后,输出[0] ~ 输出[9]分别以间隔1S的时间依次输出,同理,编辑输出[0..99],将输入[0..99].Q作为输出[0..99]的启动接通延时条件,启动输出接通延时定时器,当延时时间到达后,输出[0..99]的状态值,图示:
6) 在输出定时器Array[0..99]写入10 ~ 1S的时间数据,图示: 7) 重新将程序编译、保存后,下载到仿真,重新启动输入[0] ~ 输入[9]的使能,图示:  达到初始思想效果,本次测试结束。
小结: 1) 多个IEC定时器应用时,定时器背景数据放置在FB1的背景数据块DB3中,在FB1接口下的定时器[0..99]单独实现接通延时定时器的数据设置,方便程序管理,如果需要外设修改时间数据,可以将连接在接口Static变更为in_out接口上,那样方便在FB1管脚外进行修改定时器延时时间。 2) 利用FOR或者自身的循环机制,“轮询”各输入、输出通道的状态值,一旦检测到与“索引”匹配的地址为1时,启动延时接通定时器,延时时间到达后,输出到各自对应的通道。其中,FOR循环方式优于自身周期累加方式,启动接通延时定时器时间更精确。 3) 利用数组Array及FOR循环的索引,能够高效的把100个通道的状态在一个循环周期中采集一边,读、写数据信息的效率高,响应快捷。
|