Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
日常使用西門子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設備的操控。
使用 API 網關作為內部服務面向客戶端的單一入口,是一種普遍采用的架構模式。企業組織通過良好定義的 API 將內部系統向內部和外部用戶公開,通常都會采用 API 網關來處理橫向的關注點,包括訪問控制、速率限制、負載均衡等等,來實現安全可控的 API 開放。而被廣泛實踐的微服務架構在提供高度靈活性和彈性的同時,也給 API 網關帶來了更多的挑戰。
阿里云云服務總線(Cloud Service Bus)新推出微服務網關服務(CSB Micro Gateway),針對微服務架構下 API 開放的特點,提供能與微服務環境的治理策略無縫銜接的網關服務,實現高效的微服務 API 開放。
相信許多人都熟悉 API 網關的概念。作為內部服務面向客戶端的單一入口,API 網關有兩個最典型的作用:
1、內外解耦:對客戶端屏蔽內部服務的動態多樣化實現細節,如技術框架、拆分粒度、接口結構、實例狀態等
2、切面控制:讓內部服務能專注在業務邏輯上,集中處理橫向的關注點,如路由、安全、限流、日志、監控等
實際使用中,對應 API 網關所在位置和針對場景的不同,可分成兩種類型:
1、企業級網關:位于企業組織的外圍,面對外部的 API 消費者或服務提供者。通常將企業自身的數據和能力 API 化,對外開放,也有允許外部服務入駐的情況。總的來說,以支撐服務入駐、服務運營和服務門戶場景為主,側重解決管理和運營挑戰。
2、微網關:位于企業組織內部,面對內部的 API 消費者,可以看做是內部服務之前的最后一道防線。通常按內部服務的業務劃分、物理環境以及技術形態的差異,設立多個微網關來分別負責。總的來說,以提供快捷開放、策略控制、服務適配能力為主,側重提升開發和運維效率。
實際上,企業級網關和微網關只是兩種使用類型,在關注的網關特性上有不同側重,實踐上并非一定需要不同的產品或兩套獨立的部署。
API 網關流量特征
企業級網關處理的一定是 API 消費方和后端服務之間的流量,也稱為南北流量;微網關一般也只是處理南北流量,當負責的服務本身缺乏注冊發現機制,例如運行在傳統應用服務器上的不同應用,當相互調用需要一個切面管控時,可以用微網關來統一處理服務間流量,也稱為東西流量。
在這里我們做個定義:用于微服務環境的微網關,稱作微服務網關。開源產品中,Kong、Netflix Zuul、Spring Cloud Gateway、Ambassador 等都可以用來作為微服務網關,其中 Ambassador 是基于 Envoy 構建的,屬于 K8s 原生微服務網關。那么,微服務網關有什么特別的地方,需要解決什么問題呢?
在微服務架構模式下,小型化、自包含、相對隔離、隨時可運行的應用形態,帶來了極大的靈活性和彈性。但是微服務架構高度動態的服務分布和復雜依賴的特點也帶來了很多挑戰:鏈路復雜,定位故障點困難;一個服務的故障可能帶來雪崩效應;端到端的測試難以實施等等。對應這些問題,出現了一系列典型的服務治理手段:
在實現上,這些橫向的治理能力大都需要微服務應用配合對接,這些公共機制的實現可以通過微服務框架(例如 Spring Cloud、Dubbo)來提供,讓應用開發能專注在業務邏輯上。或者采用服務網格(Service Mesh)模式,從應用實現解耦,付出一定性能代價,在應用本地的反向代理組件(Sidecar)中轉發流量并處理所有這些邏輯。
由于微服務的調用方可能在微服務環境內部,也可能在微服務環境外部,這些橫向的治理能力,有時也需要同時作用到微服務環境與外部之間的南北流量上。這時就需要網關的配合。
以服務發現和流量管理這兩個策略為例,考察兩個非常普遍的典型場景:
場景一:流量正確路由到可用的微服務實例
場景二:同步在網關上執行金絲雀發布灰度規則
當一個微服務的實例增加、減少,或者不可用時,網關要能把流量正確地路由到可用的微服務實例上;當微服務更新版本,采用金絲雀發布的時候,灰度策略不但需要在微服務環境內的東西流量上生效,在網關上也要執行相同的灰度策略。
很明顯,網關進行這樣的配合,如果采用人工操作的方式的話,會帶來很多問題:首先是實時性差,導致網關流量路由的失效和錯誤幾率增大;其次是運維和管理的壓力,對應關系容易錯亂,操作可能失誤錯漏,帶來很大風險。
設想一下,要校對實例的可用狀態,然后在網關或網關后的負載上掛載、卸載對應端點;或在金絲雀發布、中斷、回滾時,在網關上進行對應的灰度判定和路由配置。如果微服務稍微多些,運維和管理的難度、風險都是顯而易見的。
因此,微服務的網關,需要能夠和微服務環境的治理能力自動化聯動。對應上面的例子,就是要求:能夠自動基于微服務環境的服務發現策略,將服務請求動態地路由到可用的微服務實例上;能夠在微服務環境進行金絲雀發布時,自動同步配合執行對應的灰度策略。
也就是說,需要微服務網關和微服務環境在服務治理策略上能夠無縫銜接,自動配合生效。對這個要求的支持,也正是新發布的微服務網關服務(CSB Micro Gateway)的核心特性之一。
使用阿里云云服務總線(Cloud Service Bus)新發布的微服務網關服務(CSB Micro Gateway),用戶可以為目標微服務環境快速創建微服務網關。指定注冊中心后,微服務網關就可以動態感知微服務節點的變更,將 API 請求動態路由到后端微服務。通過控制臺可以基于注冊中心的服務列表快速發布 API,支持服務路由規則的動態變更生效,可以方便地管理限流、鑒權、后端負載均衡等控制策略,提供完整的 API 訪問日志和統計報告,并且支持和后端微服務治理策略的聯動,例如配合微服務應用的升級發布自動執行灰度路由策略。
新發布的微服務網關服務:https://help.aliyun.com/document_detail/156009.html
微服務網關服務(CSB Micro Gateway)是阿里云上的托管式微服務網關服務,提供高度的可用性和穩定性,基于開源引擎,支持開源配置方式。將陸續提供多種微服務網關引擎的托管服務,以滿足不同場景的側重需求和使用偏好。
公測首先推出基于 Zuul 的服務版本,支持 Eureka 注冊中心以及 Spring Cloud 微服務框架。將很快支持基于 Kong、Ambassador 等引擎的托管服務將很快推出 Nacos 等多種微服務注冊中心的支持,將陸續支持 Dubbo、gPRC 等多種微服務框架將陸續提供豐富的控制策略,包括各種鑒權方式、流量控制、安全防護、服務組裝變換等等,以及支持用戶自定義實現的策略將陸續補充企業級網關所側重的一些開放管控能力,例如 API 標準規范定義、API 文檔、API 測試調用、多版本管理等
歡迎試用,敬請密切關注微服務網關的發布更新!
微服務網關控制臺入口(無需開通,直接使用):https://microgw.console.aliyun.com/
微服務網關使用說明 :https://help.aliyun.com/document_detail/156009.html
前段時間,給大家介紹了WeServer在內網中離線發布全國影像及高程DEM數據并在OsgEarth中調用的方法和在開源三維地球Cesium中如何離線加載衛星影像及高程DEM數據的方法。
其中,OsgEarth是一個基于桌面端的三維地球開源平臺,而Cesium則是基于Web端的三維地球開源平臺。
同樣地,我們也可以基于二維的開源平臺并結合WeServer在內網中離線發布全國衛星影像。
關于二維的WebGIS開源平臺,我們推薦OpenLayers和MapBox兩種。
其中,二維開源平臺OpenLayers在內網中離線加載衛星影像的方法已經作過分享了,現在我們再來分享一下MapBox在內網中加載顯示WeServer發布的離線衛星影像的方法。
在開始之前,需要先準備離線數據發布軟件、離線衛星影像示例數據、MapBox開發源碼和本機IP地址等。
地圖發布軟件:需要在內網發布離線衛星影像,請確保地圖發布服務中間件版本為4.0.5以上,如果低于該版本,請通過私信回復"中間件"免費獲取最新版本安裝包,也可以直接在官網下載。
離線示例數據:本文提供的離線示例數據包括墨卡托投影和WGS84投影的衛星影像與地名標簽數據,由于這里主要是為了進行功能性演示,因此只提示前10級影像數據。
衛星影像示例數據
另外,由于MapBox默認僅支持墨卡托投影數據,不支持WGS84坐標系經緯度正投的影像數據,因此這里只需要從百度網盤的共享數據中下載"SatelliteForMercator"和"LabelFroMercator"文件夾中的數據即可。
私信“示例數據”獲取示例數據。
MapBox開發源碼:MapBox源碼可以從MapBox官網下載最新版,但由于下載的方法略微有點復雜(后面會介紹方法),因此也可以通過私信回復"MapBox"獲取MapBox開發源碼文件。
本機IP地址:由于會用到本機IP作為訪問地址,可以通過在DOS窗口中運行"IPConfig"命令或其它方式獲取本機IP地址以備用,如下圖所示。
獲取本機IP地址
由于MapBox的源碼下載略微有點復雜,我們有必要在這里為大家分享一下它的下載的方法,如果你已經從百度網盤下載了MapBox源碼,請略過本節。
首先打開MapBox官網,然后點擊"Documentation\Mapbox GL js",如下圖所示。
MapBox官網
在顯示的頁面點擊"Install"按鈕,如下圖所示。
開始下載安裝
從顯示的提示可以看出,這里下載代碼需要執行一個CMD命令"npm install mapbox-gl --save"進行下載,如下圖所示。
下載方法
打開CMD命令窗口,并進入到需要下載保存的目錄路徑,這里我們將下載內容保存到"F:\MapBox"目錄,如下圖所示。
執行下載
執行下載后的結果,如下圖所示。
下載結果
CMD命令窗口中的警告信息提示缺少"package.json"文件,我們可以通過執行"npm init -f"命令,將會在目錄中自動生成該文件,如下圖所示。
生成PACKAGE文件
成功生成了"package.json"文件之后,又提示缺少了描述信息和"repository"字段,如下圖所示。
警告提示信息
我們打開"package.json"文件,發現"description"字段為空,且沒有"repository"字段,如下圖所示。
PACKAGE原文件內容
為了避免出現警告信息,可以為"description"添加描述內容,并添加"repository"字段。
"repository"用于指定你的代碼存放的地方,這個對希望貢獻的人有幫助。
如果git倉庫在github上,那么npm docs命令能找到你,如下所示。
"repository" :
{ "type" : "git"
, "url" : "http://github.com/isaacs/npm.git"
}
URL應該是公開的(即便是只讀的)能直接被未經過修改的版本控制程序處理的url。不應該是一個html的項目頁面,因為它是給計算機看的。
這里,我們只需要將項目設置為私有即可,即在文檔中添加"private"字段并設置為"true",如下圖所示。
修改PACEAGE文件
在"package.json"文件中設置完成并保存后,我們再次執行"npm install mapbox-gl --save"命令,就不會再顯示警告信息了,如下圖所示。
執行結果
以上就是MapBox源碼下載的全過程,后面我們會專門說明如何在IIS中部署MapBox源碼的方法。
軟件的安裝與離線衛星影像的發布方法,請參閱"全球衛星影像離線發布神器《水經注地圖發布服務中間件4.0》正式發布"一文。
由于MapBox是二維應用,因此這里不需要發布高程。
但需要注意的是,要將投影設置為"Web_Mercator",且確保設置的端口號沒有被其它程序占用,如下圖所示。
安裝配置
安裝完成后,會顯示如下圖所示信息。
安裝完成
打開Windows任務管理器,如果WeServer服務的狀態顯示"正在運行",則說明中間件服務安裝成功并已經正常運行,如下圖所示。
服務運行正常
WeServer成功發布后,接下來我們需要將下載的MapBox在本地進行部署。
我們通過IIS對MapBox源碼進行本地化部署,如果你對IIS網站部署非常熟悉,請略過本節。
MapBox源碼解壓之后,如下圖所示。
MapBox源碼目錄
在Windows控制面板中打開"管理工具",如下圖所示。
管理工具
打開IIS網站管理器,如下圖所示。
打開IIS
在"網站"樹節點單擊鼠標右鍵,然后選擇"添加網站"菜單,如下圖所示。
添加網站
網站名稱可以任意取,這里我們取名為"MapBox",物理路徑設置為MapBox源碼的"node_modules\mapbox-gl"文件目錄,并將端口號設置為沒有被其它程序或Web站點所占用的端口號,這里默認為"80",如下圖所示。
配置網站參數
配置完成并點擊"確定"按鈕之后完成MapBox源碼的本地網站配置,如下圖所示。
完成配置
現在,MapBox源碼在本地就離線部署好了,但還需要新建一個衛星影像的離線加載顯示頁面才可以進行訪問。
在MapBox源碼目錄"F:\MapBox\node_modules\mapbox-gl"中新建一個"SampleForMercator.html"Web頁面頁文件,如下圖所示。
新建Web頁面文件
在"SampleForMercator.html"網站頁面文件中添加衛星影像與地名標簽加載代碼,如下圖所示。
添加影像加載代碼
通過關注私信回復"MapBox"可獲取MapBox源碼文件,解壓后在目錄中,已經為你提供了"SampleForMercator.html"源碼文件,但需要特別注意的是需要將IP地址改為本機IP地址,前文我們已經提到過了獲取本機IP的方法。
打開網址"http://192.168.0.5/SampleForMercator.html",可以顯示加載本地影像如下圖所示。
WGS84衛星影像加載效果
至此,MapBox在內網中加載顯示WeServer發布的離線地圖的目的就達到了。
這樣一來,當前這臺電腦在內網中就是一臺標準地圖服務器,內網中任何一臺電腦都可以通過打開網址離線查看地圖,但需要注意的是需要將網址中的IP改為本機IP地址。
最后再次申明,由于本文中提供的數據為示例數據,旨在說明地圖發布服務中間件的內網離線發布功能,因此衛星影像數據和地名標簽都僅僅提供全球前10級數據。
你可以通過私信回復"免費數據",領取一個省的高清衛星影像數據,然后更新到對應的數據目錄即可!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。