AI小西
热门搜索
1847工业学习平台选型选型与电脑连接3RT1(95A以下)产品退市声明产品信息

签到有奖

  • 移动端入口

  • 工业服务小程序
  • 支持中心移动端首页
  • 智能小西- 智能问答与在线预约
  • SIEMENS工业找答案小程序
  • 工业培训与认证
  • 西门子工业1847俱乐部
  • SIEMENS工业技术支持与服务
@CurrentUser.EmailCount@

消息提醒

登录 | 注册
@CurrentUser.NickName@
1847会员:未开通
VIP等级 @CurrentUser.vipLevel@
西币
@CurrentUser.coin@
  • 我的支持中心
  • 我的1847会员
  • 我的技术论坛
  • 我的找答案
  • 我的下载中心
  • 我的售后服务
  • 我的培训认证
  • 我发的帖子
  • 我跟的帖子
  • 我的论坛设置
  • 论坛用户指南
  • 我的下载中心
  • 我的培训认证
  • 我的提问
  • 我的回答
  • 已经帮助了@CurrentUser.allAnswercount@人我要回答
  • 已连续活跃@CurrentUser.allLoginDayCount@天我要提问
  • 首次回答问题获得双倍西币积分
  • 个人设置
  • 退出
  • 首页
  • 技术支持
    • 技术支持
    • AI小西
    • 风驰卡
    • 产品入门
    • 在线产品选型
  • 售后服务
    • 售后登记和质保查询
    • 备件商城
    • ASP工程师验证
    • ASP公司证书验证
    • 售后服务常见问题
  • 下载中心
    • 首页
    • 售前文档(样本、宣传册等)
    • 售后文档(FAQ、手册等)
  • 工业学习平台
    • 首页
    • 了解会员权益
    • 立即开通1847会员
  • 培训认证
    • 首页
    • 教室培训课
    • 取证训练营
    • 在线自学课
    • 认证证书查询
    • 培训伙伴验证
  • 技术论坛
    • 首页
    • 最新发帖
    • 精华帖
    • 发新帖
  • 找答案
    • 首页
    • 已解决问题
    • 精华常见问题
    • 发布新问题

运维工程师专区

官方商城

  • 西门子中国
  • 技术支持与服务首页
    我的支持中心
    下载中心首页
    全球技术资源
    1847工业学习平台
    产品入门新手必读
    找答案
    技术论坛
    售后服务
    网络资源新手必读
    高级搜索
  • 技术论坛
    论坛公告
    论坛使用指南
    最新发帖
    精华帖
    分享帖
    高赞帖
    热门帖
    高端推荐帖
    最高收藏帖
  • 谈天说地 / 谈天说地
  • 0822 【万泉河】好的PLC程序框架应该是不做初始化

技术论坛

 • 产品分类
自动化系统
  • SIMATIC S7-1500系列 
  • SIMATIC S7-1200系列 
  • SIMATIC S7-200
  • SIMATIC S7-200 SMART 
  • SIMATIC S7-300/400 
  • 通信与网络组件
  • Profinet技术开发专区
  • 工业边缘计算
  • SIMATIC WinCC / Panel 
  • SIMATIC WinCC OA (原PVSS)
  • DCS/SIMATIC PCS7
  • IPC/PG
  • LOGO!
  • 物联网(IOT)
  • 工业电源
驱动技术
  • SINAMICS 
  • SINAMICS S200 
  • 直流调速器
  • 电机
  • SIMOTION
  • MicroMaster
  • 驱动技术综合产品
  • MasterDrives 
  • DCMA 变频器健康管家 维护智库
数控系统
  • SINUMERIK 
  • SIMODRIVE
低压电气
  • 低压电气
  • 低压数字化
传感器与通讯
  • 过程仪表
  • 分析仪器
  • 工厂传感器
谈天说地
  • 谈天说地
 • 咱工程师的故事
咱工程师的故事
  • 网友专栏 
  • 工程师随笔
