SIEMENS PLC Web API 学习记录

为顺应时代发展,西门子为 S7-200SMART/1200/1500 PLC 添加IT通讯所需要的 Web API。(由于S7-200 SMART 新固件必须配合新的硬件才能使用,手头没有),打赏可获取文中测试源代码,部署自己电脑或PLC中测试相关API

序号 PLC类型 固件开始支持版本 当前API 版本
1 S7-200 SMART V2.7 未知
2 S7-1200 V4.5 V1.46
3 S7-1500 V2.8 V2.00

Web Api 概述

Web Api 是基于PLC Web Server 实现的,Web Server 是西门子PLC很早就开始支持的特性,提供基础数据查看,诊断、故障更新、变量监测、文件浏览下载等功能,并提供一套 AWP 语法实现自定义网页数据读写监控;从新版本开始支持 Web Api 功能,所谓Web Api就是通讯定义的接口和方法,直接获取PLC运行数据,而不需要登陆网页。具体可以干嘛?官方文档如下:

CPU 提供基于 Web 的 API (​Web API​) 作为读取和写入 CPU 数据的界面。Web API ​可用于:
​- 使用最新的先进技术实现 Web 应用程序
​- 通过脚本和编程语言与 CPU 的 Web 服务器通信
​- 创建可同时连接到多个 CPU 的 Web 应用程序,例如,创建可显示多个 CPU 状态的仪表板

具体包括读写PLC数据,远程监控PLC运行状态等等;

S7-1200/1500 所实现的 Web API 是一个标准的 JSON-RPC 规范的 API 特性,遵循 JSON-RPC 2.0 规范。API 基于 HTTP URL POST方法,即发送 POST 请求到 https://[ip]/api/jsonrpc,CPU 根据权限及请求方法回应相关数据或错误指示。Web API​ 支持 JSON-RPC 2.0 中定义的批量操作。

JSON-RPC API格式

{"id": $(in_request),"jsonrpc": "2.0","method": $(method), // 方法名称"params": $(params) // 方法对应的参数,如果不需要,可忽略
}
// 处理成功返回
{"id": $id_in_request,"jsonrpc": "2.0","result":"$(data)"
}// 处理失败返回
{"id": $id_in_request,"jsonrpc": "2.0","error":{"code": $(error),"message": $(error_message)}
}

已经测试的支持的客户端包括 Chrome,Firefox,Edge,Safari 等主流浏览器,Python,GNU Wget,cURL等工具及库。

Web Api 测试

测试 S7-1500 为 CPU 1511-1 PN , 固件版本 2.9.4,最新 V3.0 并没有更新1511。S7-1200 为 CPU 1215C AC/DC/Rl,固件版本 V4.5(V4.6和V4.5相同)。测试工具包括Edge 100+版本,PostMan,JavaScript等


通过实际测试,发现S7-1200/1500 的 Web Api 因为 CPU 计算能力及API版本不同而差异较大,S7-1200 Web Api 响应速度与 S7-1500 相比明显慢,且支持的 API 有限,差异后面会列出;

启用 Web Api 功能

控制器启用 Web Api 的Web Server 方法参见参考资料所附的官方资料,此处不再展开。

值得注意的是,Web Api 的读写权限是与 Web Server 里面配置的权限相关,默认用户名为 EveryBody,默认用户的权限需要配置;管理员权限可以读写PLC数据,读取PLC启停状态,控制PLC启停状态,获取PLC时间,下载文件等等;Api.Version / Api.Browse / Api.Ping 等几个指令是不需要传递权限的,随意调用。

Api.Version/Api.Browse

// api Version
{"id": 5,"jsonrpc": "2.0","method": "Api.Version"
}
// ---响应----
{"jsonrpc": "2.0","id": 5,"result": 1.46
}// api browse
{"id": 6,"jsonrpc": "2.0","method": "Api.Browse"
}//响应
{"jsonrpc": "2.0","id": 6,"result": [{"name": "Api.Browse"},{"name": "Api.GetCertificateUrl"},{"name": "Api.GetPermissions"},{"name": "Api.Login"},{"name": "Api.Logout"},{"name": "Api.Ping"},{"name": "Api.Version"},{"name": "PlcProgram.Browse"},{"name": "PlcProgram.Read"},{"name": "PlcProgram.Write"}]
}

