自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 【1500实用FC系列】之三,判断BUFFER中数据是否更改

在这个小项目中每个电机用2个“Modbus_Master”指令与伺服电机对话,一个用于读伺服数据,另一个用于写数据。通过“Buf_<>PDO”块将读取的数据放到“#INTF_PDO_RW.Read”数据区中,供高层代码使用,同时这个块还负责将高层代码需要写入的数据(#INTF_PDO_RW.Write)放入到“buffer_MB_This”中。对5个电机在程序中添加了数据更改的判断后,整体的轮询时间缩短近一半,平均轮询时间在300-400毫秒左右。今天说的这个FC用于判断buffer中的数据是否更改了。

2026-03-26 15:31:24 381

原创 整型数据的转换与比较并不简单

我的上一篇技术帖探讨了《沿触发的4个问题》。本篇探讨整型数据的类型转换与比较。这2篇技术帖有个共同的特点:所探讨的问题都是基础知识,但是基础知识也并不简单,需要一些细心和耐心才能hold住,否则容易出现bug。下面开启正文。由下图的反直觉结果引发本篇的讨论。(本帖所用博途版本是V19)图1变量tempUint是Uint类型(本篇中变量名都带有变量类型,下同),给个值65535。变量tempInt给个1。显然65535应该大于1。

2026-03-26 15:28:38 346

原创 沿触发的4个问题

我说,其他类型的PLC在做沿触发时如果没有类似Tag_2这样的变量,那么这个型号的CPU的沿触发数量一定是有限制的。我接着说,因为这类型的CPU在做沿触发时在CPU内部资源中有一个专门给沿触发预留的存储空间,用于沿触发的中间bool变量。下一个扫描周期IO状态与这个扫描周期的IO状态不同,我们的PLC程序就是在应对这些状态的变化,因此演绎出千变万化的应用程序。4,如何触发这个FB不是本题目,题目是:如何在这个不能每个扫描周期都执行的FB中实现沿触发的功能。3,通常讲沿触发的代码需要每个扫描周期都执行。

2026-02-19 17:29:39 850

原创 SIEMENS PLC中的AR2地址寄存器

在西门子系列的PLC中绝大多数都可以对AR2地址寄存器进行操作。绝大多数指S5系列PLC,S7-300/400/1500的PLC。当我们在用西门子PLC的STL语言编程中,很可能避不开AR2地址寄存器。当然现在有了SCL语言后,用STL语言进行编程的场景越来越少了。但是当我们看到已有的STL程序时也要做到心中有数。在STL语言中有一个难点:AR2地址寄存器。今天就和大伙说说这个AR2地址寄存器。

2026-01-11 17:53:00 704

原创 PLC通讯编程系列之五,通讯编程的容错

我的经验是:能RESET的都RESET,包括:模块的配置,发送配置,接收配置,接收缓冲区,轮询号码。你的程序就解决了偶然性出错,程序就可以永恒的运行下去了。所以在我们的程序中要有能调节发送频率的机制,并且设置一个合理的发送频率。全了的意思是未来给通讯编程时需要注意的问题不会超过这个系列帖子所探讨的范畴。有缘浏览到帖子的伙计们以后遇到通讯的问题,都可以回来翻阅本系列帖,对照一下,看看可能是哪里的问题。还有很多信号都是这样的规律。说明程序的状态已经在你编程的预料之外了,你的程序肯定无法应对当前这个局面了。

2026-01-06 09:00:07 254

原创 PLC通讯编程系列之四,通讯编程的层次及联锁

这2类AA有共同的特点,就是定义了本AA的轮询号码(PollingNo_This),下一个AA的轮询号码(PollingNo_Next)。我们知道,任何通讯协议都是有层次的,最知名的是ISO的7层协议。以我的经验,只要是稍微复杂的通讯,就需要给程序分层,这样有利于各个层级之间划分责任,有利于bug查找,有利于简化编程。第三篇讨论的是轮询,也就是如何让多个AA不冲突的完成工作,显然轮询的层次高于AA。如果是轮询,那么要考虑通过轮询号码的方式使得在某一个特定时刻,只能有一个AA处于OPEN的状态。

2026-01-05 12:48:11 873

原创 PLC通讯编程系列之三,轮询

当系统的轮询号码(在块的引脚PollingNo_Current)等于本块定义的轮询号码时,本块拥有对通讯端口的使用权,那么本块可以发送和接收通讯数据用以控制相应地址的变频泵。当对泵完成读取和写数据后,那么本块会将下一个轮询的块(PollingNo_Next)赋值给 PollingNo_Current,以此交出对端口的控制权,而拥有下一个轮询号码的块得到端口的控制权,可以向通讯端口收发数据。轮询机制是在AA的上一层(关于通讯编程的分层,我们下一篇简单讨论),是建立在AA基础上的。