1847大咖专栏
  • 崔工谈博途与PLC
  • PROFINET工业通信详解
  • 冯工聊工业网络
  • 电磁兼容问题及处理
  • 大咖专栏合集
特别专题
  • 专家大讲堂课后探讨
  • 西门子工业1847俱乐部
  • 特别专题合集
 • 培训与认证答疑专区
培训与认证答疑专区
  • PLC编程精英训练营
  • MA 小型自动化系统
  • WinCC系统开发工程师精英训练营
  • V90精英训练营
  • WinCC精英训练营
  • S7-1200精英训练营
  • G120变频器精英训练营
  • S7-200SMART精英训练营
 • 服务合作伙伴专区
服务合作伙伴专区
  • FA合作伙伴共创社区
  • Networks and Communication
  • GMC蓝黄带考试-G120
  • GMC蓝黄带考试-V90
  • GMC 合作伙伴专区

0822 【万泉河】好的PLC程序框架应该是不做初始化

万泉河

西门子1847工业学习平台

  • 帖子

    10904
  • 精华

    132
  • 被关注

    1012

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

0822 【万泉河】好的PLC程序框架应该是不做初始化

646

2

2025-08-23 07:53:28

0822 【万泉河】好的PLC程序框架应该是不做初始化

看到题目,我相信一定又会有人跳起来:你懂不懂编程,你是不是没编过程序?程序当然要有初始化功能,比如断电重启动,比如系统需要复位,伺服需要回原点等等。

嗯,我知道你们很急,但你先别急。

我当然知道程序中有一些功能需要有初始化,然而我本文要表达的是你不要把它们做到框架里来。

我们经常见到一些总结归纳的PLC程序模版或者框架,绝大多数都会提到要有初始化的功能。


三、程序架构思路(庖丁解牛)

好的轮换程序得像洋葱一样分层清晰:

1.初始化(First Scan):上电或从STOP切到RUN时,干点“家务活”:

清零所有运行时间和启动次数。

设定一个合理的初始主泵和备泵(比如设Pump1主,Pump2主,Pump3备)。

 

复位所有故障状态(等待真实信号)。

 

停止所有泵输出命令。

2.模式选择 & 系统启停:这是老大,管总开关。

读`自动/手动`开关。

 

那么我们以伺服为例按照上面的做法初始化的情况。

比如我们在一台设备中初始设计时有5台伺服, 那么在PLC初上电启动时需要对这5台伺服电机做初始化寻原点处理。

然后在设备调试过程中, 发现原本某个动作也需要用伺服实现,即伺服电机需要加到6台。 那么除了正常的控制功能之外, 还需要在这套初始化程序逻辑中加入6#伺服电机的原点寻参。

然后,项目完成后,换一个项目,发现跟前一个项目有极大的相似性,所以决定在前项目为模版在其基础上修改完成新项目。然而只不过伺服电机配置又有变化,原本的2台不要了,又加入了一台新的。

如此,这套初始化程序又需要加加减减不断修改。

所以,所谓的初始化程序就压根不是固定的,无法模块化,总要随项目不断修改。 当然咯, 你的整个项目也都是需要到处打补丁修改。 除了集中初始化程序部分需要修改, 你对伺服电机的其它控制,定位,报警,调速,通讯等等功能也都是遍布在各处的,也都需要到处去修改。 也有可能,你为了程序的便捷,还在各处都分别做了循环。 所以,你认为即便设备数量有变化也没有大问题,只需要把循环的上限值改一下即可。 改大或者改小,只需要改一个数,只不过是改4-5处。

这对你自己来说可能并不觉得难,但如果这套程序需要交给你的同事,下级的刚入职的实习生来做, 那就难了。 他需要清清楚楚知道你这套系统的架构,知道这套设备的控制原理。 如果他想你应该封装成一个完整的模块,他希望用的时候只需要像普通电机一样, 给一个启动指令+位置参数,或者一个启动指令+速度给定,就能控制运行, 你则会毫不客气地批评他幼稚,不懂!

