C++程序运行在S7 1500MFP的实时系统中

0 概述

1518MFP(多功能平台)是1500系列高端CPU,采用双系统的设计结构,PLC的实时系统和Linux系统,这两个系统是并行进行的,注意是并行,不是并发,这两个是完全不同的概念。
本案例主要介绍的是将C++开发的代码转换成FB块,运行在PLC的实时系统中。

1 环境

  • TIA portal V16 +
  • ODK 1500S V2.5(集成eclipse,所有需要JRE(Java Runtime Env))
  • visual studio 2019 (或者其他IDE)
  • PLCSIM Advance V3.0+
  • Chrome浏览器

2 实现过程

2.1 新建一个portal项目

  • 创建一个新项目,项目名称定义为Test_C++_MFP(可自定义,下文中所有名称类的都可自定义,后面不再强调)
    在这里插入图片描述
  • 添加一个1518MFP CPU
    在这里插入图片描述
  • 对CPU进行属性配置

(1)启动web服务器
web服务器用于上传SO(共享对象)文件,关闭HTTPS,使用HTTP,新建用户,并赋予权限,设置密码
在这里插入图片描述
(2)设置IP地址
选择启用使用该端口IP访问web服务,IP地址要与PLCSIM advanced的虚拟网卡在一个网段内,否则无法仿真
在这里插入图片描述
(3)新建程序块
新建一个OB100(用于初始化),一个全局DB(用于存储数据)
在这里插入图片描述
(4)启动PLCSIM Advanced V3.0
在这里插入图片描述
(5)将Portal项目下载到PLCSIM Advanced V3.0
在这里插入图片描述
如果下载过程中出现报错,按照下图所示开启块编译时支持仿真功能
在这里插入图片描述
重新编译下载,应该能够成功下载,这时portal部分的准备工作就已经做好了。
在这里插入图片描述

2.2 新建一个ODK项目

当你安装好ODK1500S后,开始菜单会出出现一个Eclipse for ODK 1500S V2.5,打开这个编辑器
在这里插入图片描述

  • 创建项目

在这里插入图片描述
在这里插入图片描述

2.3 在ODK中编写C++代码

  • 模板文件目录树
    我们自己的代码要写在src文件夹内,如果使用多文件编程,那么最终的启动文件就是Test_CPP_MFP.cpp,如果时单文件编程,那么程序要写在Test_CPP_MFP.cpp中。
    def下面的Test_CPP_MFP.odk中做接口定义。
    开发过程中,只需要关注这两个文件夹,其他位置都不在开发过程的考虑范围内。
    在这里插入图片描述
  • 单文件编程
    (1) 在Test_CPP_MFP.cpp文件下
using namespace std; // 命名空间

void sum(int a, int b, int res); // 函数声明

void sum(int a, int b, int res){  // 函数定义
	res = a + b;
}

// 下面时重点 套用模板
ODK_RESULT TestSum (const ODK_INT32& num1, const ODK_INT32& num2, ODK_INT32& result, ODK_DOUBLE& myReal)
{
	sum(num1,num2,result); // 调用函数,传入实参
    return ODK_SUCCESS;
}

(2) 在Test_CPP_MFP.odk文件下

// 定义函数名和接口
ODK_RESULT TestSum([IN]    ODK_INT32    num1
				 , [IN]    ODK_INT32    num2	
                 , [OUT]   ODK_INT32    result		
                 , [INOUT] ODK_DOUBLE   myReal);		

对比.odk和.cpp文件你会发现他们直接的规律和套路

  • 多文件编程

按照C/C++常规方法创建.h头文件即可

2.4 打包

在这里插入图片描述
build成功后会出现下面的文件目录树
Test_CPP_MFP.scl 是portal导入外部源文件使用的;
Test_CPP_MFP.so 需要使用1518MFP的web client上传。
在这里插入图片描述

3 测试

  • 导入外部源文件
    在这里插入图片描述
  • 选择scl文件后右键,选择从源生成块
    在这里插入图片描述
    生成成功后出现下图所有的程序块目录,XX_load功能块代表加载;XX_unload功能块代表卸载;
    XX_TestSum功能块代表C++的程序,XX表示的是创建ODK项目时候的项目名称,本例中是Test_CPP_MFP
    在这里插入图片描述
  • 上传SO文件

在这里插入图片描述

  • 调用程序

(1) OB100 里面调用load程序load的作用是加载web server中的so文件

在这里插入图片描述

(2) OB1 里面调用unload程序+C++编程的代码块unload的作用是卸载web server中的so文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

stautus为0表示调用成功

4 特别声明

  • 当你需要修改程序的时候,必须按照下面的步骤进行

在这里插入图片描述

先clean all 再build all 生成的so文件和scl文件就是更新后的程序

  • 当你更换SO文件后,需要按照下面的步骤进行

(1) 先将unload的req位置为1,随后再置为0;
(2) 重新启动CPU

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kobe_OKOK_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值