S7-200采集频率信号

S7-200可以借助高速计数器完成频率信号采集,接入流量计、转速等信号。官方给出的程序块无法完成多路同时采集,需要自己进行修改。

首先下载官方的频率采集库

SIOS

下载后导入library,在library中出现Frequency(v1.0)

拖进ladder后,可以在program block里打开。首先右键Frequency(SBR1),选择Properties,切换到Protection,输入1234,点OK,完成程序块解锁。现在可以打开程序块看看内部。

程序的实现也很简单

1、通过BGN_ITIME获取时间戳,保存至BGN_time,同时保存一下当前的计数器值;

2、通过CAL_ITIME获取当前时间距离BGN_time的时长,如果大于Time_interval(默认是1秒),则再次获取计数器值。接着把计数器值相减,除以时长,得到频率;

3、整个过程都由Active位控制。当Active位置0时,停止采集,并且输出0Hz;

整个过程要用到一系列局部变量和数个V寄存器。问题就出在V寄存器,当使用多个子函数时,STEP7却给它们分配了同一片地址区域,导致各个子函数都不能正常运行。所以权宜之计是把子函数自己重写一遍,或者另存为单独的子函数,导入工程,再手动修改V地址,避免冲突。

子函数导出的方法是,在空工程中引入官方Frequency子函数,解锁,在ladder中打开。接着点击File->Export,导出为.awl。导出时注意当前frequency子函数的SBR编号,不可与目标工程中已有的子函数冲突。

在目标工程中右键program block->Import,导入子函数。接着修改子函数中的所有VD地址。

同时记得用Instruction wizard导入高速计数器的初始化块并写初始化程序。


不同模式要用不同管脚。例如模式0,HSC0用I0.0,HSC1用I0.6。

相关推荐
molaifeng2 小时前
Go 语言如何实现高性能网络 I/O:Netpoller 模型揭秘
开发语言·网络·golang
崇山峻岭之间2 小时前
Matlab学习记录33
开发语言·学习·matlab
Evand J2 小时前
【2026课题推荐】DOA定位——MUSIC算法进行多传感器协同目标定位。附MATLAB例程运行结果
开发语言·算法·matlab
jllllyuz2 小时前
基于MATLAB的二维波场模拟程序(含PML边界条件)
开发语言·matlab
忆锦紫3 小时前
图像增强算法:Gamma映射算法及MATLAB实现
开发语言·算法·matlab
亲爱的非洲野猪4 小时前
Java锁机制八股文
java·开发语言
LawrenceLan4 小时前
Flutter 零基础入门(十二):枚举(enum)与状态管理的第一步
开发语言·前端·flutter·dart
charlie1145141915 小时前
从 0 开始的机器学习——NumPy 线性代数部分
开发语言·人工智能·学习·线性代数·算法·机器学习·numpy
catchadmin5 小时前
Laravel12 + Vue3 的免费可商用商业级管理后台 CatchAdmin V5 正式发布
开发语言·php
袁气满满~_~5 小时前
Python数据分析学习
开发语言·笔记·python·学习