S7 1200 PLC对编码器计数,断电记忆

准备工作

准备一款1200系列PLC,和装有TIA Portal 的上位机,用网线将两者连接。把编码器连接到PLC的输入端,可以是AB相正交解码或者单相的。

新建项目

在Portal上新建一个项目,添加一个对应型号的PLC,和一个4寸HMI。HMI用于方便交互,可以在电脑上仿真实现,不需要有实物。
在这里插入图片描述

PLC硬件配置

打开PLC的设备组态页面,点击右边的CPU本体,再点下面的 属性 - 常规:
在这里插入图片描述
如下图设置输入点的滤波时间,默认6.4ms滤波,如果接编码器,编码器的脉冲频率比较高,会导致漏检,所以要改小。需要先预估一下自己编码器在工作时,输出信号的周期能达到多少,然后选择一个合适的滤波时间,滤波时间要小于编码器信号变化的间隔。
在这里插入图片描述
展开高速计数器分支,在右边勾选启用,把运行模式改成和自己的编码器一致,最后确认输入点和导线连接一致。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打开系统常数页面,留意自己要使用的计数器端口的硬件标识符,比如下面HSC_1对应257,这个后面要用。
在这里插入图片描述

添加程序

在项目树中,新建一个启动OB,一个数据块:
在这里插入图片描述
如下图,在数据块中新建3个变量,类型分别为HSC_Count,DInt和Bool,对应下图中的Enc, EncCntMem和置零按钮。第一个是结构体,里面有很多成员变量,不用去改;第二个DInt用来在断电期间存储计数值,因此必须勾选“保持”;第三个Bool对应HMI中的清零按钮。
在这里插入图片描述
打开启动OB,按照下图添加程序。其中,MOVE操作是在上电时,把上次存储的值放到结构体的 NewCurrentCount中。之后把EnCV置位,表示要把NewCurrentCount装载到当前数值。
在这里插入图片描述
打开Main OB,添加如下程序。首先是把结构体的EnHSC置位,表示打开软件门;之后的CTRL_HSC_EXT_DB,是把硬件端口和结构体进行绑定,注意这里向函数输入的HSC参数,就是之前的硬件标识符;之后是如果EnCV被置位了,则将其复位,EnCV是用来更新计数值的,这样可以保证它每次只置位一个周期;之后是响应清零按钮,和启动OB中的程序类似;最后,把当前计数值CurrentCount赋值到EncCntMem,实现断电记忆。
在这里插入图片描述
上面的CTRL_HSC_EXT函数,可以在右边指令栏找到:
在这里插入图片描述

编辑HMI画面

编辑HMI的根画面,把数据块中的EncCntMem拖到页面中,再放个按钮,按钮按下时置位数据块中的Bool,释放时复位。
在这里插入图片描述
在这里插入图片描述

下载程序并启动

为了成功下载,需要在电脑上打开控制面板,按下图设置PCPG接口,需要给PLC程序下载的信道设置正确的网口。
在这里插入图片描述
最后,项目树中右击PLC,下载硬件和软件;右击HMI,启动仿真。不出意外的话,就可以实现编码器计数、清零和断电保存的功能了。
在这里插入图片描述
在这里插入图片描述

后记:

在数据块中,使用了一个DInt实现断电存储。如果把结构体Enc设成保持,是不是就可以直接实现记忆,不需要DInt了?我试了一下是不行的,在上电时,结构体的CurrentCount总是会清零一次。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值