• 正文
    • 一、了解FINS協(xié)議
    • 二、簡(jiǎn)單了解官方文檔
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

python實(shí)現(xiàn)FINS協(xié)議的TCP服務(wù)端(篇一)

2024/12/07
4650
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

python實(shí)現(xiàn)FINS協(xié)議的TCP服務(wù)端是一件稍微麻煩點(diǎn)的事情。它不像modbusTCP那樣,可以使用現(xiàn)成的pymodbus模塊去實(shí)現(xiàn)。但是,我們可以根據(jù)協(xié)議幀進(jìn)行組包,自己去實(shí)現(xiàn)幀的格式,而這一切可以基于socket模塊。本文為第一篇。

一、了解FINS協(xié)議

參考文檔:FinsTCP協(xié)議報(bào)文詳細(xì)分析 - 知乎

1、什么是FINS協(xié)議

FINS(Factory Interface Network Service)是歐姆龍(Omron)工業(yè)自動(dòng)化設(shè)備使用的通信協(xié)議,這表明我們需要查閱官方文檔來(lái)實(shí)現(xiàn)這個(gè)協(xié)議,而該協(xié)議具有以下特點(diǎn):

高效性: FINS協(xié)議是為了在工業(yè)自動(dòng)化環(huán)境中實(shí)現(xiàn)高效通信而設(shè)計(jì)的,具有較低的通信延遲和高速數(shù)據(jù)傳輸能力。

靈活性: FINS協(xié)議支持多種通信方式,包括串行通信、以太網(wǎng)通信等,可以適應(yīng)不同的網(wǎng)絡(luò)環(huán)境和硬件設(shè)備。

多功能性: FINS協(xié)議支持多種通信功能,包括讀寫(xiě)PLC的數(shù)據(jù)、控制PLC的操作、監(jiān)控PLC的狀態(tài)等,提供了豐富的通信能力。

可靠性: FINS協(xié)議具有良好的錯(cuò)誤檢測(cè)和糾正機(jī)制,確保通信數(shù)據(jù)的可靠性和完整性。

擴(kuò)展性: FINS協(xié)議支持多種數(shù)據(jù)類型和數(shù)據(jù)格式,可以滿足不同應(yīng)用場(chǎng)景下的需求,具有較強(qiáng)的擴(kuò)展性。

標(biāo)準(zhǔn)化: FINS協(xié)議是歐姆龍PLC的標(biāo)準(zhǔn)通信協(xié)議,得到了廣泛應(yīng)用和認(rèn)可,在工業(yè)自動(dòng)化領(lǐng)域具有一定的標(biāo)準(zhǔn)性和通用性。

易用性: FINS協(xié)議的通信指令相對(duì)簡(jiǎn)單,易于理解和實(shí)現(xiàn),使得工程師能夠快速開(kāi)發(fā)和部署與歐姆龍PLC通信的應(yīng)用程序。

2、FINS TCP與TCP的關(guān)系

FINS TCP(Factory Interface Network Service over TCP/IP)是FINS協(xié)議在TCP/IP網(wǎng)絡(luò)上的實(shí)現(xiàn)方式。它是FINS協(xié)議的一種變體,使用TCP/IP作為傳輸層協(xié)議,用于在工業(yè)自動(dòng)化系統(tǒng)中實(shí)現(xiàn)設(shè)備之間的通信。

TCP(Transmission Control Protocol)是互聯(lián)網(wǎng)上的一種通信協(xié)議,它是面向連接、可靠的、基于字節(jié)流的傳輸層協(xié)議。TCP提供了數(shù)據(jù)的可靠傳輸,確保數(shù)據(jù)在傳輸過(guò)程中不會(huì)丟失或損壞。TCP協(xié)議在網(wǎng)絡(luò)通信中廣泛應(yīng)用,用于建立可靠的、穩(wěn)定的數(shù)據(jù)傳輸連接。

FINS TCP是在TCP協(xié)議的基礎(chǔ)上實(shí)現(xiàn)的FINS協(xié)議,它使用TCP連接來(lái)傳輸FINS協(xié)議的數(shù)據(jù)。在FINS TCP中,F(xiàn)INS幀(Frame)被封裝在TCP報(bào)文中進(jìn)行傳輸。FINS幀包含了FINS協(xié)議的控制信息和數(shù)據(jù)內(nèi)容,通過(guò)TCP連接傳輸?shù)侥繕?biāo)設(shè)備,然后在目標(biāo)設(shè)備上進(jìn)行解析和處理。

FINS TCP的使用使得在工業(yè)自動(dòng)化系統(tǒng)中,不同設(shè)備(如PLC、傳感器、HMI等)之間可以通過(guò)TCP/IP網(wǎng)絡(luò)進(jìn)行可靠的通信。這種通信方式廣泛應(yīng)用于現(xiàn)代工廠自動(dòng)化系統(tǒng)中,為設(shè)備間的數(shù)據(jù)交換提供了高效、可靠的解決方案。

這也是為什么我們可以通過(guò)socket模塊來(lái)實(shí)現(xiàn)的原因。

3、TCP的三次握手+一次FINS握手

(1)握手請(qǐng)求

46494E53?0000000C?00000000?00000000?00000000

"46494E53":ASCII編碼,表示"FINS",表明這是一個(gè)FINS協(xié)議的數(shù)據(jù)幀。

"0000000C":指示后面跟隨的字節(jié)長(zhǎng)度,即12字節(jié)。

"00000000":固定命令部分,通常為零。

"00000000":錯(cuò)誤代碼,通常為零,表示沒(méi)有錯(cuò)誤。