然后,你固然可以借培训教育他们的机会展示一下你丰富的技能以及丰富的现场经验,然而你也会发现, 培训他们的成本好像比较高, 没个一年半载,对他们都培训不成熟,都不能接手你的工作。

 

举一个例子, 比如你负责一个团队的运营,带领团队完成项目的攻关计划。 团队成员都听你指挥调度, 你安排他们每天日常工作,从出工到收工。然而你说不行, 他们还要吃饭呢,连早饭也要管,人不可能不吃早饭。 然后,你就需要从早餐开始, 安排好每个人的起床时间和集体用餐时间,如果其中有北方人和南方人,习惯的早餐不一样,你需要给他们分别准备,而也有可能有人根本不吃早餐,也还要统计有序。 这些相当于团队的初始化。每天早晨团队成员们需要初始化完成了才可以开始工作。  

然而也不仅仅早餐,有人会反问怎么没包含刷牙?刷牙也很重要啊,不可能不刷牙啊。 好吧, 那你就再把他们的刷牙洗脸也统一管理起来。

这是不是很荒唐?

 

有人会产生疑问, 各种PLC的说明书中分明都有OB100, OB101,OB102的启动OB, 用于系统中需要的启动初始化管理,而且这三种启动OB还各不相同, 分别为暖启动,冷启动,热启动等等,执行的细节还各不相同。如果不让用,难道需要舍弃这些精妙的功能?

 

好吧,那下面就以启动OB为例举例一下应该如何实现设备的分OB调用。

其实很简单,以往也一直有烟台方法的学员问我如果设备控制中需要用到硬件中断触发,比如OB40,或者循环中断OB35, 应该怎么做设备模块。我通常都是一句话点醒一下他们就知道如何做了。 所以就一直没有机会单独整理成文章。 这样就一并解答了。

 

答案只有一句话:在FB的管脚上增加一个OB_No的管脚。

然后在不同OB中重复调用这个FB(以及相同的IDB), 调用的时候,只需要把OBNO的数值填进去即可。

 

举例说明一个FB:SERVOM,其它的控制管脚不表述,只关注OBNO:

这个管脚的默认值为1,代表OB1, 那么100时则为OB100后面还示例了梯形图模式下不同的OBNO值选择执行不同的内容。

而如果用SCL编程,则更简单了, 一个CASE语句即可:

CASE #OBNO OF

    100:  //OB100中执行的程序内容

        ;

    101:  //OB101中执行的程序内容

        ;

    102:  //OB102中执行的程序内容

        ;

    30:  //OB30中执行的程序内容

        ;

    40:  //OB40中执行的程序内容

        ;

    1:  //OB1中执行的程序内容

        ;

 

    ELSE  // Statement section ELSE

        ;

END_CASE;

 

FB中的所有静态变量可以在不同的OB线程之间共享使用,也正是通过如此,实现了跨线程的数据信息传递,而避免了使用全局变量。(一直以来很多人对全局变量躲不开的情节是不是就在这里?如果有人被击中,请在评论区回复。)

 

然后同类型的设备会有多台,那么FB的实例化多次,实现FB实例化调用的FC,也可以同样拥有OBNO的管脚,实例化时送给FB。

 

然后在各个OB中重复调用这个框架FC。(这才是程序的框架)

OB100中:

"FC1"(OBNO:=100);

同理OB40中:

"FC1"(OBNO:=40);

 

如此便轻松实现了初始化的统一调用。

这是最简单的实现方法。 然而,如果CPU支持,如果你拥有较高的编程技能, 还可以在FB中直接通过系统函数判断得到当下调用的OB, 就可以在内部程序中实现,而省了这一个管脚。

这部分与PLC的型号和品牌相关,读者们可以自行了解研究实现,实现后可以为每个品牌生成专用的模版。

 

更进一步, 在PCS7 CFC中每一个FB的属性中都可以分配所需要调用的OB,这话有点绕, 其实逻辑本身也有点烧脑。 看起来是在描述FB调用了OB,而实际上最终是所指定的OB调用了相关的FB。

 

