设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
西门子S71200的OOP编程之继承ST举例
返回列表
发新帖
[西门子]
西门子S71200的OOP编程之继承ST举例
[复制链接]
189
|
0
|
2024-4-28 14:31:04
|
显示全部楼层
|
阅读模式
S7-1200 PLC直接实现传统的面向对象编程(OOP)中的继承特性是不可能的,因为S7-1200的编程环境并不原生支持OOP的所有元素。但是可以通过一些编程约定和结构模拟出类似继承的效果。
通常,在PLC编程中,我们更多地依赖于函数(FC)和函数块(FB)的复用,以及通过数据块(DB)来管理和组织数据,来模拟出类似继承的层级关系。
下面是一个简化的例子,展示了如何在S7-1200的ST编程中模拟出类似继承的效果:
假设有两个设备:基础设备和高级设备。
基础设备(BaseDevice)
首先,我们定义一个表示基础设备的函数块(FB)。
// 基础设备函数块 FB_BaseDevice
FUNCTION_BLOCK FB_BaseDevice
VAR_INPUT
// 输入参数
END_VAR
VAR_OUTPUT
// 输出参数
END_VAR
VAR
// 基础设备的私有数据
END_VAR
BEGIN
// 基础设备的逻辑
END_FUNCTION_BLOCK
高级设备(AdvancedDevice)
高级设备继承自基础设备,并添加了额外的功能。
在S7-1200中,我们不能直接创建一个新的FB去继承FB_BaseDevice,但我们可以创建一个新的FB,并在其中调用FB_BaseDevice。
// 高级设备函数块 FB_AdvancedDevice
FUNCTION_BLOCK FB_AdvancedDevice
VAR_INPUT
// 输入参数
END_VAR
VAR_OUTPUT
// 输出参数
END_VAR
VAR
// 高级设备的私有数据
BaseDevice : FB_BaseDevice; // 引用基础设备函数块
END_VAR
BEGIN
// 调用基础设备的逻辑
BaseDevice();
// 高级设备的额外逻辑
END_FUNCTION_BLOCK
在上面的代码中,FB_AdvancedDevice内部有一个FB_BaseDevice的实例,并在FB_AdvancedDevice的逻辑中调用了它。这样,FB_AdvancedDevice就包含了FB_BaseDevice的所有功能,并添加了它自己的额外功能。这模拟了继承中子类包含父类所有属性和方法的概念。
在主程序中使用
在主程序中,你可以像使用其他FB一样使用FB_AdvancedDevice。
// 主程序 OB1
ORGANIZATION_BLOCK OB1
VAR
// 局部变量
AdvancedDev : FB_AdvancedDevice; // 创建高级设备实例
END_VAR
BEGIN
// 调用高级设备
AdvancedDev();
// 其他逻辑
END_ORGANIZATION_BLOCK
在这个例子中,FB_AdvancedDevice 包含了 FB_BaseDevice 的所有功能,并添加了它自己的额外功能。这虽然不是传统意义上的继承,但它允许你在S7-1200的ST编程环境中以一种结构化的方式复用代码和逻辑。
这种模拟继承的方式并不能提供真正的多态性或其他OOP特性。在PLC编程中,更常见的做法是使用模块化和结构化编程技术来组织代码,以确保代码的可读性、可维护性和可重用性。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
建云
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』