news 2026/6/4 23:36:20

基于PLC设计的计算器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于PLC设计的计算器

实习要求所以来做这么一个项目,说实话这种东西交给单片机就行,但是没办法任务嘛,就当锻炼自己的代码写作能力了,接下来我就分享以下我的写作过程和我的心得体会。

首先任务要求用PLC设计一个计算机,并且得使用面板功能。

这里说一下我了解这个功能后对它的理解:我认为面板就类似于把一个模块集成起来,然后把函数这些调用口也集成起来。当下次如果还要用到另一个设备也是这个模块,我们只需要直接把这个集成的模块拉出来然后把接口函数写上就能直接套用了。简单一句话:方便集成使用。

先给大家看看最终成品:

然后是代码部分的分享和感受:

1、首先既然目的是要集成那我代码也集成那就做一个FB块

接口函数很简单 Count_In表按键 Mark_In表模式标志位 OutPut表输出。

(为什么Mark_In写在InOut?因为这个接口的意思就是能输出也能对他的值进行操作,我后续还需要通过控制这些值来做到功能切换。)

(这Static里面还有变量,Static表静态变量嘛,然后就可以在里面放一些辅助触点比如说上升沿触发输入2就需要一个辅助触点记录这个周期的上一个电平值,或者中间变量等等)

我分享一下为什么我要在Static里面写这些而不是默认变量表里面写(我最开始写的是默认变量表里面),因为我如果要保证这个代码能够同时支持几个设备我就不能只有一批辅助触点,不然就多线圈了,到时候直接就是乱的,所以我尝试在Static里面写那下次要再次复用,这个FB块会创建一个相应的DB块来储存这写变量。总结:保证FB块的重复使用功能

2、Count_In即按键输入,把有的按键全部添加进来了方便后续HMI添加按键并操作。

3、Mark_In即标志位输入,方便后续切换功能和使用HMI记录此时的功能。

当然这两步里面都有一个步骤就是自己创建数据类型,不懂得可以去学习一下,类似于单片机的结构体,其实本质和PLC的结构体也是一样的。

4、代码我分成了四个程序段

数字识别包括我按下按键转换成数字其中还有识别小数点

5、我直接拿9来给大家举例子

分成按下小数点后和没按小数点两个板块,上面为没按小数点,下面为按下小数点

先分享一下上面不按小数点的逻辑,OutPut默认为0,Num_4属于中间量,用于存储按键值和后续退格功能,第一次输入9;第二次输入 9×10+Num_4=90+9=99;第三次99×10+Num_4=999……

然后是下面按下小数点后的逻辑

这里用了自锁和其他按键的对他的互锁,保证按键之间不会冲突和计算逻辑不会错误

然后在看到上面的逻辑图,其中Num_3默认值是10,每输入一次Num_3×10,然后

输入的值÷Num_3,即第一次输入 9÷10=OutPut=0.9;第二次输入9÷100+OutPut=0.99;第三次……

6、其次是运算功能键,这个步骤其实相对而言也很简单,我还是只拿+来举例子其他的大家举一反三就能够做出来。

和小数点按键一样得有自锁和互锁,并且得加很重要的一步,就是把OutPut的值给Num_2并且OutPut清零,然后又可以继续按着上面的数字识别的逻辑给OutPut输入值了。并且加法标志位也已经置1了后续逻辑也已经很清晰了。

这里讲一下OutPut和Num_2是储存数据的,每次按下运算键OutPut会把值传给Num_2并且自己空出来;Num_4是用于不存在小数点时的中间量储存;Num_3适用于存在小数点时位置的控制。

7、最后是等于键按下之后,进行逻辑运算,上面说到我们标志位已经置1了即我们已经知道我们需要进行什么运算了(+、-、×、÷),这里我们只需要进行运算和清除运算符号就行了,逻辑如下:

8、退格,我这里用的比较简单,但功能属于丐版,只能实现退一次,逻辑如下:

