程式設計遠端讀取AB PLC的資料 (轉)
讀取AB PLC的資料
AB公司開發的RSLink是讀取遠端AB PLC資料的上佳工具,它能實現讀取AB PLC的名種要求。但在實際的整合中,由於遠端PLC的型別多種多樣,於是,我接到一個任務,自主開發讀取各種PLC。
在我們使用的遠端裝置中,有AB的PLC,西門子的PLC,LG的PLC,還有多種的RTU,但都有一個共通的特點:透過串列埠訪問,只是資料不同,找出各方的資料協議,就一切OK了。為此,我對AB PLC進行了一番研究。
AB公司提供了,它的資料就有點語焉不詳,我不得不得用串列埠技術進行串列埠監聽以獲取更為直觀的資料。
一、 串列埠的監聽
我利用PORTMON.EXE來監聽串列埠,以下是執行RSLink時我監聽到的資料:
IRP_MJ_WRITE 41 54 5A 0D
IRP_MJ_READ 41 54 5A 0D
IRP_MJ_WRITE 10 02 01 00 06 00 01 08 03 10 03 01 65
IRP_MJ_READ 10 06 10 02 00 01 46 00 01 08 00 EE 34 49 64 35 2F 30 33 20
20 20 20 20 20 20 00 00 86 10 10 8D A3 10 10 FC 10 03 18 55
IRP_MJ_WRITE 10 06
IRP_MJ_WRITE 100201000F002704A1C80789001003A3F3:namespace prefix = o ns = "urn:schemas--com::office" />
IRP_MJ_READ
10 06 10 02 00 01 4F 00 27 04
00 00 C7 0C CF 0C C8 0C C6 0C 88 0C EC 0C AA 0C 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
F3 FF 0D 00 0D 00 00 00 00 00 4C 04 52 03 20 04 8B 03 84 03
00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
00 00 00 00 02 00 00 00 00 00 00 00 1F 00 00 00 00 00 00 00
00 00 00 00 01 00 02 00 00 00 00 00 00 00 01 00 02 00 03 00
04 00 05 00 06 00 07 00 00 00 00 00 00 00 00 00 C8 00 00 00
C2 01 00 00 00 00 76 02 B6 03 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 CF 03 00 00 00 00 00 00 00 00
5D 00 C7 0C CF 0C C8 0C C6 0C 86 0C EC 0C AA 0C 00 00 00 00
10 03 8D D8
IRP_MJ_WRITE 10 06
由此可以看出,RSLink執行時進行三步:
1、 初始化MODEM:傳送ATZ,確認MODEM存在。
2、 檢視PLC的資料結構,收到後發1006確認
3、 檢視N7的資料,收到後發1006確認
現在所要做的事步驟都很清楚了,下面的工作是理解發出的與返回的資料的含義。
二、 傳送資料請求的格式
對於查詢PLC的資料結構,每次都是相同的請求,沒有必要去花費時間。我們著力在讀取N7資料的處理方面:
發出的資料含義:
*10
*02
01
00
0F
00
27
04
A1
C8
07
89
00
*10
03
A3
F3
起始位
起始位
目的址
目的址
讀資料
保留
ID號
ID號
字個數
區域
整數型
起始字
結束標誌
結束標誌
校驗位
校驗位
*:加*不參與CRC32運算。
CRC32的計算方法:VB程式碼如下:
Function CalcCRC(DATA(), Arraylen) As Long
Dim I, J, K, H As Integer
For I = 0 To Arraylen
J = J Xor DATA(I)
For K = 1 To 8
H = J Mod 2 'test if bit will be shifted out
J = Int(J / 2) 'shift right
If H Then
J = J Xor &H1000A001 'xor with constant
J = J - &H10000000 'clear top
End If
Next K
Next I
CalcCRC = J
End Function
Private Sub Command1_Click()
Dim I, J As Long
Length = (Len(Text3.Text)) / 2 - 1
ReDim Init(Length)
For I = 0 To Length
Init(I) = Val("&H" + Mid(Text3.Text, 2 * I + 1, 2))
Next I
J = CalcCRC(Init(), Length)
Text2.Text = Hex(J Mod 256)
Text1.Text = Hex(Int(J / 256))
End Sub
傳送這串字元將會能得到得到N7的資料返回,返回的資料以字為單位,開始字與字個數決定返回的內容。
三、 接收到的資料
如上接收到的資料,以 10 06 10 02開始,00 01 4F 00 27 04為目的址與ID號,現再接著是返回的資料,每兩個位元組是一組資料:如我的PLC中的定義如下:
Tagname
address
description
Compressure
n7:68
控制流量
flue_1
n7:33
1#瞬時流量
flue_2
n7:34
2#瞬時流量
Inpressue
n7:37
總入口壓力
lowp_alarm
n7:28
總壓力報警下限
lowp_set
n7:106
總壓力控制設定下限
Lowpressure
n7:26
總壓力控制下限
midtank_p
n7:36
中間罐壓力
outp_low_alarm
n7:29
出口壓力當前報警下限值
outp_low_set
n7:109
出口壓力報警下限設定
Outpressure
n7:35
出口壓力
p_c_down
n7:125
降低入口壓力
p_c_up
n7:124
提高入口壓力
upp_alarm
n7:27
總壓力報警上限
upp_set
n7:105
總壓力控制設值上限
Uppressure
n7:25
總壓力設值上限
地址為字,即兩個位元組。
這樣,我們可以讀取指定的區域資料,並根據你在PLC中的設定分解資料你就可以透過自編的程式讀取AB PLC的資料了。
結語
這就是AB PLC的資料協議,由於AB 的說明書中所言不詳,而我讀取的PLC是另一個公司開發的程式,所以在資料的含義方面花費了不少時間,而在程式設計方面的時間倒時不多。這次總結出來與大家共享,應能使大家免去摸索之苦。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993095/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLC程式設計—資料型別C程式程式設計資料型別
- 如何遠端獲取汙水處理裝置資料並進行遠端程式設計除錯程式設計除錯
- PLC遠端程式設計除錯(包括工藝組態)如何快速實現?程式設計除錯
- 【PLC程式設計】C程式程式設計
- python程式碼讀取遠端檔案的方法--paramikoPython
- PLC遠端程式設計閘道器讓裝置維護更加方便快捷程式設計
- 匯川PLC如何連線工業閘道器實現遠端程式設計和遠端上下載程式?程式設計
- PLC程式故障是什麼原因?如何遠端維護?C程式
- vscode遠端程式設計 終極方案VSCode程式設計
- Rust 程式設計,讀取檔案Rust程式設計
- PLC程式設計—基本知識C程式程式設計
- Postgresql Linked server遠端伺服器取資料的執行計劃原理SQLServer伺服器
- 如何實現歐姆龍PLC的線上程式設計和遠端上下載程式設計
- 好程式設計師前端教程-nodejs如何讀取資料夾目錄的內容程式設計師前端NodeJS
- 西門子程式設計軟體有哪些?如何實現PLC遠端上下載程式和程式設計除錯?程式設計除錯
- envoy 本地拉取遠端程式碼
- 施耐德PLC如何進行遠端維護?
- 轉載]遠端執行程式碼的利用行程
- 熱壓機PLC資料採集遠端監控物聯網解決方案
- Rust 程式設計,讀取命令列引數Rust程式設計命令列
- 可程式設計序控制器(PLC)程式設計
- ajax讀取資料庫資料程式碼例項資料庫
- 物聯網智慧工廠中的PLC如何進行資料採集與遠端維護
- MetaWork:拜託,這樣遠端結對程式設計超酷的!程式設計
- 讀資料工程之道:設計和構建健壯的資料系統21資料獲取
- 自動繞線機PLC資料採集遠端維護上下載系統方案
- Oracle盲注結合XXE漏洞遠端獲取資料Oracle
- 讀資料工程之道:設計和構建健壯的資料系統24獲取資料的方式
- 工業閘道器應用分享:PLC遠端監控與遠端維護
- 智慧養殖自動化PLC資料採集遠端監控系統解決方案
- 西門子PLC水處理系統如何實現資料採集遠端監控?
- mysql dump 拉取遠端資料同步到本地庫的shell 指令碼MySql指令碼
- spark讀取hbase的資料Spark
- 在小程式後端中轉獲取介面資料,繞過前端呼叫限制後端前端
- 讀資料工程之道:設計和構建健壯的資料系統27轉換
- PbootCMS用於遠端調取系統資料API介面列表bootAPI
- 基於VPN網路實現串列埠PLC的遠端監控和程式上下載串列埠
- 工程師如何實現西門子PLC S7-1500的遠端程式上下載?工程師
- 透過閘道器如何實現信捷PLC的遠端控制和程式上下載?