"00000000":PC節(jié)點(diǎn)IP地址,當(dāng)設(shè)置為0時(shí),通常表示會(huì)自動(dòng)獲取節(jié)點(diǎn)IP。

這個(gè)指令是一個(gè)典型的FINS TCP握手指令,用于建立FINS通信連接。在該指令中,"46494E53"表示"FINS",指示這是一個(gè)FINS數(shù)據(jù)幀。接著,"0000000C"表示后續(xù)數(shù)據(jù)的長(zhǎng)度為4字節(jié)。然后,"00000000"和"00000000"分別表示固定命令和錯(cuò)誤代碼,通常為零。最后,"00000000"表示PC節(jié)點(diǎn)的IP地址,當(dāng)設(shè)置為0時(shí),表示會(huì)自動(dòng)獲取節(jié)點(diǎn)IP。

(2)握手響應(yīng)

46494E53?00000010?00000000?00000000?00000001 00000001

  • "46494E53":ASCII編碼,表示"FINS",指示這是一個(gè)FINS協(xié)議的數(shù)據(jù)幀。
  • "00000010":指示后面跟隨的字節(jié)長(zhǎng)度,即16字節(jié)。
  • "00000001":固定命令部分,通常為1,表示這是一個(gè)特定類型的FINS命令。
  • "00000000":錯(cuò)誤代碼,通常為零,表示沒(méi)有錯(cuò)誤。
  • "00000001":本機(jī)電腦的節(jié)點(diǎn)IP地址。
  • "00000001":PLC節(jié)點(diǎn)的IP地址。

4、請(qǐng)求包(讀保持寄存器)

(1)包

46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 01 00 00 01 00 3D 01 01 82 00 64 00 00 01

(2)解釋

Header:46 49 4E 53 固定值

Length:00 00 00 1A 包的長(zhǎng)度

Command:00 00 00 02 固定值

Error Code:00 00 00 00 固定值

ICF:固定值80

RSV:固定值00

GCT:固定值02

DNA:目標(biāo)網(wǎng)絡(luò)號(hào)00

DA1:目標(biāo)節(jié)點(diǎn)號(hào)01

DA2:目標(biāo)單元號(hào)00

SNA:源網(wǎng)絡(luò)號(hào)00

SA1:源節(jié)點(diǎn)號(hào)01

SA2:源單元號(hào)00

SID:3D?

MRC:主請(qǐng)求碼,固定值01

SRC:次請(qǐng)求碼,固定值01

Area:82,不同存儲(chǔ)區(qū)對(duì)應(yīng)不同值,表示保持寄存器

Address:00 64 00,起始地址+位地址

Length:讀取長(zhǎng)度01

5、響應(yīng)包(讀保持寄存器)

(1)包

46 49 4E 53 00 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 01

(2)解釋

Header:46 49 4E 53 固定值

Length:00 00 00 18 包的長(zhǎng)度

Command:00 00 00 00 固定值

Error Code:00 00 00 00 固定值

ICF:00

RSV:00

GCT:00

DNA:00

DA1:00

DA2:00

SNA:00

SA1:00

SA2:00

SID:00

MRC:01

SRC:01

Error Code:00 00

Value:00 01 (因?yàn)檎?qǐng)求中的Length:讀取長(zhǎng)度01,因此為L(zhǎng)ength*2)

6、請(qǐng)求包(寫(xiě)保持寄存器)

(1)包

46 49 4E 53 00 00 02 30 00 00 00 02 00 00 00 00 80 00 02 00 01 00 00 01 00 3E 01 02 82 03 EC 00 01 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

(2)解釋

Header:46 49 4E 53 固定值

Length:00 00 02 30 包的長(zhǎng)度

Command:00 00 00 02 固定值

Error Code:00 00 00 00 固定值

ICF:固定值80

RSV:固定值00

GCT:固定值02

DNA:目標(biāo)網(wǎng)絡(luò)號(hào)00

DA1:目標(biāo)節(jié)點(diǎn)號(hào)01

DA2:目標(biāo)單元號(hào)00

SNA:源網(wǎng)絡(luò)號(hào)00

SA1:源節(jié)點(diǎn)號(hào)01

SA2:目標(biāo)單元號(hào)00

SID:源網(wǎng)絡(luò)號(hào) 3E(也可能是其他)

MRC:01

SRC:02

Area:82

Address:03 EC 00

length:01 0B

value:...

7、響應(yīng)包(寫(xiě)保持寄存器)

(1)包

46 49 4E 53 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 02 00 00

(2)解釋

Header:46 49 4E 53 固定值

Length:00 00 00 16 包的長(zhǎng)度

Command:00 00 00 00 固定值

Error Code:00 00 00 00 固定值

ICF:00

RSV:00

GCT:00

DNA:00

DA1:00

DA2:00

SA1:00

SA2:00

SID:00

MRC:01

SRC:01

Error Code:00 00

二、簡(jiǎn)單了解官方文檔

1、實(shí)驗(yàn)系統(tǒng)

2、PLC網(wǎng)絡(luò)設(shè)置

3、握手信號(hào)請(qǐng)求

4、命令格式

5、ICF 數(shù)據(jù)格式

6、使用 0101 代碼讀取 D0 D1 數(shù)據(jù)

7、使用 0102 代碼寫(xiě) D100 數(shù)據(jù)

8、握手信號(hào)響應(yīng)

9、使用 0101 代碼讀取 D0 D1 數(shù)據(jù)的響應(yīng)

10、使用 0102 寫(xiě) D100 數(shù)據(jù)的響應(yīng)

相關(guān)推薦