FINS簡介
FINS(factory interface network service)協議是由日本OMRON公司開發的一種工業自動化控制網絡指令控制系統,用於在PLC和計算機之間進行通信的一種網絡協議,通過使用FINS指令可以實現在以太網、控制網絡的Controller Link和RS232C/485串行通信三種網絡之間的無縫通信。關於這三種通信方式的主要參數如下
網絡 | RS232C /485 | Controller Link | 以太網
傳輸速率 | 最高19.2kb/s | 最高2MB/S | 10~100MB/s
傳輸距離 | 15m | 傳輸速率最高時為500m | 100m/段
最大節點數 | 32 | 32 | 254
從上面的數據我們不難看出,如果我們使用RS232C/485,以它最高19.2kb/s的速率來看已經滿足不了現代網絡數據量大,距離遠,實時要求高的控制系統特點。
而Controller Link的設計方案可以達到2MB/S和500m的傳輸距離比RC232C/485要強一些但是它依靠上位機安裝CLK支撐卡,所以在可擴展性上面不如以太網方案。
最后我們來看一下以太網方案,10~100MB/S的傳輸速率已經可以滿足現代工業所需求的實時性傳輸數據,而100m/段的傳輸距離使得可以進行靈活組網,最高254個節點可以實現pc和plc之間一對一、一對多、多對多等多種控制方案。而且 現在工業設備的上位機都配有網卡,不需要再額外添加硬件,在實際操作上具有了巨大的便捷性。這就使得工業以太網滿足了良好的可擴展性、實用性、實時性等需求。所以OMRON通過提供Omron FINS Ethernet 驅動程序將包括HMI、SCADA、Historian、MES、ERP和無數自定義應用程序在內的客戶端應用程序和控制器連接。
FINS與TCP/IP和UDP/IP協議
我們都知道TCP/IP模型中從底層開始分別是物理層、數據鏈路層、網絡層、傳輸層和應用層。FINS協議就工作在應用層上。上文中我們也曾經說過FINS采用以太網方案進行信息傳輸,在以太網FINS通信時候,數據通過作用在數據傳輸層的TCP/IP或者UDP/IP包來收發。以下我們以OMRON公司的ETN11以太網單元舉例來給大家看一下FINS和TCP/IP之間的關系。
如圖所示,在我們實際通信過程中,遠程設備在網絡層使用IP地址,傳輸層定義了本地TCP或UDP的端口號用來為下面FINS通信提供端口,而在應用層則使用FINS節點地址(節點號),這里簡單的給大家介紹一下節點號,節點這個概念類似於我們linux里面的inode,作為一個有着定長字節的表,表里面包含着文件大小,所有者等一些信息,而節點號就相當是這個節點的身份證號,在使用到對應節點內容時只需要通過節點號相對應就可以使用相關節點內容。
回到正題, 通常我們在以太網通信時使用IP地址,而在FINS通信中使用網絡號、節點號和單元號來對應不同的設備,使用節點號可以讓設備在IP地址和節點號之間轉換,節點號提供了在Control Link網和以太網之間統一的尋址方式,這種方法使不同網絡之間的設備可以有一種統一的通信方式,設備可以通過自動轉換、IP地址表和復合地址表三種方法進行節點號和IP地址的轉換。確定使用哪種轉換方法這一步是我們使用FINS首先要做的工作。接下來給大家簡單說一下這三種方式的區別。
自動轉換(Automatic Generation):顧名思義自動轉換為FINS節點號
IP地址表(IP Address Table):從INS節點之間的對應表轉換而來數字和IP地址。
復合地址表(Combined Method):引用IP地址表,如果IP地址未注冊接下來就從FINS轉換為節點號。
詳情見下圖
一般來說FINS的默認端口號是9600,如果不是就需要自行設置端口號,無論怎樣都要將所有以太網單元的設成相同的值。
一般來說,我們認為FINS幀屬於鏈路層,歐姆龍所有產品都支持FINS/UDP方式傳輸,這種方式有着較快的傳輸速度,這是因為UDP協議是一種無連接協議,兩個節點之間傳輸的時候節點間沒有明確連接的對等關系。還有一種方式是FINS/TCP,這種方式適用於CS1W-ETN21和CJ1W- ETN21兩種,我們通過將FINS作為UDP的數據區來利用TCP/IP協議進行傳輸,這種方式的好處是可靠性高。
FINS幀格式分析
FINS通信是通過交換FINS命令幀和其響應幀(有的沒有響應)進行的,命令幀和響應幀的都為FINS頭組成,用於存儲傳輸控制信息,分別存儲命令和響應信息。
下面我們來分別看一下命令幀和響應幀。
命令幀
首先來看一下命令幀的組成,如下圖
接下來就帶着大家一個個的來簡單分析一下。
FINS header:
ICF: 1字節,用來顯示框架信息。
RSV: 1字節,由系統保留,設置為00(十六進制)
GCT: 1字節,網關允許數量,設置為02(十六進制)
DNA: 1字節,目的網絡地址,用來指定目標節點網絡號,0為本地,01~7F是目標網絡
DA1: 1字節,目的節點地址,指定發送命令節點號,00為本地,01~7E是目標節點號,當 安裝多個網絡單元時,FF為廣播編號。
DA2:1字節,目的單位地址,指定目標節點的單元編號,00本地,10~1F是CPU總線單元,E1內板,FE已聯網
SNA:1字節,源網絡地址,指定源節點所在網絡號,00本地,01~7F,網絡號
SA1:1字節,源節點地址,同上
SA2:1字節,源單元地址,同上
SID:1字節,服務編號,標識生成傳輸過程,設置00~FF所需數字,響應中返回相同數字來匹配命令和響應。
FINS command:
MRC: 1字節,主要請求代碼
SRC:1字節,子請求代碼
FINS parameter/data
data field: 最大2000字節,命令參數和數據,長度取決於MRC和SRC。
響應幀
還是先看一下組成圖
我們可以發現,命令幀和響應幀的區別不大,在於FINScommand以下部分,我們來看一下。
MRES:1字節,主響應代碼
SRES:1字節,子響應代碼
Data:最大1998字節,有些數據長度為0。
為什么響應幀的最大值要比命令幀少兩個字節呢,原因在於響應幀的MRES、SRES和data合一起組成了FINS數據域,而命令幀的FINS數據域是由Data值獨自組成的。
下面是我找到的FINS功能碼供大家查詢。
FINS數據包分析
前面關於FINS協議的基本知識和組成介紹完畢了,下面帶大家一起來就FINS數據包來分析一下。
我們來看這個數據包,是由多種FINS命令組成的包。
我們隨便點開幾個數據包,發現他們的組成除了Command code和Data部分都是一樣的。接下來我們就具體看一下。
Omron header
我們從上面開始一步步往下分析
OMRON ICF Field:上面我們已經介紹過ICF的作用了,介紹框架信息,這個只占一個字節80,但里面有着網關位,數據類型位,響應設置位,
1 … …. =網關位:使用網關(0x01)
0 .. …. =數據類型位:不響應(0x00)
.0。…. =保留位0:0x00
..0 …. =保留位1:0x00
… 0 … =保留位2:0x00
…. 0 .. =保留的位3:0x00
….. 0 =保留的位4:0x00
… … 0 =響應設置位:需要響應(0x00)
我們看上面第一個1就代表着網關位使用網關(0x01),下面的0代表數據類型位不響應,后面跟着5個保留位,最后一位0代表着響應設置為響應。
保留位可以做的有如下幾條:0x00 網關計數:0x02 目標網絡地址:本地網絡(0x00) 目標節點號:SYSMAC NET / LINK(0x00) 目標單元地址:
PC(CPU)(0x00) 源網絡地址:本地網絡(0x00) 源節點號:SYSMAC NET / LINK(0x00) 源單元地址:PC(CPU)(0x00) 服務編號:0x7a 命令代碼:名稱刪除(0x2602)。
接下來Reserved和Gateway Count都是固定保留位就不仔細說了。
Destination network address:后面是Local network代表着本地網絡間,上文也提到過這里在不同網絡上的變化。
Destination node number:目標節點號,SYSMAC NET/LINK代表着光纖網,用集散控制SYMAC LINKT中型網。這里在命令幀的時候標記的是SYSMAC NET/LINK(0x00),但在響應幀的時候就是SYSMAC NET(0x63),但是在另一個數據包響應幀內容就和命令幀一樣,這點我也沒有找到答案,如果有了解的大佬希望能解答一下
Destination unit address:目的單位地址,由於這里都是本機模擬實驗,所以地址都是PC(CPU)
Service ID: 服務標識,由命令幀生成,在響應幀回應相同的值。
最后是Command CODE,這個是一個命令和響應包的最關鍵內容,有着內容和命令代碼。
Command Data
這部分就很好說了,就是命令或響應的內容。