博图SCL语言教程:灵活加、减计数制作自己的增减计数器(CTUD)

博图SCL语言教程:使用SCL实现增减计数器(CTUD)

一、什么是增减计数器(CTUD)?

增减计数器(Up-Down Counter)是PLC编程中的基础功能块,具有以下特性:

  1. CU (Count Up):上升沿触发计数值增加

  2. CD (Count Down):上升沿触发计数值减少

  3. R (Reset):复位计数值到0

  4. LD (Load):装载预设值到当前值

  5. PV (Preset Value):目标设定值

  6. 当 CV >= PV 时,QU 输出为True

  7. 当 CV <= 0 时,QD 输出为True

二、SCL实现代码(完整函数块)

FUNCTION_BLOCK FB_CTUD
VAR_INPUTCU: BOOL;       // 加计数脉冲(上升沿有效)CD: BOOL;       // 减计数脉冲(上升沿有效)R: BOOL;        // 复位(优先级最高)LD: BOOL;       // 装载预设值PV: INT;        // 预设值
END_VAR

VAR_OUTPUTQ: BOOL;        // 达到预设值(CV >= PV)QU: BOOL;       // 上溢输出(CV >= PV)QD: BOOL;       // 下溢输出(CV <= 0)CV: INT;        // 当前计数值
END_VAR

VARbLastCU: BOOL;  // 记录CU上次状态bLastCD: BOOL;  // 记录CD上次状态
END_VAR

// 主逻辑
BEGIN// 优先级1:复位信号IF R THENCV := 0;Q := FALSE;QU := FALSE;QD := TRUE;// 优先级2:装载预设值ELSIF LD THENCV := PV;QU := (CV >= PV);QD := (CV <= 0);Q := QU;// 正常计数逻辑ELSE// 检测CU上升沿IF CU AND NOT bLastCU THENCV := CV + 1;END_IF;// 检测CD上升沿IF CD AND NOT bLastCD THENCV := CV - 1;END_IF;// 更新输出状态QU := (CV >= PV);QD := (CV <= 0);Q := QU;END_IF;// 保存当前状态供下次扫描使用bLastCU := CU;bLastCD := CD;
END_FUNCTION_BLOCK

三、使用示例

1. 在OB1中调用计数器

