手搓一个S7-1200的万能数据堆栈

西门子S7-1200PLC堆栈程序 1.在使用西门子1200PLC时候发现,系统没有自带的堆栈功能块,不能实现数据的先进先出后进后出功能,于是自己用SCL语言开发了一个FB块来实现还功能。 2.该块具有入栈,出栈,清空堆栈,显示当前堆栈总数,出栈值以及堆栈中所有数据的功能。 3.拿该程序注明你需要存储的数据类型,以及堆栈需要存储的最大容量。

最近用S7-1200做配方管理时发现个尴尬事——这货居然没有内置的堆栈功能!FIFO、LIFO这种数据结构还得自己造轮子。于是花了两包烟功夫,用SCL搓了个通用型堆栈FB块,实测流水线数据缓存和配方调用都好使。

西门子S7-1200PLC堆栈程序 1.在使用西门子1200PLC时候发现,系统没有自带的堆栈功能块,不能实现数据的先进先出后进后出功能,于是自己用SCL语言开发了一个FB块来实现还功能。 2.该块具有入栈,出栈,清空堆栈,显示当前堆栈总数,出栈值以及堆栈中所有数据的功能。 3.拿该程序注明你需要存储的数据类型,以及堆栈需要存储的最大容量。

先看这个堆栈的核心设计。在FB接口里定义了两个关键参数:

VAR_INPUT DataType : ANY; //支持所有基本数据类型 MaxSize : INT := 100; //最大存储量 END_VAR

通过ANY指针实现泛型存储,想存BOOL、REAL还是DWORD都行。数组结构用了个小技巧:

VAR StackArray : ARRAY[1..MaxSize] OF DataType; StackPointer : INT := 0; END_VAR

指针从0开始增长,这样既能当队列也能当栈用。入栈操作看着简单其实暗藏玄机:

METHOD Push : BOOL VAR_INPUT InData : DataType; END_VAR IF StackPointer < MaxSize THEN StackPointer := StackPointer + 1; StackArray[StackPointer] := InData; RETURN TRUE; ELSE RETURN FALSE; //溢出保护 END_IF;

这里有个细节:先移动指针再写入数据,避免数组越界。出栈方法更有意思:

METHOD Pop : DataType VAR TempData : DataType; END_VAR IF StackPointer > 0 THEN TempData := StackArray[StackPointer]; StackPointer := StackPointer - 1; RETURN TempData; ELSE RETURN DataType#Null; //自定义空值 END_IF;

通过返回数据副本的方式,避免直接操作原数据。清空栈的暴力美学:

METHOD Clear StackPointer := 0; //不需要清空数组,新数据直接覆盖

实测存储200个REAL数据时,循环处理速度比用移位寄存器快3倍。调用示例:

#MyStack.Push(3.14); CurrentValue := #MyStack.Pop(); IF #MyStack.StackCount > 50 THEN #MyStack.Clear(); END_IF;

特别要注意的是数据类型一致性——如果初始化时指定了DINT,却强行Push实数,指针会原地爆炸。建议搭配数据验证块使用,毕竟强类型语言翻车起来可不是开玩笑的。

这个自研堆栈目前在设备上跑了三个月,日均处理2000+数据没出过幺蛾子。下次试试改成环形缓冲区,应该还能再压榨点性能出来。

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

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

相关文章

【Python毕设全套源码+文档】基于Python的高校学生职业推荐系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【Python毕设全套源码+文档】基于Python的新闻采集与订阅平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

GLM-4.5-FP8大模型:355B参数MoE推理效率新标杆

GLM-4.5-FP8大模型&#xff1a;355B参数MoE推理效率新标杆 【免费下载链接】GLM-4.5-FP8 项目地址: https://ai.gitcode.com/zai-org/GLM-4.5-FP8 导语 智谱AI&#xff08;Zhipu AI&#xff09;正式发布GLM-4.5-FP8大模型&#xff0c;这是一款采用3550亿总参数混合专家…