通过 Edge F12 开发者工具,可以清晰看到通讯过程;


Request Head 类型必须是:Content type:application/json

Api.Login/Logout

登陆PLC用的方法并不是传统 Basic Auth 等方法,而是直接在Request_Body传递Json结构体,改变

{"method": "Api.Login", // 方法名称"params": {"user":"UserName", "password":"SecurePassword""include_web_application_cookie":true // V2.9+版本支持cookie功能}// Api.Login 需要参数必要参数包括"user","password"
}
响应会在 "result" 返回
{"token": "eG9mcHdhaGR0dWVsdm5teGFxcGw=", // 后续用的请求更多用的为token
"web_application_cookie":"Cb5xdhgiokr0dWVsdm5teGCncFb="
}

获取token后,需要在后续 Request Head 中包括'X-Auth-Token': "eG9mcHdhaGR0dWVsdm5teGFxcGw=" 字段,会实现认证权限的包含。

Web Server 认证有效期为 120s,如果120s内没有任何通讯,CPU 会注销事件结束会话。延长会话的方法,即定时发送 Api.Ping 可确保会话保持活动状态。

$.post({url:"https://192.168.2.132/api/jsonrpc",
headers:{'X-Auth-Token':"Sy8pe3VNv86rTMldzFBsYzmw12Lg"
},
data:JSON.stringify({"jsonrpc":"2.0", method:"Api.Ping", "id":1}),
//Api.Ping 不需要任何参数
});

PLC Web Api 核心为浏览、读、写变量

PlcProgram.Browse

通过 PlcProgram.Browse 方法,可以读取变量列表。​要调用 PlcProgram.Browse 方法,需要“read_value”认证。PlcProgram.Browse 方法用到两个参数,有两种用法。

// method 1,返回所有子变量
{“mode”:"children","var":"VarName" // 如果 var 变量为空,则返回所有PLC可访问的变量表
}
// method 2 返回变量信息,包括变量地址、DB块、PLC内部数据类型等信息
{“mode”:"var","var":"VarName" // 如果 var 变量为空,则返回所有PLC可访问的变量表
}

PlcProgram.Read

​使用 PlcProgram.Read 方法从 CPU 读取单个变量值,要调用 PlcProgram.Read 方法,需要“read_value”认证。PlcProgram.Read 方法用到两个参数mode,var,有两种用法。

// method 1,读取变量实际值
{“mode”:"simple", // 默认值,可不写"var":"VarName"
}
// method 2 读取变量原始值,原始值即为 由字节构成的数据底层数组
{“mode”:"raw","var":"VarName"
}
// 如
​以下示例显示在“​raw​”表示中读取“​dword​”类型变量的结果。
[ 1, 47, 233, 0 ]

PlcProgram.Write

PlcProgram.Write 和Read 相似,只是参数中多一个value参数

// method 1,读取变量实际值
{“mode”:"simple", // 默认值,可不写"value": "VarValue","var":"VarName"
}
// method 2 读取变量原始值,原始值即为 由字节构成的数据底层数组
{“mode”:"raw","var":"VarName" ,"value": ["VarValue1", "VarValue2", "VarValue3"],
}
// 如
​以下示例显示在“​raw​”表示中读取“​dword​”类型变量的结果。
[ 1, 47, 233, 0 ]

此处需要注意的是,变量名称的写法,传递给CPU的JSON中变量名称需要和博通调用名称一致,即该加引号需要加引号,如果徒手写json,则可能需要用到转义字符,类似于 "var": "\"MyDB\".MyVariable"写入或返回的数值类型需要与CPU内部类型对应,支持绝大部分基础数据类型,对于结构体和UDT,建议使用批量调用模式获取,无法通过变量名一次性获取。

  • ​布尔 JSON 值必须为:true​ 或 false
  • 整数注意数值范围
  • JSON 浮点数必须使用 parseFloat 格式化为浮点数
  • 日期、时间等数值写入也必须满足TIA对数据格式的要求

