[西门子] Node-Red与S7-200SMART通信

[复制链接]
查看33525 | 回复0 | 2024-7-18 21:33:24 | 显示全部楼层 |阅读模式




加入知识星球智能制造与自动化,加入会员可下载此公众号发布文章中的相关资料与一些不方便公开分享的资料(行业报告、规划、技术方案、自动化教程、行业标准化资料、C#开发等)。


知识星球会员下载区纷传会员下载区

与S7200SMART通信

选择节点管理,下载Node-Red三方库 node-red-contrib-s7



下载后进行通信节点的配置


我是插图
"该节点用于配置PLC的通信参数和变量访问设置。双击节点可进入设置页面,首次使用需配置通信节点,点击 '添加新的通信节点'。"


我是插图
在通信节点的设置框中,S7200 PLC的配置与S7-1200略有不同。请按照图示进行相应的配置以完成通信设置。


我是插图
通信参数配置完成后,就可以进行变量的配置,S7200SMART的变量配置主要需要注意的是V区的配置,如下图


我是插图
V区需要设置成固定的数据块,即DB1,之后可以设定不同的V区地址访问V区变量,例如上图中访问V40.0,则Node-Red中的地址配置为DB1,X40.0

目前还无法对定时器和计数器变量进行直接访问
读写变量

接下来需要使用 S7 in 和 S7 out 的Node进行变量的读写

读变量需要用到 S7 in ,如下图


我是插图
双击打开 S7 in 的配置画面


我是插图
PLC处需要选择之前建立的通信节点,Mode选项共有三种方式,主要分为读取单独的变量,读取全部变量

这里我使用获取全部变量,这样所有的变量会被打包成一个对象送出,对象的Key就是变量名,Value就是变量的当前值。可以通过调用 Debug 来进行查看


我是插图
可以看到所有的变量是被打包成了一个对象通过payload送出

写变量需要用到 S7 out 实现,写变量是将要写的值通过 msg.payload 写到对应的变量中,双击可以打开S7 out 设置对话框


我是插图
能设置的选项很简单,就是需要写入值的变量,这里选择V40.0作为写对的对象 可以通过一个 inject 来实现变量的写入


我是插图
可以配置 inject 节点的参数为布尔值,之后点击节点左侧的方形图表,可以看到V40.0的状态发生了改变


我是插图图形界面的处理

还需要安装 uiBuilder 的三方包,安装方法见链接

node-red-contrib-uibuilder[8]

安装好后,在Node-Red中可以通过 inject , uiBuilder , debug 实现一个最简单的flow,然后通过localhost:1880/uiBuilder就可以访问预先内置的页面


我是插图
双击可以打开uiBuilder的设置界面


我是插图
点击Edit Source Files就可以编辑Index文件和Js文件,uiBuilder内置了Vue和BootStrap的库文件,可以直接使用Vue进行数据的绑定,可以借用uiBuilder写好的页面框架内容,进行必要的修改就可以实现我们想要的功能,这里要注意如果需要使用到其他的css或者js库文件,可以放置到用户名\.node-red\uibuilder\common目录下,之后在index.html文件中进行调用。这里我修改了Index文件的页面样式,如下图


我是插图
之后通过Vue绑定从PLC读取的数据到页面上,uiBuilder在它预制的页面中已经设定好了一些数据包,包括写入到Node-Red的数据和从Node-Red读取的数据,这里没有必要完全重写,可以使用已有的数据编写必要的computed和Methods函数即可实现大部分的功能,这里我通过编写了一个computed函数将PLC中VD108变量的值显示在页面上,computed函数如下
getValue: function(){if(this.msgRecvd.payload !== undefined){var getValue = this.msgRecvd.payloadreturn(getValue.VD108.toFixed(2))}}
这里 msgRecvd 是uiBuilder预制的页面中已经建立好的data,即接收来自Node-Red的数据包,通过访问VD108就获得了变量的值
实现的功能

这次通信的对象换成了1200的CPU,想要实现的功能如下

1.显示Sin波形数据2.显示数据及曲线3.控制数据的初始化


我是插图S7-1200生成正弦波

这个可以使用Simense公司针对1200和1500系列PLC专门提供的函数库 LGF  链接可以参考这里 Library of general functions (LGF)[2] 这个函数库提供了许多好用的功能,其中包括生成各种波形数据,可以直接调用即可实现。sin曲线的Block如下


我是插图
reset 上通过一个布尔量控制数据的初始化,即上图中的功能3
控制功能实现

Node-Red的使用就不在赘述了,可以参考上一篇文章,框图如下


我是插图
1.对S7-1200PLC进行通信参数的配置,以及变量的设定2.读变量3.通过uiBuilder进行render4.uiBuilder发出的msg通过function转换成布尔量的数组5.写变量M104.06.写变量M104.1

写变量是通过 S7 Out 节点实现,此节点的输入可以是单独写入也可以通过数组批量写入,msg.payload中是需要写入的值,这里通过 function 节点处理从uiBuilder中输出的msg
let topic = msg.topicif(topic === "m104_0"){    status = msg.payload.M104_0    msg.payload = statusreturn[msg, null]}elseif(topic === "m104_1"){    status = msg.payload.M104_1    msg.payload = statusreturn[null, msg]}
当topic为不同的变量名时,即写入对应变量名的状态,其中msg.topic和msg.payload是uiBuilder中通过vue中的methods方法传出
<!---按钮1---><ahref="#"class="btn btn-warning btn-circle" @click="resetCurve1"><iclass="fas fa-pause-circle"></i></a><!---按钮2---><ahref="#"class="btn btn-success btn-circle" @click="resetCurve2"><iclass="fas fa-pause-circle"></i></a>
Html代码中两个按钮上分别通过click事件关联vue中不同的methods,一个是 resetCurve1 ,另一个是 resetCurve2 两者除了需要控制的PLC内变量的名不同,其余完全相同
resetCurve1() {let m104_0 = this.msgRecvd.payload.M104_0;if(m104_0 === true) {    uibuilder.send({      topic: 'm104_0',      payload: {        M104_0: false,},});} else{    uibuilder.send({      topic: 'm104_0',      payload: {        M104_0: true,},});}},
基本逻辑就是先获取M104.0的当前值,之后取其反,通过uibuilder的 send 方法打包成对象送出 这样就实现了页面操作按钮控制PLC变量状态改变
图表的实现

图表是使用highcharts的vue库,可以直接在uiBuilder中调用
Vue.use(HighchartsVue.default);
Html代码中是通过vue组件的形式使用highcharts
<highcharts :options="chartOptions"></highcharts>
其中option通过一个computed函数进行赋值,主要是曲线的一些参数
chartOptions() {return{    chart: { type: this.modo },    title: { text: this.title },    series: this.series,};},
vue中的数据包括曲线的title,曲线类型和数据Serial,当然也可以增加更多的highcharts属性,可以参考链接 highcharts-vue[3] 曲线数据的实时更新是在vue的mounted函数中进行的
uibuilder.onChange('msg', function(newVal) {  vueApp.msgRecvd = newVal;if(typeof vueApp.msgRecvd.payload.MD100 === 'number') {// Add new element    vueApp.series[0].data.push(vueApp.msgRecvd.payload.MD100);    vueApp.series[0].data.shift();    vueApp.series[1].data.push(vueApp.msgRecvd.payload.MD108);    vueApp.series[1].data.shift();}});
通过push方法向数组中添加新数据,shift方法移除旧数据,可以通过限定数组的长度来实现曲线的显示宽度


汽车行业Sicar控制标准资料有偿获取SIEMENS/西门子杯,六部十层电梯程序分享
多台排水泵按累计运行时间切换和先启先停切换多模式控制PLC程序分享
倍福PLC视频教程及资料免费分享(36G)
三菱PLC编写的贪吃蛇与俄罗斯方块程序分享
库卡EthernetKRL备选软件包分享(版本V3.1.3)
精美博途Wincc界面程序模板分享
TIA_Portal_v18虚拟机分享
西门子SCL编程实例—扫雷游戏分享
西门子TIA博途软件入门到精通教程免费分享
西门子S7-1500博途PLC(基础+高级)视频教程分享西门子TIA博途-SCL高级编程多套视频资料免费分享-限时删除西门子TIA博途高级语言SCL视频资料分享
三菱FX3U系列plc精讲视频分享(40讲+240讲) 49GB
西门子smart200视频教程分享两套西门子WinCC视频教程分享(9.5G)PLC、触摸屏工控小游戏样例合集分享EPLAN电气设计制图视频教程分享-限时删除都有哪些好用电工仿真软件?学习电路图变得如此简67本自动化书籍免费领取啦!!!最新西门子授权工具EKB2022版分享立体仓库穿梭车程序分享
威纶触摸屏视频教程(66讲)分享
博途TIA V16-V17全套软件与组件分享
标准化编程之-博途TIA程序设计编程规范
西门子SCL编程练习:排水泵根据运行时间先起先停控制
如何使用C#编写程序读写西门子PLC?
VASS标准—PLC安全程序架构讲解
VASS05标准—KUKA机器人培训课件
大众VASS_05标准——PLC程序架构
大众VASS05生画面遇到的问题总结
KUKA机器人高级编程(下)第3-4章(计时器\运动编程)西门子博途SCL案例_仓储系统出料优先级控制程序实战练习西门子TIA博途SCL高级教程—伺服V90速度控制
西门子TIA博途SCL高级教程—伺服V90定位控制
西门子TIA博途SCL高级视频教程—模拟量在工程中的应用博途TIA Portal——SCL间接寻址PEEK和POKE指令的使用案例
西门子SCL高级语言教程—冒泡排序和选择排序西门子SCL编程实例—字与位的转换Word_To_Bit
西门子博途WINCC脚本VBS教程4_脚本操作画面内对象的属性如何使用C#编写程序读写西门子PLC?
C#上位机通过TCP/IP协议和KUKA机器人通讯
不外传的28条PLC编程规范及建议,赶紧收藏win10家庭版安装西门子博途软件时提示“管理员已阻止你运行此应用”解决方法西门子SCL编程-数据堆栈存储与操作在项目中的使用
博途实现程序动态加密—分级催款密钥授权管理系统程序实现分享几个PROFINET网络故障诊断与分析案例工控的面向对象编程SiCar自动化标准平台架构
特斯拉EPLAN 电气图纸和结构标准
SICAR标准-VALVE_1_TO_8_3POS_FB夹具控制功能块
西门子PLC信号分析软件Winplc Analyzer 使用方法
PROFINET设备的GSD文件及其描述语言GSDML
大众标准VASS06软件环境设置
ABB机器人编程与应用中级篇PLC编程算法—FIFO堆栈程序的实现大众VASS06 项目库标准程序结构.
C#利用S7netplus读写西门子PLC数据
吉利KUKA_KRC4系列机器人现场应用规范和技术要求
TESLA特斯拉—PLC 逻辑编程规范TESLA特斯拉—SCADA 设计规范多台排水泵按累计运行时间切换和先启先停切换多模式控制PLC程序分享

技术交流资源获取

趋热纳凉,尽享美好

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则