依旧分成有小数点标志和没小数点标志,还有简单的逻辑判断,主要操作就是让OutPut-Num_4和把数字的位进行还原,即本来是五位数退格之后要变成四位数;本来数字要是0.001要变回0.01,然后就是退格标志的复位,让他只退格一次。

9、到此其实计算机的整体逻辑框架基本结束了,再分享一下我其他功能的逻辑

1)百分号逻辑

2)C和CE的逻辑

10、最后就是HMI中面板的制作

要点1:这里的HMI仿真不能用精简版,因为精简版没有创造面板这个功能。

要点2:最好还是自己先写一个用户变量当接口变量,方便接入和统一参数。

要点3:用户变量也得拖入HMI的面板功能中,这样他的接口变量才能识别这个变量类型。

先把你画好的HMI界面全选然后选择创建面板,然后会进入这个界面

然后右下角右键点击创建新的类别或者新的属性,我选的新的类别这里是可以再这个类别添加新的属性,然后就可以在里面添加新的接口变量了,我直接接入的是我写的用户变量类型,然后再右键你要控制的按键点击属性

正常写逻辑把所有要控制的都走一遍就ok了,你献完之后上面那个图会自己画出来一条线,把你的按键和变量连接起来。

最后创建完成右边是这样的,他直接集成成一个面板下次使用可以直接拖出来

拖出来之后点击模块然后把接口里面输入你的新的变量就可以直接使用了。

总结:逻辑方面这个确实写得很优雅;然后对于HMI的面板也会有新的理解,以后在工程上能够更好的去运用一下博途的较为实用的功能。

如果你觉得有意思或者对你有帮助麻烦留下一个宝贵的点赞哦

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 8:02:05

【稀缺资料】MCP量子计算错误模型详解:破解NISQ时代最棘手难题

第一章:MCP Azure量子错误处理概述在构建基于Azure Quantum的量子计算应用时,量子错误处理是确保计算结果可靠性的核心环节。由于量子比特(qubit)极易受到环境噪声和退相干影响,原始的量子操作往往伴随较高的错误率。为…

作者头像 李华
网站建设 2026/6/4 11:44:04

CompareM基因组比较分析工具完全指南:从零基础到精通应用

CompareM基因组比较分析工具完全指南:从零基础到精通应用 【免费下载链接】CompareM 项目地址: https://gitcode.com/gh_mirrors/co/CompareM 想要快速掌握CompareM这款专业的基因组比较工具吗?本指南将为你提供全新的学习路径,采用问…

作者头像 李华
网站建设 2026/6/4 7:44:25

革命性突破:YOLOv11n如何重新定义轻量级目标检测的技术边界

革命性突破:YOLOv11n如何重新定义轻量级目标检测的技术边界 【免费下载链接】ultralytics ultralytics - 提供 YOLOv8 模型,用于目标检测、图像分割、姿态估计和图像分类,适合机器学习和计算机视觉领域的开发者。 项目地址: https://gitcod…

作者头像 李华
网站建设 2026/6/4 7:46:14

boost、websocketpp、curl 编译(Windows)

一、boost 1、代码下载 https://archives.boost.io/release/1.86.0/source/boost_1_86_0.zip 2、解压 3、打开编译环境 x64 Native Tools Command Prompt for VS 2022 4、定位目录到boost_1_86_0 5、执行bootstrap.bat 6、执行b2 7、编译完成 头文件:boost 库&#…

作者头像 李华
网站建设 2026/6/4 2:54:07

Kotaemon意图识别组件:对话起点精准判断

Kotaemon意图识别组件:对话起点精准判断 在企业级智能对话系统日益复杂的今天,一个看似简单的问题却常常成为性能瓶颈——用户一句话进来,系统到底该做什么?是直接回答、触发知识检索、调用后台API,还是开启一个多轮任…

作者头像 李华