Python通過S7協議與S7-1200通信實現

Snap7是一個用於處理S7以太網協議,與西門子S7系列PLC通訊的開源通訊組件。支持與S7-200、S7-200 Smart、S7-300、S7-400、S7-1200以及S7-1500的以太網通信。

 

網絡上有一個基於Snap7開發的Python開源庫python-snap7,下面就具體介紹利用Python實現與S7-1200的通信。

 

1.安裝開源庫 python-snap

 

 

2. PLC端準備

IP地址設置,與PC同一網段;

注:本例使用TIA V13

 

3. Python程序開發

 

主要通過read_area和write_area兩個函數實現對PLC數據的讀寫

 

讀取M位存儲區數據:

read_area(area,dbnumber,start,size)

area:

area參數用於區分I、Q、M、DB存儲區:

areas = ADict({
  'PE': 0x81,  #input 輸入區
  'PA': 0x82,  #output 輸出區
  'MK': 0x83,  #bit memory 中間存儲區(M區)
  'DB': 0x84,  #DB區
  'CT': 0x1C,  #counters
  'TM': 0x1D,  #Timers
})

dnumber:0

start:起始地址

size:讀取長度

下圖舉例讀取S7-1200 %MW2的數據;

 

寫M位存儲區數據:

write_area(self, area, dbnumber, start, data)

area:0x83;

dnumber:0

start:起始地址

data:數據

 

import snap7
from snap7.util import *  #對位操作的函數要導入該庫
import time

client = snap7.client.Client()
# IP地址,機架,槽位
client.connect('192.168.0.1',0,1)

#測試是否通訊成功
if client.get_connected():
    print('連接成功')
else:
    print('連接失敗')


a = bytearray(2)  # 定義一個包含兩個字節類型的數組
a[0]=0x08

a[1]=0x02

#往M區起始爲2的地址寫入數據a

client.write_area(0x83,0,2,a)

 

 

還有一種方法,先讀取需要修改的數據,然後通過set方法修改其值,最後通過write_area寫入,這樣就不必按字節寫入了。

 

res = client.read_area(0x83,0,0,2)
set_int(res,0,128)    # 128是寫入的值
client.write_area(0x83,0,0,res)

 

最後分享一個跑馬燈視頻:

 

 

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