AI小西
热门搜索
1847工业学习平台定位器资料汇总启停和调速3SB3退市声明过程调节器选型选型

签到有奖

  • 移动端入口

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

消息提醒

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

运维工程师专区

官方商城

  • 西门子中国
  • 技术支持与服务首页
    我的支持中心
    下载中心首页
    全球技术资源
    1847工业学习平台
    产品入门新手必读
    找答案
    技术论坛
    售后服务
    网络资源新手必读
    高级搜索
  • 技术论坛
    论坛公告
    论坛使用指南
    最新发帖
    精华帖
    分享帖
    高赞帖
    热门帖
    高端推荐帖
    最高收藏帖
  • 自动化系统 / SIMATIC S7-1200系列
  • 【SCL编程案例】SCL的医美:OOP、数据结构及数据库

技术论坛

 • 产品分类
自动化系统
  • 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 合作伙伴专区

【SCL编程案例】SCL的医美:OOP、数据结构及数据库

moyb

西门子1847工业学习平台

  • 帖子

    51
  • 精华

    1
  • 被关注

    2

论坛等级:游侠

注册时间:2018-01-31

普通 普通 如何晋级?

【SCL编程案例】SCL的医美:OOP、数据结构及数据库

2787

13

2025-06-08 10:56:33

    最近遇到一个有意思的编程业务,项目不大,但却有些东西值得说道说道。项目客户开发了一个实验室使用的设备,限于一些客观条件,客户选择了28个步进电机的协作方案,用一台1211的PLC和一块RS485通信板控制它们的动作和顺序(当我接手时硬件部分已经完成了,所以只能在此基础上继续完成控制部分了)。这28个步进电机都是采用Modbus RTU的总线控制,而这28个电机中又分为3个不同厂家的产品,各自有各自的通讯数据表,此外还有若干个温度传感器和压力传感器,也都是通过Modbus RTU和PLC通讯来传递数据。

    由于执行一个Modbus RTU的通讯任务,需要经过几个扫描周期,而且不能有两条及以上Modbus的通讯任务同时执行(除非安装多个通讯模块,但是出于硬件成本和设备体积的考虑,客户并不太愿意增加),一个现实的问题就摆在眼前了。一个电机完成一个动作,需要PLC发送一条执行动作的报文给电机,然后发送若干个监测的报文来判断动作是否完成(或发生故障)。如果等一个电机完成动作之后再操作另一个电机,则设备的效率就太差了,因为有很多可以多个电机并行的动作。其次,为每种电机及其每个动作都编写一条Modbus通讯语句,程序的复杂度太高,增加调试和维护的难度。

    由此而知,挑战就在于如何在只有一个通讯模块的条件下,实现多个Modbus RTU 电机的并行操作,并且整个程序需要尽可能的简洁且易读易维护。在此分享一下我如何满足客户既要有要的。

    首先,由于存在28个电机,而这28个电机的动作基本是一致的(虽然具体实现有所差别),不外乎回原点、绝对定位、相对定位、速度运行、停止运动等这几个动作。自然而然的就想到了面向对象(OOP)的编程方法。为这些电机建立一个类,即一个功能块(FB),FB里面那些变量就是这个类的属性(如图1所示)。其中有一个特别的属性:Command。该属性用于触发这个类的方法,也就是电机需要执行的动作。然后就是编写这些动作的具体程序,用Case Command of…End_Case实现对方法的调用(图2)。最后,再建立这个FB的数组,用For语句循环调用。这样就等于是把28台电机当作一台电机来控制了,程序简明而有效。


    其次,只有一条Modbus的调用实现多个电机的并行工作,就需要将每个电机的执行报文和监测报文独立开来。先将所有可以并行的执行报文依次发送到相应的电机,然后轮询地发送监测报文,直到电机的动作完成。那么一个循环队列就是一个非常合适的数据结构。

    队列采用数组存放,队列里的每个元素就是一条Modbus的报文信息,包括从站站号、读写模式、数据地址、数据长度等等信息。用首尾两个指针(即数组的索引)来控制队列的进出。当有新的报文需要发送时,就把该报文的数据放入尾指针所指向的元素内,尾指针自增一,若超过数组上限则回到0,这样所有需要发送的报文就在队列中排队等待被执行。而Modbus执行语句则从队列首指针处调出需要发送的报文,每一条报文被调出后,首指针自增一,若超过数组上限则回到0开始,和尾指针一样。当首指针和尾指针相同时,则说明队列里面已没有任何待执行的通讯命令了。

    电机类的FB在执行动作时,核心和最终输出就是把相应的Modbus执行参数发送到队列中排队等待执行。而每一条执行报文后又自动触发监测报文的发送。这样做又一个明显的好处,就是电机的动作和Modbus 的通讯完全分离开来,这个循环队列成为两者之间的纽带。在修改电机这部分的程序时,无需考虑和担心Modbus的调用部分,反之亦然。程序的控制逻辑简单明了,清晰易懂。在调试时,监视这个队列的内容就能分析程序的执行情况。

    最后,对于不同设备、不同品牌电机,能否采用一种统一的方式来实现Modbus通讯呢?答案是肯定的,就是用数据库。建立一个DB块,存放如图3所示的两个数组就形成了一个简单的关系型数据库,两个数组就是两张表,之间依靠MessageID建立起一对多的关系。在此基础上,所有不同设备和品牌的产品在执行不同动作时的程序结构就可以统一起来,也就是选择数据库中的一条记录。调试程序的时候,只需要看数据库里的数据是否正确,选择的记录是否正确就可以了。哪怕客户将来更换设备或替代产品,也只需要改这个DB块内存放的数据,不会影响到FB中的内容。

  总结来说,SCL的长处在于灵活、高效,容易实现较为复杂的控制逻辑。一个好的SCL程序不但要实现客户的需求,更需要一个好的颜值:简洁、易读、易维护、可复用,这才能突出SCL的优越性。而掌握OOP、数据结构和数据库等编程技巧,则是增加SCL程序颜值的有效手段。

(这个项目使用PLC为6ES7-1211-1AE40-0XB0 V4.6,通信板 6ES7 241-1CH30-1XB0 V1.0,博途版本为V18。)


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

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

上传附件要求

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

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

 
发分享帖
爱工控,乐分享,
分享您的经验与案例
发故事
发表您的精彩故事,
参与征文活动
技术探讨帖
阐述您的观点,
表达我的看法
西家杂谈
海侃天南地北,
闲聊工控世界
发求助帖
求道解惑,“刨根问底”
解决问题
发投票帖
邀投票,做调查,
网友帮您来作主
取消原因:
【SCL编程案例】SCL的医美:OOP、数据结构及数据库
编辑推荐: 关闭

请填写推广理由:

活动公告 查看全部公告>

「技术论坛」、「找答案」关于 AI 辅助创作内容的使用规范

1,833,730 条
海量精彩技术内容

100,000+ 网友与你交流

助你技有所长,论有所获

热门视频,猜你喜欢

本版热门话题

SIMATIC S7-1200系列

共有15147条技术帖

更多

评选标准

相关推荐

换一换

热门标签

换一换

相关帖子推荐

换一换
正在加载...
guzhang

恭喜,你发布的帖子

被评为精华帖!

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

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

  • 分享

  • 只看
    楼主

top
X 图片

下载中心

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

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

1847工业学习平台

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

培训与认证

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

技术论坛

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

找答案

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

售后服务

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

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

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

欢迎您访问支持中心!

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

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

感谢您的支持!

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