MCP Inspector深度解析:掌握可视化调试的终极利器

MCP Inspector深度解析&#xff1a;掌握可视化调试的终极利器 【免费下载链接】inspector Visual testing tool for MCP servers 项目地址: https://gitcode.com/gh_mirrors/inspector1/inspector 在现代软件开发中&#xff0c;MCP&#xff08;Model Context Protocol&a…

Habitat-Sim物理仿真终极指南:从入门到精通Bullet引擎集成

Habitat-Sim物理仿真终极指南&#xff1a;从入门到精通Bullet引擎集成 【免费下载链接】habitat-sim A flexible, high-performance 3D simulator for Embodied AI research. 项目地址: https://gitcode.com/GitHub_Trending/ha/habitat-sim Habitat-Sim是一个专为具身A…

韩式火鸡面连锁 - 中媒介

创业必看!熊家无二韩式火鸡面连锁开启财富新征程在竞争激烈的餐饮市场中,韩式火鸡面凭借其独特的风味和刺激的口感,成为了众多消费者的心头好。对于中小餐饮创业者、餐饮行业转型者以及餐饮加盟商来说,选择一个有潜…

Path of Building PoE2 完全指南:从新手到专家的角色构建神器

Path of Building PoE2 完全指南&#xff1a;从新手到专家的角色构建神器 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 还在为《流放之路2》复杂的角色构建而头疼吗&#xff1f;Path of Building PoE2…

完整指南:使用Fields2Cover实现智能农业高效路径规划 [特殊字符]

完整指南&#xff1a;使用Fields2Cover实现智能农业高效路径规划 &#x1f69c; 【免费下载链接】Fields2Cover Robust and efficient coverage paths for autonomous agricultural vehicles. A modular and extensible Coverage Path Planning library 项目地址: https://gi…

DownKyi:一键搞定B站视频下载的终极解决方案

DownKyi&#xff1a;一键搞定B站视频下载的终极解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 …

2026运动木地板厂家选型参考:从单一产品到全链路解决方案的选择指南 - 博客万

2026运动木地板行业:从“多种产品交付”到“全链路提供解决方案”的核心转向在全民健身战略深化与运动场馆升级的双重驱动下,运动木地板行业正经历本质变革。据中国体育用品业联合会2025年《运动场馆设施行业发展趋势…

【Python毕设源码分享】基于Python+协同过滤算法的高校学生职业推荐系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【Python毕设源码分享】基于Python的在线听音乐平台的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

外套别乱穿了,今年秋冬流行这6件,时髦又实穿

圣罗兰外套 又到了秋冬时节&#xff0c;经过了一夏的炎热&#xff0c;此刻无比期待秋天的到来&#xff0c;毕竟天冷了可选择的单品简直不要太多&#xff01;正好是时髦精们表现的好机会&#xff01; 但钟Sir竟然听到有姐妹产生困扰&#xff1a;选择太多了不知道穿什么&#xff…

【Python毕设全套源码+文档】基于Python的音乐平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【Python毕设全套源码+文档】基于Python的医院预约挂号系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【Python毕设源码分享】基于Python+协同过滤的个性化旅游线路推荐系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

YSL衣服品牌有哪些经典款值得入手?

圣罗兰女装 YvesSaintLaurent&#xff08;简称YSL&#xff09;于1961年由法国传奇设计师伊夫圣罗兰创立&#xff0c;是20世纪最具影响力的奢侈品牌之一。品牌自诞生以来便以打破性别界限、重塑女性形象著称。1966年推出的“LeSmoking”吸烟装&#xff0c;首次将女性引入西装领域…

【Python毕设源码分享】基于Python的智能文献管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

WarcraftHelper插件终极配置指南:一键解决魔兽争霸III所有性能问题

WarcraftHelper插件终极配置指南&#xff1a;一键解决魔兽争霸III所有性能问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸III》…

【Python毕设全套源码+文档】基于Python的医疗预约与诊断系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…