2026-01-04 09:03:22 404

原创 PLC通讯编程系列之二,通讯中的AA

本文探讨了通讯中最基础的AA(Ask&Answer)模式,指出95%的通讯都采用这种主从问答形式。通过PROFIBUS、MODBUS等工业协议实例,说明复杂通讯可分解为多个AA对话。文章特别分析了PLC与复杂设备(如仪表、机械手)的通讯场景,强调即使单一设备内部也包含多个AA功能模块。作者提出将复杂通讯拆解为AA组合的方法能有效简化问题,并预告后续将讨论轮询机制。最后以USS通讯为例,邀请读者共同探讨AA功能块的设计要点。本文适用于理解各类通讯协议的基础架构。

2025-12-17 09:26:23 420

原创 PLC通讯编程系列之一,为什么复位发送请求信号要在发送块的前面?

复杂的通讯程序有一些固定套路。于是为了调试通讯程序,干脆做了日志,记录每个收发,记录每个需要发送的位置的事件。这2类编程有个特点,就是信号变化的特别快,靠肉眼观察信号的变化调试程序是不可能的。《通讯中的AA》、《通讯中的轮询》、《通讯编程的层次》、《通讯编程要注意容错》。这里要强调的是,如果不遵循这一原则,我们的通讯程序不一定会出错。我之后编写的不管是简单的通讯程序还是复杂的通讯程序都遵循这一原则。这里的通讯可以是以太网通讯,也可以是自由编程的通讯。一个好的稳定的通讯代码需要在编程过程中多方面的注意。

2025-12-17 09:23:18 390

原创 IEC定时器在300/400与1200/1500中的表现不同

今天分享一个我们在PLC编程中一定会遇到的点,定时器。在S5/S7-300/400/1500中,PLC内部包括了硬件定时器,也就是S5定时器。这些定时器的数量有限。CPU的性能越高,S5定时器的数量越多。为什么称为S5定时器呢?因为这些定时器都是继承自S5 PLC。虽然时间过去了40年,但是当前1500的S5定时器的特性与40年前S5 PLC定时器的特性完全相同。本篇不讨论S5定时器。本篇主要讨论IEC 定时器。众所周知,IEC定时器是一个软定时器,定时器的数量是可以自己定义的。

2025-12-05 09:04:45 628

原创 SIEMENS PTP模块的2吃

摘要:一个西门子自由通讯模块可以实时频繁的在485和232之间转换

2025-11-10 10:14:38 570

原创 【1500实用FC系列】之二,SizeOf 计算数据大小

很多控制器都有SizeOf这个功能。作用就是统计数据占用的字节数量。但是1X00控制器的标准库和指令中没有这个功能。可是我的一些项目中,尤其与通讯有关的项目需要这个功能,为此我开发了这个FC。

2025-09-30 10:44:37 353

原创 【1500实用FC系列】之一,数字转换为字符串

今天有时间,开辟一个新系列--“实用FC”。这个系列给出一些比较通用的功能。这些通用的功能可能在很多项目中都就用到。比如今天给的是“数字转换为字符”。数字可以是任意值类型。比如int,real等。FC的功能是把值转换为字符串。我的很多项目都会用到这个FC,应该是bug-free的。如果希望探讨其他领域的有关主题,也可以给我留言。本FC中用到了VARIANT类型。这个类型是非常好用的类型,可以大大简化复杂项目中PLC软件的结构。下图是使用该块的例子。

2025-09-28 09:00:10 745

原创 PLC实现轻IT任务

SECS通讯软件就是典型的轻IT任务。SECS通讯由美国国家半导体产业协会(SEMI)制定。几十年来SEMI发布了众多通讯协议文件,这些协议文件组成了体系完整的协议族,称为SECS协议。SECS协议跨越了从RS232时代到工业以太网时代。SECS通讯软件运行在生产设备端,是生产设备与工厂IT系统的一种通讯接口。这个通讯接口可以完成生产设备与工厂IT系统之间的数据传输。通过这些数据传递实现生产数据上传、数据跟踪、设备远程控制、设备参数设定、设备模式管理、设备物料管理、配置报告、事件收集、终端服务等功能。

2025-09-17 08:44:38 655

原创 PLC的面向对象编程(OOP)探秘10-合逻辑与合法

