使用浏览器访问PLC的自定义网页
liuian 2024-12-04 13:45 54 浏览
在日常使用西门子S7-1200系列PLC时,需要查看PLC内部数据,通常都是用触摸屏或者上位机监控,或者直接使用博途在线查看。但是当遇到触摸屏或者上位软件未关联的变量,且本机未安装博途的情况,问题就会比较复杂了,通常需要重新配置上位机参数,或者借助第三方工具,甚至需要重新安装博途来解决。这时候,如果在PLC程序设计的时候,启用了Web服务器,问题就会比较简单了。
首先,使用博途打开PLC源代码,选中CPU模块,点击右键,点击属性,弹出设置界面,在”常规“窗口左侧列表框中选择”Web服务器“,勾选"在此设备的所有模块上激活Web服务器",同时取消“仅允许通过HTTPS访问”。重新编译后下载。
打开计算机上的网页浏览器,在地址栏输入http://ww.xx.yy.zz(此处为PLC的实际IP地址,如192.168.1.10,所有符号为英文状态输入),打开 S7-1200的 标准 Web 页面,如下图 所示。
变量状态页面可以查看任何 CPU 中的 I/O 或者存储器数据,可以输入绝对地址(例如:MB0、I0.0、Q1.0等)、PLC 变量名或者数据块中的变量。可以选择显示的数据类型的格式;可以显示或者更改当前值。如下图所示。
到此为止,基本已经解决了之前遇到的问题,但是,进一步探索后,会发现“Web服务器”还有更强大的功能,可以创建融入 PLC 数据的特定的 HTML 页面。
选择一款HTML编辑器,如Microsoft Frontpage,Dreamweaver或VScode等,创建用户定义的 Web 页面,使用AWP 命令包含在 HTML 代码的 HTML 注释中(AWP 命令是西门子提供用于访问 CPU 信息的固定命令集)。
如需显示变量,语法为 :=<Varname>: ,Varname为 PLC 变量,使用双引号将变量名称括起来即可,如下图所示。
<p>Actual Value: :="VarName1":</p>
如需写入变量,则首先需要在HTML注释中添加。
<!-- AWP_In_Variable Name='"VarName1"' -->
然后添加输入框和确认按钮等元素即可。
<input type="text" id="value1" name='"VarName1"' size="5">
<input type="submit" value="Set a new Value" style="width: 200px">
页面编辑完成后,打开博途,在 Web 服务器的"用户自定义页面"中进行配置。注意需要点击生成块方可生效。
执行 WWW 指令,在主程序直接调用,也可通过程序逻辑可控制何时启用自定义页面。
用户定义的 Web 页面块后和其它的程序块一样,将成为程序的一部分,按照正常过程将下载到 CPU即可。再次打开浏览器,输入PLC的IP地址后,即可看到用户编写的HTML页面。由于采用了标准的HTML协议,用户自定义的页面也可以使用处于同一网段下的手机访问,如果局域网配置了VPN,甚至可以通过外网,远程操作,因此,为了防止 PLC 被恶意攻击,或者出现未经授权的操作,官方还是建议勾选“仅允许通过 HTTPS 访问”。
一个典型的HTML页面示例
<!-- AWP_In_Variable Name='"VarName1"' -->
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
<title>Web page demo - Login - Main page</title>
<!-- Via "<link...>" a CSS file is referenced which contains all information on the optical design of the web -->
<!-- <link rel="stylesheet" type="text/css" href="/CSS/S7Web.css"> --> <!-- S7Web.css is used in S7-1500 CPUs and S7-1200 FW2.2 -->
</head>
<body onload="loginCheck()"> <!-- check login with each refresh of the website -->
<!-- example for write value to CPU -->
<form method="post" action="" onsubmit="">
<p> </p>
<p>
<input type="text" id="value1" name='"VarName1"' size="5">
<input type="submit" value="Set a new Value" style="width: 200px">
</p>
</form>
<p>Actual Value: :="VarName1":</p>
<!-- BEGIN Login Area -->
<iframe id="WebserverIFrame" name="WebserverIFrameName" src="/Portal/Portal.mwsl" style="display:none"></iframe>
<!-- area for login -->
<div id="loginBox" class="Login_Area"></div> <!-- "Login_Area" is defined in S7Web.css for S7-1500 CPUs and S7-1200 FW2.2-->
<!-- function for check login -->
<script type="text/javascript">
function loginCheck() {
var iFrameElement = document.getElementById('WebserverIFrame');
var loginForm = iFrameElement.contentWindow.document.getElementById('loginForm'); //S7-1200 FW4.0
if (loginForm == null) {
loginForm = iFrameElement.contentWindow.document.getElementById('Login_Area_Form'); //S7-1200 FW2.2 and S7-1500 FW1.5
}
if(loginForm) {
loginForm.setAttribute("data-ajax", "false");
document.getElementById('loginBox').innerHTML = loginForm.parentNode.innerHTML;
document.getElementsByName("Redirection")[0]["value"] = window.location.href.split("?")[0];
}
var logoutForm = iFrameElement.contentWindow.document.getElementById('logoutForm'); //S7-1200 FW4.0
if(logoutForm == null) {
logoutForm = iFrameElement.contentWindow.document.getElementById('logout_form'); //S7-1200 FW2.2
}
if(logoutForm == null) {
logoutForm = iFrameElement.contentWindow.document.getElementById('Logout_Area_Form'); //S7-1500 FW1.5
}
if(logoutForm) {
logoutForm.setAttribute("data-ajax", "false");
document.getElementById('loginBox').innerHTML = logoutForm.parentNode.innerHTML;
document.getElementsByName("Redirection")[0]["value"] = window.location.href.split("?")[0]; // use the current webpage as redirection - remove additonal post values attached by "?" if necessary
}
}
</script>
<!-- END Login Area -->
</body>
</html>
(来源于西门子官方文档)
合理利用Web服务器,结合前端开发技术,可以将自定义页面设计成组态界面,替代组态软件和触摸屏,将逻辑代码和操作界面全部下载存储到PLC,只需要浏览器,即可实现任意客户端对PLC设备的操控。
相关推荐
- Docker 47 个常见故障的原因和解决方法
-
【作者】曹如熙,具有超过十年的互联网运维及五年以上团队管理经验,多年容器云的运维,尤其在Docker和kubernetes领域非常精通。Docker是一种相对使用较简单的容器,我们可以通过以下几种方式...
- 电脑30个快问快答,解决常见电脑问题
-
1.强行关机/停电对电脑有影响吗?答:可能损坏硬盘(机械硬盘风险高)、未保存数据丢失,偶尔一次影响小,但频繁操作会缩短硬件寿命。2.C盘满影响速度吗?答:会!系统运行需C盘空间缓存临时数据,空间不...
- 使用Tcpdump包抓取分析数据包的详细用法
-
TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种...
- 电脑启动不了(BootDevice Not Found Hard Disk-3F0)解决方案
-
HP品牌机,开机启动不了,黑屏,开机取下主板电池恢复BIOS后,开机显示找不到启动盘。一、按F2键进入BIOS,出现硬盘内存检测界面的话,直接退出。就会出现这个界面,光标键向下,选择BIOSSetu...
- 电脑开机黑屏别慌!快码住!起底维修老师傅不能说的秘密
-
按下开机键却只收获黑屏大礼包?那些神秘的英文提示、刺耳的蜂鸣声,其实是电脑在给你发送求救信号!从按下电源到进入桌面的12秒里,你的电脑经历了史诗级的硬件自检与系统加载,今天我们就破译这段“摩斯电码”。...
- 电脑启动故障为何总要先看BIOS?新手必读的关键知识解析
-
最近在帮朋友们解答电脑无法正常开机的问题时,发现大家经常收到一句高频建议:“先检查BIOS”。对不少普通用户而言,BIOS依然是个神秘的存在。那么,BIOS到底是什么?电脑出现哪些故障会与它相关呢?本...
- Windows 11 KB5053598更新:安全补丁还是系统噩梦?
-
2025年3月11日,微软发布了Windows1124H2的强制性更新KB5053598,作为“周二补丁日”(PatchTuesday)的一部分。然而,这款本应提升系统安全性的更新却引发了广泛的...
- 飞牛OS入门安装遇到问题,如何解决?
-
之前小编尝试了用旧电脑装飞牛OS安装之前特意查了一些硬件要求飞牛OS目前支持主流的x86架构硬件主机需能连网线飞牛OS暂时不支持只有无线网卡的安装貌似很多小伙伴在一开始安装就卡住了那今天咱们汇总分...
- 几种常见的电脑开机黑屏显示白色英文字母解决方法
-
当电脑开机出现黑屏并显示白色英文字母时,通常表示系统启动过程中遇到了错误。以下是几种常见原因及对应的解决方法,按照排查顺序整理:一、检查外接设备与硬件连接可能原因:外接U盘、移动硬盘等未拔出,或内部硬...
- 电脑启动出现问题,为什么都要先检查BIOS?
-
【ZOL中关村在线原创技巧应用】最近在回答问题的时候,总会发现很多朋友都在问“电脑无法正常开机怎么办?”这样类似的问题,而许多DIY大佬的回复总会出现一条高频建议“先检查BIOS”。但对于许多普通用户...
- 教你怎么用JavaScript检测当前浏览器是无头浏览器
-
什么是无头浏览器(headlessbrowser)?无头浏览器是指可以在图形界面情况下运行的浏览器。我可以通过编程来控制无头浏览器自动执行各种任务,比如做测试,给网页截屏等。为什么叫“无头”浏览器?...
- 12个高效的Python爬虫框架,你用过几个?
-
实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...
- 运维的报表之路,用 node.js 轻松发送 grafana 报表
-
在运维过程中,无论是监控还是报表,都会有一些通过邮件发送图表的需求,由于开源的zabbix,grafana和kibana等并不完全具有“想发送哪儿就发送哪儿”的图片生成功能,在grafana...
- C#基于浏览器内核的高级爬虫(c#爬取网页内容)
-
基于C#.NET+PhantomJS+Sellenium的高级网络爬虫程序。可执行Javascript代码、触发各类事件、操纵页面Dom结构、甚至可以移除不喜欢的CSS样式。很多网站都用Ajax动态加...
- 如何优化一个秒杀项目?(秒杀实现思路)
-
问题1:使用jmeter性能压测,定位瓶颈代码步骤流程:线程组--->Http请求--->查看结果树--->聚合报告tips:host的文件--->优先调用映射,减少DNS的时...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
python使用fitz模块提取pdf中的图片
-
《人人译客》如何规划你的移动电商网站(2)
-
Jupyterhub安装教程 jupyter怎么安装包
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- react-admin (33)
- vscode切换git分支 (35)
- vscode美化代码 (33)
- python bytes转16进制 (35)