PROGRAM MAIN
VARmyCTUD: FB_CTUD;       // 实例化计数器bStartCount: BOOL;     // 启动计数信号bResetCount: BOOL;     // 复位信号iSetValue: INT := 6;  // 预设值
END_VAR// 主程序
BEGINmyCTUD(CU := bStartCount,  // 连接计数脉冲CD := FALSE,        // 本例只使用加计数R := bResetCount,   // 复位信号LD := FALSE,        // 本例不使用装载PV := iSetValue     // 设置目标值);// 当计数值达到10时触发动作IF myCTUD.Q THEN// 执行目标动作...END_IF;
END_PROGRAM

2. 监控关键值

变量名说明
myCTUD.CV7当前计数值
myCTUD.QUFALSE未达到预设值
myCTUD.QDFALSE计数值大于0

四、关键特性说明

  1. 信号优先级

    • 复位(R) > 装载(LD) > 计数(CU/CD)

    • 复位时强制CV=0并清除输出

  2. 边沿检测

    // 典型上升沿检测结构
    IF currentSignal AND NOT lastSignal THEN// 执行动作
    END_IF;
  3. 输出更新规则

    • QU = (CV >= PV)

    • QD = (CV <= 0)

    • Q = QU(兼容标准CTUD行为)

五、实际应用场景

  1. 生产线工件计数(进料+1/剔除-1)

  2. 仓库库存管理(入库+1/出库-1)

  3. 电梯楼层定位(上行+1/下行-1)

六、调试技巧

  1. 在博图监控表中添加myCTUD的所有变量

  2. 使用强制表功能测试CU/CD信号

  3. 通过HMI显示当前计数值CV

七、SCL实现优势

  1. 代码紧凑:比LAD/FBD节省70%屏幕空间

  2. 灵活扩展:可轻松添加计数限制、速率计算等功能

  3. 复用性强:封装后的FB可在整个项目中调用

提示:在频繁高速计数的场合(如编码器脉冲),建议使用博图原生的"高速计数器"模块!


通过这个SCL实现的CTUD计数器,您可以获得比传统梯形图更简洁高效的代码结构。根据实际需求,可扩展添加以下功能:

  • 计数范围限制(MIN/MAX)

  • 计数速率计算

  • 掉电保持功能

  • 多重预设值支持

建议将此FB保存在项目库中,方便后续工程复用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 应用被kill问题排查和处理

一、背景 博主有一款应用市场应用,同样的应用,在Android 10上开启三个下载正常,在Android 14上开启下载安装,很频繁被kill。首先想到的是,是不是应用内存太高,导致被kill,通过工具分析内存也不高,后面就想到是不是系统本身分配给应用的内存就不高,后来通过排查,确实是和系统的…

从代码学习深度强化学习 - 多臂老虎机 PyTorch版

文章目录 前言创建多臂老虎机环境多臂老虎机算法基本框架(基类)1. ε-贪心算法 (Epsilon-Greedy)2. 随时间衰减的ε-贪婪算法 (Decaying ε-Greedy)3. 上置信界算法 (Upper Confidence Bound, UCB)4. 汤普森采样算法 (Thompson Sampling)总结前言 欢迎来到“从代码学习深度强化…

Android学习之Window窗口

Android Window机制学习笔记 在使用Window Flag实现界面全屏功能时&#xff0c;发现自身对Android Window机制缺乏系统认知&#xff0c;因此进行了专项学习与整理。 本文主要参考以下优质资料&#xff1a; Android的Window详解Android官方Window文档 Window基本概念 1. Win…

华为云 Flexus+DeepSeek 征文|搭建部署Dify-LLM推理引擎,赋能AI Agent智能体实现动态联网搜索能力

华为云 Flexus 云服务器 X 实例专门为 AI 应用场景设计。它提供了强大的计算能力&#xff0c;能够满足 DeepSeek 模型以及后续搭建 AI Agent 智能体过程中对于数据处理和模型运行的高要求。在网络方面&#xff0c;具备高速稳定的网络带宽&#xff0c;这对于需要频繁联网搜索信息…

Python 100个常用函数全面解析

Python 100个常用函数全面解析 1. 类型转换函数 1.1 int() 将字符串或数字转换为整数。 # 基本用法 int(123) # 123 int(3.14) # 3# 指定进制转换 int(1010, 2) # 10 (二进制转十进制) int(FF, 16) # 255 (十六进制转十进制)# 临界值处理 int() # ValueError: …

分享在日常开发中常用的ES6知识点【面试常考】

前言 在日常的业务开发中&#xff0c;可以熟悉运用掌握的知识点快速解决问题很重要。这篇分享JS相关的知识点&#xff0c;主要就是对数据的处理。 注意&#xff1a;本篇分享的知识点&#xff0c;只是起到一个抛砖引玉的作用&#xff0c;详情的使用和更多的ES6知识点还请参考官…

CHI协议验证中的异常及边界验证

CHI协议验证中的异常及边界验证 针对 CHI 协议的错误注入工具、覆盖率衡量方法及实际项目中的投入平衡 CHI 协议作为多核系统中复杂的缓存一致性协议,验证其行为需要强大的工具和方法来执行错误注入和边界条件测试,并衡量测试覆盖率。以下详细讨论常用工具、覆盖率评估方法及…

技术专栏|LLaMA家族——模型架构

LLaMA的模型架构与GPT相同&#xff0c;采用了Transformer中的因果解码器结构&#xff0c;并在此基础上进行了多项关键改进&#xff0c;以提升训练稳定性和模型性能。LLaMA的核心架构如图 3.14 所示&#xff0c;融合了后续提出的多种优化方法&#xff0c;这些方法也在其他模型&a…

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…

Go 语言实现高性能 EventBus 事件总线系统(含网络通信、微服务、并发异步实战)

前言 在现代微服务与事件驱动架构&#xff08;EDA&#xff09;中&#xff0c;事件总线&#xff08;EventBus&#xff09; 是实现模块解耦与系统异步处理的关键机制。 本文将以 Go 语言为基础&#xff0c;从零构建一个高性能、可扩展的事件总线系统&#xff0c;深入讲解&#…

npm ERR! @biomejs/biome@1.9.4 postinstall: `node scripts/postinstall.js`

npm install 报错如下, npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! @biomejs/biome@1.9.4 postinstall: `node scripts/postinstall.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the @biomejs/biome@1.9.4 postinstall script. npm ERR! This is pro…

APMPlus × veFaaS 一键开启函数服务性能监控,让函数运行全程可观测

资料来源&#xff1a;火山引擎-开发者社区 近年来&#xff0c;无服务器架构&#xff08;Serverless&#xff09;的崛起让开发者得以从基础设施的复杂性中解放&#xff0c;专注于业务逻辑创新。但随着采用率提升&#xff0c;新的问题开始出现——函数实例的短暂生命周期、动态变…

玛哈特零件矫平机:精密制造中的平整度守护者

在精密制造、模具、冲压、钣金加工、汽车零部件、航空航天以及电子设备等众多工业领域&#xff0c;零件的平整度&#xff08;Flatness&#xff09;是一项至关重要的质量指标。微小的翘曲、扭曲或弯曲都可能导致装配困难、功能失效、外观缺陷甚至影响整机性能。为了消除零件在加…

std::make_shared简化智能指针 `std::shared_ptr` 的创建过程,并提高性能(减少内存分配次数,提高缓存命中率)

std::make_shared 是 C 标准库中的一个函数模板&#xff0c;用于简化智能指针 std::shared_ptr 的创建过程。引入 std::make_shared 的主要原因是提高代码的安全性、性能和可读性。以下是详细分析&#xff1a; 1. 安全性提升 避免显式调用 new 导致的错误 在不使用 std::make…

JDK版本如何丝滑切换

一句话总结 》》》步骤分为&#xff1a; 下载对应JDK配置环境变量 下载JDK 如何下载JDK这里不必多提&#xff0c;提出一点&#xff0c;就是多个版本的JDK最好放在一个文件夹里&#xff08;忽略我的java文件夹&#xff0c;这里都是不同的jdk版本&#xff09;&#xff1a; 配置环…

Rust 通用代码生成器:莲花,红莲尝鲜版三十六,哑数据模式图片初始化功能介绍

Rust 通用代码生成器&#xff1a;莲花&#xff0c;红莲尝鲜版三十六&#xff0c;哑数据模式图片初始化功能介绍 Rust 通用代码生成器莲花&#xff0c;红莲尝鲜版三十六。支持全线支持图片预览&#xff0c;可以直接输出带图片的哑数据模式快速原型。哑数据模式和枚举支持图片。…

45. Jump Game II

目录 题目描述 贪心 题目描述 45. Jump Game II 贪心 正向查找可到达的最大位置 时间复杂度O(n) class Solution { public:int jump(vector<int>& nums) {int n nums.size();if(n 1)return 0;int cur_cover 0;int cover 0;int res 0;for(int i 0;i < …

model.classifier 通常指模型的分类头 是什么,详细举例说明在什么部位,发挥什么作用

model.classifier 通常指模型的分类头 是什么,详细举例说明在什么部位,发挥什么作用 在深度学习模型中,分类头(Classifier Head)是指模型末端用于完成分类任务的组件,通常是一个或多个全连接层(线性层)。它的作用是将模型提取的高层语义特征映射到具体的分类标签空间。…

机器学习+城市规划第十四期:利用半参数地理加权回归来实现区域带宽不同的规划任务

机器学习城市规划第十四期&#xff1a;利用半参数地理加权回归来实现区域带宽不同的规划任务 引言 在城市规划中&#xff0c;如何根据不同地区的地理特征来制定有效的规划方案是一个关键问题。不同区域的需求和规律是不同的&#xff0c;因此我们必须考虑到地理空间的差异性。…

Kivy的ButtonBehavior学习

Kivy的ButtonBehavior学习 ButtonBehavior 简介1、主要特点2、基本用法3、主要事件4、常用属性5、方法代码示例 文档&#xff1a;https://kivy.org/doc/stable/api-kivy.uix.behaviors.button.html#kivy.uix.behaviors.button.ButtonBehavior ButtonBehavior 简介 ButtonBeha…