本来探秘7应该开启接口的探讨。但是回顾探秘系列之前的7篇文档。我觉得应该把语法中非法与和合法讲清楚,也要讲清楚一个我认为在编写代码中很重要的概念,我称之为”逻辑可行,但不合法“。本文档更偏向编程理论探讨。当然很多读者也可以忽视本篇内容。

2025-08-03 18:00:44 1077

原创 PLC的面向对象编程(OOP)探秘9-接口的应用与原理揭秘

上一篇我们讨论了接口的基本知识,这一篇我们探讨接口的应用。将从代码的实际开发流程入手。

2025-08-03 17:59:54 764

原创 PLC的面向对象编程(OOP)探秘8-接口基本知识

今天这个题目是PLC中用OOP方法编程的重要内容-接口。这里讲的接口不是普通意义的数据接口,而是OOP方法中专业接口。接口稍微难以理解。为了让读者朋友们更容易理解接口。本文内容的先后顺序是精心安排的。

2025-08-03 15:33:27 1072 3

原创 PLC的面向对象编程(OOP)探秘7-类的层次

本来这一节想讨论接口。不过,回想一下,发现我们这个系列已经有7节的篇幅探讨OOP理论了。感觉有些内容没有讲透。这个篇幅我们探讨一下偏向实际的问题,这个问题我们在写代码过程中100%会遇到,只是很多人没有注意到这个问题,也没有总结。我在这里替大家总结。这个问题就是类的层次。本篇就探讨类的继承、嵌套和类的层次,以及类的层次如何用。

2025-08-02 10:26:45 965

原创 PLC的面向对象编程(OOP)探秘6-继承 & 重写

在软件开发第一阶段,子类继承了父类的某个方法。访问子类的变量可以写“this^.变量名”,当然在子类中“this^.”可以省略。在子类中重写父类的方法时必须保证数据接口与返回值与父类一致。如果不遵守这个原则,那么就没有必要重写了,只需要在子类中扩展一个新的方法就可以了。接口并不难,如果有学习过C语言的,比较好理解接口,因为接口就是函数指针。扩展的概念中还要注意:子类不可以定义与父类名字相同的变量。不仅变量可以重写,代码(如方法)也可以重写,也可以用super和this来区分父类中的代码和子类中的代码。

2025-07-29 13:55:46 440

原创 PLC的面向对象编程(OOP)探秘5-继承 & 扩展

这是OOP编程第5次探讨。前面几次探讨了类的变量、代码和对象。这次讨论继承和扩展。探讨这些内容是有先后顺序考虑的。我们的目标是接口。因为接口在OOP中用的最多,也最难理解。先探讨容易的,再探讨难一些,再就是横向纵向混合的,最后是迈向接口。跟随我的脚步,我们一起循序渐进走近接口,理解接口。接口之前的一切都是为接口做准备。

2025-07-29 08:39:22 972

原创 PLC的面向对象编程(OOP)探秘4-类的代码

在探秘1中,探讨了属性,知道属性是类的代码。这里跟大家探讨类的其他代码。我们还是以一个简单例子开头。(本文档中所有例子的环境是CODESYS V3.5 SP20), 图 1。

2025-07-27 17:15:50 1001

原创 PLC的面向对象编程(OOP)探秘3-成员变量

在OOP或者非OOP编程中,临时变量的表现也是一样的。但是今天所讲的成员变量的本质是变量。先看下图的例子,该例子中使用图1的FB1,并在PLC_PRG中声明一个对象fb1,做测试得到下面截图。输入类型(还有一种输入输出类型变量,它与输入变量有着完全相同的属性,下文不在单列讨论。在探秘1中我们留了一个尾巴没有展开讲解,这个尾巴就是成员变量的Private访问权限,本文档将对这个问题进行封闭。2,声明的区域不同,在对象外部,变量的访问性有何不同。推论1:类外的代码即使不用get属性,也可以读取对象中的变量。

2025-07-24 08:42:55 1077

原创 CODESYS中一个TCP Server可以同时与多个client连接吗?

CODESYS TCP SERVER

2025-03-25 08:48:23 918

原创 PLC的面向对象编程(OOP)探秘2-FB和对象

PLC的OOP中,对象和FB

2025-03-24 16:20:18 571

原创 PLC的面向对象编程(OOP)探秘1-类的属性解密

PLC 面向对象编程OOP

2025-03-10 17:01:11 2110 7

原创 PLC的面向对象编程(OOP)探秘-系列总论

PLC面向对象OOP编程

2025-03-10 13:38:41 471

原创 浅谈在1500PLC环境下用面向对象的思路实现SECS/GEM系统软件

用面向对象的编程思路在PLC环境下实现SECS/GEM系统软件

2025-02-18 09:48:02 2414 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除