这是我建议PLC从业者学习PCS7可以学到的重要内容,而不去学习PCS7的话,则永远没有机会了解到这些细节。

当然, 博途后来的版本也支持了CFC,但是否还支持这一块我并没有了解过。也不需要了。

 

前一篇文章《0818 【万泉河】工控工程师需要对垃圾程序脱敏》,不知道有多少工程师同行实现脱敏了。如果已经脱敏的话,那么会比较容易接受本文的另一种表达方式:

 

《程序架构有初始化模块是垃圾程序的典型标志》

 

 

 

参考文章:

0619 【万泉河】论一个好的程序框架的重要性

0818 【万泉河】工控工程师需要对垃圾程序脱敏

0914 【万泉河】给非标行业自动化工程师的一个学习建议:了解一下PCS7

1109 【万泉河】我推荐要学的PCS7来了。

 

 

 

 

 


剩余80%未阅读, 请登录阅读

回帖加入探讨技术论坛守则

上传附件要求

1. 文件大小:上传文件的大小请限制在2M以内。

2. 文件格式:请不要上传.exe文件,系统支持的格式有:
.avi,.wmv,.mp3,.rar,.zip,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.wma,.asf,.txt,.7z

 
发分享帖
爱工控,乐分享,
分享您的经验与案例
发故事
发表您的精彩故事,
参与征文活动
技术探讨帖
阐述您的观点,
表达我的看法
西家杂谈
海侃天南地北,
闲聊工控世界
发求助帖
求道解惑,“刨根问底”
解决问题
发投票帖
邀投票,做调查,
网友帮您来作主
取消原因:
0822 【万泉河】好的PLC程序框架应该是不做初始化
编辑推荐: 关闭

请填写推广理由:

活动公告 查看全部公告>

2026共启We来,驰骋工控路,领跑新征程

1,835,856 条
海量精彩技术内容

100,000+ 网友与你交流

助你技有所长,论有所获

热门视频,猜你喜欢

本版热门话题

谈天说地

共有13372条技术帖

更多

评选标准

相关推荐

换一换

热门标签

换一换

相关帖子推荐

换一换
正在加载...
guzhang

恭喜,你发布的帖子

被评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片

下载中心

  • 首页
  • 查找文档
  • 常见问题大全
  • 精选主题
  • 全球技术资源

  • 首页
  • 知识库
  • 订阅文档

1847工业学习平台

  • 首页
  • 了解会员权益
  • 立即开通1847会员
  • 课程中心
  • 学习路线
  • 初级工程师认证
  • 高级工程师认证

培训与认证

  • 首页
  • 教室培训课
  • 取证训练营
  • 在线自学课
  • 认证证书查询
  • 培训伙伴验证

技术论坛

  • 首页
  • 发帖
  • 最新发帖
  • 精华帖
  • 高赞贴
  • 当前热门帖
  • 高端推荐帖
  • 用户荣誉榜

找答案

  • 首页
  • 提问
  • 精华问答
  • 高赞问答
  • 新解决问题
  • 待解决问题
  • 总积分排行榜

售后服务

  • 我要报修
  • 服务进度查询
  • 质保及权益查询
  • 备件商城
  • ASP工程师验证
  • ASP公司证书验证
  • 支持中心网站重要声明

西门子中国   © 西门子(中国)有限公司 1996 – 2026   企业信息    隐私政策   使用条款   京ICP备06054295号   京公网安备 11010502040638号
 
支持中心新发布“关注”功能了!实时查看彼此动态,更方便地进行技术交流。
不管是“关注”与“被关注”,相信都是一个美好的开始!
还有多重奖励派送,快快行动起来吧!

20秒帮我们优化支持中心!

欢迎您访问支持中心!

丰富的视频,全方位的文档,大量的网友交流精华……

为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!

感谢您的支持!

您收到0封站内信:
×
×
图片
立即
签到
已签到
已签到0天
累计可抽西币次数:0次抽奖机会
累计可抽大奖次数:0次抽奖机会
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。