Plc.ReadOperatingMode​/Plc.ReadOperatingMode

使用 Plc.ReadOperatingMode 方法可以读取 CPU 的操作模式。​要调用 Plc.ReadOperatingMode 方法,需要“read_diagnostics”认证。​通过 Plc.RequestChangeOperatingMode 方法,为 CPU 请求新的操作模式。​但这只是对工作模式的请求,必须在 CPU 上给出操作模式更改的条件,例如,通过模式选择器的相应位置。可使用 ​Plc.ReadOperatingMode​ 方法检查 CPU 上的工作模式更改是否成功。​要调用 Plc.RequestChangeOperatingMode 方法,需要“change_operating_mode”认证。

ReadOperatingMode 方法无需参数,直接发送即可。

{"id": x,"jsonrpc": "2.0","method": "Plc.ReadOperatingMode​"
}
// 结果返回
在result 中返回,​STOP,​STARTUP,RUN,​HOLD,unknown等几种模式

写入请求

{"id": ,"jsonrpc": "2.0","method": "Plc.RequestChangeOperatingMode","params": {"mode": "stop" // run,stop}
}


批量方法,就是将上述请求Body合并;

[
{"jsonrpc":"2.0", "id":1, method:"PlcProgram.Read"},
{"jsonrpc":"2.0", "id":2, method:"PlcProgram.Read",
params:{"var":"\"MyDB\".InvalidField"}},
{"jsonrpc":"2.0", "id":3, method:"PlcProgram.Read",
params:{"var":"MyDB.MyDate"} },
{"jsonrpc":"2.0", "id":4, method:"PlcProgram.Write",
params:{"var":"\"BoilerControl\".TempSetPoint", value:9001} }
]

Web Api 列表

S7-1200 Api V1.46 提供功能如下:

  • Api.Browse
  • Api.GetCertificateUrl
  • Api.GetPermissions
  • Api.Login
  • Api.Logout
  • Api.Ping
  • Api.Version
  • PlcProgram.Browse
  • PlcProgram.Read
  • PlcProgram.Write

S7-1500 Api V2.00 提供Api 在上述基础上,还包括
— v2.9 固件新增 ----

  • 用户可以加载的 Web 应用
  • Api.BrowseTickets
  • Api.CloseTicket
  • Plc.ReadOperatingMode
  • Plc.RequestChangeOperatingMode
  • 票证机制
  • WebApp.Browse
  • WebApp.BrowseResources
  • WebApp.Create
  • WebApp.CreateResource
  • WebApp.Delete
  • WebApp.DeleteResource
  • WebApp.DownloadResource
  • WebApp.Rename
  • WebApp.RenameResource
  • WebApp.SetDefaultPage
  • WebApp.SetNotAuthorizedPage
  • WebApp.SetNotFoundPage
  • WebApp.SetResourceETag
  • WebApp.SetResourceMediaType
  • WebApp.SetResourceModificationTime
  • WebApp.SetResourceVisibility
  • WebApp.SetState
    — V3.0 固件新增----
  • DataLogs.DownloadAndClear
  • Files.Browse
  • Files.Create
  • Files.CreateDirectory
  • Files.Delete
  • Files.DeleteDirectory
  • Files.Download
  • Files.Rename
  • Plc.CreateBackup
  • Plc.ReadSystemTime
  • Plc.ReadTimeSettings
  • Plc.RestoreBackup

参考资料

  1. S7-200 Smart Web API 开发手册
  2. SIMATIC S7-1500、SIMATIC 驱动控制器、ET 200SP、ET 200pro Web 服务器
  3. WebserverApi Client Library for .NET
  4. smart web api初体验 西门子论坛大神贡献的Go版本

SIEMENS PLC Web API 学习记录相关推荐

  1. 监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

    回顾 在<监控系统简介:使用 Prometheus 与 Grafana>一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型.PromQL 以及 Graf ...

  2. Web Api学习一

    接触WebApi读的第一篇文章: ASP.NET Web API(一):使用初探,GET和POST数据 实践过程中,用的Fiddler模拟Post请求时收到的对象总是为空null 解决:将文章中的内容 ...

  3. Windows API 学习记录1

    这里面的好多函数不能死记硬背,知道有这个函数就行,等用到了,再回来细看 一.窗口管理函数包括以下几类: 按钮函数(Button) Microsoft提供了对话框和控制来支持应用程序与用户之间的交互通讯 ...

  4. 网易云课堂[Web安全工程师]第一部分 第二章WEB简介 学习记录

    [仍旧写在前面 个人学习笔记] 第一部分 WEB基础知识 第二章 WEB基础知识 第一节 前端开发基础--HTML课后小测验 1 HTML页面的注释符号是那种?<!-- --> 2 若要在 ...

  5. Java Web完整学习记录

    一.HTTP协议 1.1 HTTP协议定义 超文本传输协议 所有的www文件都必须遵守此标准 设计http协议的最初目的是提供一种发布和修改html页面的方法 1.2 HTTP组成 1.2.1 请求 ...

  6. web api 开发记录

    1. 修改 api 返回时间格式 //配置返回的时间类型数据格式 GlobalConfiguration.Configuration.Formatters.JsonFormatter.Serializ ...

  7. java API学习记录

    API(ApplicationProgrammingInterface) 1.String和StringBuffer类位于java.lang中 Stringx="a"+4+&quo ...

  8. Web API 学习笔记 - 剪切板 Clipboard API

    F12打开调试窗口,Esc调出命令行.执行以下代码,给点赞按钮添加点击事件. function 粘贴剪切板内容(selector){navigator.clipboard.readText().the ...

  9. Java 8 Stream API学习记录

    Stream简介 1.Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同. 2.stream是对集合对象功能的 ...

最新文章

  1. CSS初识(三):CSS字体文本相关属性
  2. Asp.Net 上传大文件
  3. php面试题之五——MySQL数据库(基础部分)
  4. 前端:HTML/04/html颜色表示,计算机进制,锚点链接,计算机编码(字符集)
  5. 案例分析:倾斜值传入导致 SQL 资源消耗升高
  6. Devexpress 15.1.8 Breaking Changes
  7. 6月28日云栖精选夜读丨优酷世界杯的好后卫:云计算成为靠谱的流媒体保障体系...
  8. vue中this.$set的用法
  9. Xpose实例分析-变色龙
  10. 计算机学机械制图吗,机械制图为什么这么难学?
  11. win10插上耳机还外放(win10插上耳机还外放怎么设置)
  12. 了解【泰科】协作机器人产品资料大全
  13. thinkphp使用阿里大鱼短信接口
  14. 思考方法,程序员生存之道
  15. 亲测:一加手机3刷机OxygenOS详细教程
  16. 分享50个免费的云盘网盘服务——拥有无限储存空间
  17. 国内星载光学卫星详解
  18. python爬取b站评论_Python爬虫框架:scrapy抓取B站博人传评论数据
  19. python3学习之路 -- 7)初级练习4 - 支付密码、账号、价格竞猜、星座
  20. NOA上车「清一色」自主品牌,哪些供应商正在突围前线

热门文章

  1. 为1.59亿儿童做食品,百草味的“朝阳赛道”怎么跑?
  2. 企业网站制作模板制作多少钱?这三个因素影响价格
  3. Jquery中show的用法
  4. emoji:意外成功的人造语言
  5. IIS 常用操作编程实现(VB6)
  6. Postman测试百度AI翻译接口、接口测试
  7. 推荐系统 Causal Intervention for Leveraging Popularity Bias in Recommendation因果论文笔记
  8. 选班长的问题?Java:解决循环报数
  9. PS快捷键大法及个人使用心得
  10. 使用WLS进行电力系统状态估计