python下載snap7模塊
pip3 install python-snap7
測試程序
demo.py
import snap7
import s7_utils
?
?
def connectPLC():
s7_utils.S7_200_Connect('192.168.1.2', 3, 0, 1, "1#PLC")
s7_utils.S7_200_Connect('192.168.1.3', 3, 0, 1, "2#PLC")
s7_utils.S7_200_Connect('192.168.1.4', 3, 0, 1, "3#PLC")
s7_utils.S7_200_Connect('192.168.1.5', 3, 0, 1, "4#PLC")
s7_utils.S7_200_Connect('192.168.1.6', 3, 0, 1, "5#PLC")
?
def getAllPLCData():
for bzplc in s7_utils.PLCArray:
plcobj = bzplc["plcObj"]
## 讀取DB塊
V = s7_utils.dbRead(plcobj, bool, 1, 200, 0, 4, 1)
PV = s7_utils.dbRead(plcobj, float, 1, 300, 0, 4, 0)、
## 讀取M區
bj1 = s7_utils.mReadBool(plcobj,1,4)
bj2 = s7_utils.mReadBool(plcobj,1,3)
bj3 = s7_utils.mReadBool(plcobj,1,2)
bj4 = s7_utils.mReadBool(plcobj,1,1)
?
print(bzplc["name"]+"\\n","電壓:",V,"頻率",PV,"報警1",bj1,"報警2",bj2,"報警3",bj3,"報警4",bj4)
?
connectPLC()
getAllPLCData()
?
s7_utils.S7_200_DisconnectAll()
S7協議工具類
s7_utils.py
import snap7
from snap7.util import *
?
PLCArray = []
?
## 連接PLC 加入數組
def S7_200_Connect(ip, type, rack, slot, name):
plcObj = snap7.client.Client()
plcObj.disconnect()
plcObj.set_connection_type(type)
?
?
try:
plcObj.connect(ip, rack, slot)
except:
print(f"連接狀態: {ip} 連接失敗")
return 0
print(f"連接狀態:{plcObj.get_connected()}{ip} 連接成功")
?
saveData = {
"plcObj": plcObj,
"name": name,
"ip": ip
}
?
PLCArray.append(saveData)
return 1
?
def S7_200_getplcObj(ip):
for plc in PLCArray:
if plc["ip"] == ip:
return plc["plcObj"]
return 1
?
## 關閉所有PLC連接
def S7_200_DisconnectAll():
for plc in PLCArray:
# print(plc)
if plc["plcObj"] != None:
plc["plcObj"].disconnect()
return 1
?
## 讀取DB塊
def dbRead(plcObj, type, dbnum, startAddress, address, dblength, boolX):
"""
DB塊的讀操作;如果是200smart系列的將dbnum設置為0
:param dbnum: DB1
:param dblength:
:return:
"""
data = plcObj.read_area(snap7.types.Areas.DB, dbnum, startAddress, dblength)
?
# print(data)
?
if type == int:
return get_int(data, address)
elif type == bool:
return get_bool(data, address, boolX)
elif type == str:
return get_dword(data, address)
elif type == float:
return get_real(data, address)
elif type == bytes:
return get_byte(data, address)
else:
return None
## 寫DB塊
def dbWrite(plcObj, type, data, dbnum, startAddress, dblength, address):
"""
DB塊的寫操作;如果是200smart系列的將dbnum設置為0
:param dbnum: DB塊的序號
:param dblength:
:return: 字節長度,根據需要設定
"""
data = plcObj.read_area(snap7.types.Areas.DB, dbnum, startAddress, dblength)
?
if type == int:
set_int(data, address, data)
elif type == bool:
set_bool(data, address, 0, data)
elif type == str:
set_dword(data, address, data)
elif type == float:
set_real(data, address, data)
elif type == bytes:
set_byte(data, address, data)
else:
return None
plcObj.write_area(snap7.types.Areas.DB, dbnum, startAddress, data)
?
def mReadBool(plcObj, num, bit):
"""
M區的讀操作--------bool
:param num:
:param bit:
:return:
"""
data = plcObj.read_area(snap7.types.Areas.MK, 0, num, 1)
?
# print(data)
?
return get_bool(data, 0, bit)
def mRead(plcObj, type, num):
"""
M區的讀操作--------int/word/dint/dword
:param num:
:return:
"""
data = plcObj.read_area(snap7.types.Areas.MK, 0, num, 2)
?
?
if type == int:
get_int(data, 0)
elif type == bool:
get_byte(data, 0)
elif type == "dint":
get_dint(data, 0)
else:
return None
def mWriteBool(plcObj, byte, bit, value):
"""
M塊的寫操作---------bool
:param byte:
:param bit:
:param value:
:return:
"""
data = plcObj.read_area(snap7.types.Areas.MK, 0, byte, 1)
set_bool(data, 0, bit, value)
plcObj.write_area(snap7.types.Areas.MK, 0, byte, data)
def mWrite2(plcObj, byte, value):
"""
M塊的寫操作---------int/word/dint/dword
:param byte:
:param value:
:return:
"""
data = plcObj.read_area(snap7.types.Areas.MK, 0, byte, 4)
# set_int(data, 0, value)
set_dint(data, 0, value)
plcObj.write_area(snap7.types.Areas.MK, 0, byte, data)
?
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
西門子
+關注
關注
94文章
3062瀏覽量
116281 -
鴻蒙
+關注
關注
57文章
2392瀏覽量
42980
發布評論請先 登錄
相關推薦
S7 PLC TCP/IP協議參考LABVIEW實例
通過以太網與S7-300系列PLC通信,不需要適配器。該示例提供了一個API,用于讀取/寫入PLC上的寄存器。[tr]據我所知,西門子從未公
發表于 02-15 23:51
Python Snap7實現S7-1200 PLC通信控制
Snap7 是一個基于以太網與S7系列的西門子PLC通訊的開源庫,支持包括S7系列的S7-200、S7
發表于 04-17 14:19
?1次下載
C#使用西門子S7協議讀寫PLC DB塊
是我們上位機要讀寫的DB ?3. 根據西門子S7 協議文檔讀取DB塊的方式有很多種,直接根據該DB的偏移量進行讀寫也行,但讀或寫數據都需要進行對應的
發表于 04-19 10:05
?21次下載
python使用Snap7讀寫西門子S7系列PLC
Snap7是一個基于s7通信協議的開源軟件包,作者是Davide Nardella,該軟件包封裝了S7通信的底層協議,可使用普通電腦
發表于 04-20 10:45
?4次下載
S7通信協議介紹 s7協議和profinet協議區別
S7協議和Profinet協議都是工業自動化領域中常用的通信協議,其中S7協議是傳統的工控領域常
發表于 05-08 16:19
?2.6w次閱讀
干貨分享:宏集物聯網HMI通過S7 MPI協議采集西門子400PLC數據
宏集物聯網HMI集成了多個驅動來適配西門子200、300、400、1200、1500、LOGO等系列PLC,本文主要介紹宏集HMI通過S7 MPI協議采集西門子400
西門子S7協議與TCP協議的區別
在工業自動化領域,通信協議的選擇對于確保設備間的順暢通信和數據的可靠傳輸至關重要。西門子S7協議和TCP協議作為兩種常用的通信
宏集物聯網工控屏通過 S7 ETH 協議采集西門子 1200 PLC 數據
上周我們分享了宏集HMI通過S7 MPI協議采集西門子400 PLC數據的操作步驟。本周,我們將繼續帶來干貨,重點介紹宏集HMI如何
西門子S7協議PLC數據采集到MQTT物聯網平臺 ?
,廣泛應用于各種工業控制場合。而MQTT(消息隊列遙測傳輸)物聯網平臺則以其高效的消息傳輸機制和數據處理能力,為物聯網設備提供了強大的連接、管理和數據處理服務。 對此,物通博聯提供基于工業智能網關實現西門子S7
評論