GRM雲服務器的Web數據接入解析

採用Web數據接口:
跨廣域網

客戶端操作原理:
與session類似,當在主服務器上登錄之後,得到對應的SessionID(與我們發送請求之後,會爲該請求創建一個唯一的SessionID)
以後我們的每次操作都會帶上這個SessionID,就好比我們的身份證一樣
SID 有效期:
同樣,與請求的sessionID一樣,都有有效期,這裏的有效期是,

  • 10分鐘之內,至少有一次數據讀寫操作,這個SID就會一直有效
  • 10分鐘之內,無任何操作,該SID會被刪除,此時進行讀寫錯誤就會返回8
  • 同時又爲了保證可用性,防止因爲SID過多而佔用內存,所以系統給每個GRM設備分配的Session數目限制爲100個。
  • 10分鐘之內,登陸的數量超過100個,將出現錯誤15,此時也不會隨機刪除任何一個,否則會對該用戶造成不同程度的損失,所以這裏就只能等SID過期自動刪除
    看到這裏可以相信大家可以基本瞭解SID的特點
    另外我們基於以上SID過期自動刪除的特點,可以得到以下使用技巧
  • 爲了防止讀取GRM數據時間間隔比較長而導致SID失效(讀取間隔大於1分鐘),建議在每次讀取數據之前都登錄一次,這樣就可以防止出錯8,但是要特別注意,除非是時間間隔長,否則每次都登錄,會造成15錯誤

簡稱:SID 一個64位的隨機數,
變量名:不區分大小寫

GRM主服務器固定地址,http://www.yunplc.com:7080
注意:GRM設備的讀取操作,會被數據服務器緩衝
但是寫操作不會被數據服務器緩衝,若不同客戶端對同一個GRM變量進行寫操作,那麼前面的就會被後面的覆蓋

登錄GRM服務器:
推薦登錄方法:
使用JS代碼通過CORS功能直接連接到雲服務器來獲取數據,無需通過第三方服務器進行轉發!
(重點提示: CORS直接登錄功能對winXP自帶的IE6不支持,需要升級到IE8以上,其他所有非IE瀏覽器都支持,若一定要兼容IE6,那麼就只能由客戶的網站服務器來轉發數據,通過第三方)

客戶端操作
:對所有的操作命令都是HTTP的POST動作,在POST請求裏面的必須部分只需要Host和Content_length,若需要讀取大量數據,那麼我們可以加上一個字段:Accept-Encoding:gzip選項,
作用:啓動Http的壓縮功能

  • 1登錄:

作用:直接登錄到主服務器,得到SID和該設備所屬的數據服務器地址
在這裏插入圖片描述
請求內容中的GRM=xxxxxx就是GRM設備的序號,PASS就是GRM設備的密碼,行與行之間的分隔符是\r\n

返回三行:
成功:
OK
ADDR:ip:port
SID:sessionID
出錯:
ERROR

  • 2讀取變量

登錄成功之後,就可以來讀取對應的變量了
(/exdata?SID=xxxxxx&OP=w)
和我們在Mysql數據庫中讀取數據類似
既可以讀取一個變量,也可以讀取所有的數據
在這裏插入圖片描述
在這裏插入圖片描述
發送目標:由我們登錄所得到的數據
請求內容:
變量個數\r\n
變量名1\r\n
變量名2\r\n
成功:
OK
2
變量值1
#NAN#(若名稱錯誤,返回#error#錯誤碼,無值#NAN#)

  • 3重複上次讀

該命令的url和返回內容都與【讀變量】命令完全相同,唯一區別就是請求內容爲空白,‘
作用:由於GRM服務器讀命令使用了緩存,這樣是直接衝緩存中中的請求內容,可以節約客戶端流量
解析:重複上次讀的操作是重複上一次有內容的操作,
比如:我現在執行了讀取ph這個變量的讀取操作,那麼第二次,我將post請求內容置爲空,那麼這次執行的其實是我們第一次讀取ph這個操作,以後執行多少次重複讀都是重複的這個操作。

  • 4寫變量

與請求的發送目標相同,都是我們登陸時候,返回的數據
(/exdata?SID=xxxxxx&OP=w)
在這裏插入圖片描述
單個寫命令可以寫入的變量數目沒有限制,但是對連接在GRM模塊串口上的PLC或者IO設備來說,通常每秒鐘之只能寫入不超過10個變量,若發出很多的寫命令,那麼會很久才能執行完成/

以上就是簡單的介紹,之所以寫這篇,是因爲現在公司涉及到了這個業務,今天在後端編寫了web服務,成功登錄到了該GRM雲服務器且成功讀取了對應的變量值,我會在下一篇將服務貼出來,供大家參考!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章