chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python 通過S7協(xié)議讀取PLC數(shù)據(jù)

虹喵小仙女 ? 來源:jf_40637039 ? 作者:jf_40637039 ? 2023-05-28 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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區(qū)
        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協(xié)議工具類

s7_utils.py

import snap7
from snap7.util import *
?
PLCArray = []
?
## 連接PLC 加入數(shù)組
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"連接狀態(tài): {ip} 連接失敗")
        return 0
    
    print(f"連接狀態(tài):{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
?
## 關(guān)閉所有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設(shè)置為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設(shè)置為0
    :param dbnum: DB塊的序號
    :param dblength:
    :return: 字節(jié)長度,根據(jù)需要設(shè)定
    """
    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區(qū)的讀操作--------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區(qū)的讀操作--------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)
?
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 西門子
    +關(guān)注

    關(guān)注

    98

    文章

    3272

    瀏覽量

    119755
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2863

    瀏覽量

    45368
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    S7 PLC TCP/IP協(xié)議參考LABVIEW實例

    通過以太網(wǎng)與S7-300系列PLC通信,不需要適配器。該示例提供了一個API,用于讀取/寫入PLC上的寄存器。[tr]據(jù)我所知,西門子從未公
    發(fā)表于 02-15 23:51

    S7通信協(xié)議詳解

    這是S7-1200與S7-200 Smart系列PLCS7通信教程的第1篇文章。本章我們打算和大家聊聊西門子的S7通信
    發(fā)表于 12-30 07:47

    S7通訊的功能及特點

    S7通訊(S7-communication)主要英語S7-400/400、S7-400/300 PLC之間的通訊,是
    發(fā)表于 09-29 15:16 ?19次下載
    <b class='flag-5'>S7</b>通訊的功能及特點

    通過MPI建立OPC服務(wù)器與S7-200 PLC集成口的S7連接

    通過MPI建立OPC服務(wù)器與S7-200 PLC集成口的S7連接方式說明。
    發(fā)表于 05-07 09:24 ?5次下載

    基于PROFIBUS總線的S7單邊通信

    S7協(xié)議是SIEMENS S7系列產(chǎn)品之間通訊使用的標(biāo)準(zhǔn)協(xié)議 ,其優(yōu)點是通信雙方無論是在同一MPI總線上、同一PROFIBUS總線上或同一工業(yè)以太網(wǎng)中,都可
    的頭像 發(fā)表于 08-10 10:06 ?2921次閱讀
    基于PROFIBUS總線的<b class='flag-5'>S7</b>單邊通信

    Python Snap7實現(xiàn)S7-1200 PLC通信控制

    Snap7 是一個基于以太網(wǎng)與S7系列的西門子PLC通訊的開源庫,支持包括S7系列的S7-200、S7
    發(fā)表于 04-17 14:19 ?1次下載
    <b class='flag-5'>Python</b> Snap<b class='flag-5'>7</b>實現(xiàn)<b class='flag-5'>S7</b>-1200 <b class='flag-5'>PLC</b>通信控制

    C#使用西門子S7協(xié)議讀寫PLC DB塊

    是我們上位機要讀寫的DB ?3. 根據(jù)西門子S7 協(xié)議文檔讀取DB塊的方式有很多種,直接根據(jù)該DB的偏移量進行讀寫也行,但讀或?qū)?b class='flag-5'>數(shù)據(jù)都需要進行對應(yīng)的
    發(fā)表于 04-19 10:05 ?24次下載
    C#使用西門子<b class='flag-5'>S7</b><b class='flag-5'>協(xié)議</b>讀寫<b class='flag-5'>PLC</b> DB塊

    python使用Snap7讀寫西門子S7系列PLC

    Snap7是一個基于s7通信協(xié)議的開源軟件包,作者是Davide Nardella,該軟件包封裝了S7通信的底層協(xié)議,可使用普通電腦
    發(fā)表于 04-20 10:45 ?7次下載
    <b class='flag-5'>python</b>使用Snap<b class='flag-5'>7</b>讀寫西門子<b class='flag-5'>S7</b>系列<b class='flag-5'>PLC</b>

    S7通信協(xié)議介紹 s7協(xié)議和profinet協(xié)議區(qū)別

    S7協(xié)議和Profinet協(xié)議都是工業(yè)自動化領(lǐng)域中常用的通信協(xié)議,其中S7協(xié)議是傳統(tǒng)的工控領(lǐng)域常
    發(fā)表于 05-08 16:19 ?2.8w次閱讀

    干貨分享:宏集物聯(lián)網(wǎng)HMI通過S7 MPI協(xié)議采集西門子400PLC數(shù)據(jù)

    宏集物聯(lián)網(wǎng)HMI集成了多個驅(qū)動來適配西門子200、300、400、1200、1500、LOGO等系列PLC,本文主要介紹宏集HMI通過S7 MPI協(xié)議采集西門子400
    的頭像 發(fā)表于 06-13 13:39 ?1630次閱讀
    干貨分享:宏集物聯(lián)網(wǎng)HMI<b class='flag-5'>通過</b><b class='flag-5'>S7</b> MPI<b class='flag-5'>協(xié)議</b>采集西門子400<b class='flag-5'>PLC</b><b class='flag-5'>數(shù)據(jù)</b>

    西門子S7協(xié)議與TCP協(xié)議的區(qū)別

    在工業(yè)自動化領(lǐng)域,通信協(xié)議的選擇對于確保設(shè)備間的順暢通信和數(shù)據(jù)的可靠傳輸至關(guān)重要。西門子S7協(xié)議和TCP協(xié)議作為兩種常用的通信
    的頭像 發(fā)表于 06-19 15:54 ?8385次閱讀

    宏集物聯(lián)網(wǎng)工控屏通過 S7 ETH 協(xié)議采集西門子 1200 PLC 數(shù)據(jù)

    上周我們分享了宏集HMI通過S7 MPI協(xié)議采集西門子400 PLC數(shù)據(jù)的操作步驟。本周,我們將繼續(xù)帶來干貨,重點介紹宏集HMI如何
    的頭像 發(fā)表于 06-21 16:02 ?1665次閱讀
    宏集物聯(lián)網(wǎng)工控屏<b class='flag-5'>通過</b> <b class='flag-5'>S7</b> ETH <b class='flag-5'>協(xié)議</b>采集西門子 1200 <b class='flag-5'>PLC</b> <b class='flag-5'>數(shù)據(jù)</b>

    S7協(xié)議讀取西門子S7-200 Smart PLC數(shù)據(jù)

    西門子S7-200 Smart PLC因其穩(wěn)定性和易用性而廣泛應(yīng)用。通過使用S7協(xié)議,可以實現(xiàn)對PLC
    的頭像 發(fā)表于 07-11 11:55 ?1.4w次閱讀
    <b class='flag-5'>S7</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>讀取</b>西門子<b class='flag-5'>S7</b>-200 Smart <b class='flag-5'>PLC</b><b class='flag-5'>數(shù)據(jù)</b>

    西門子 S7 通信協(xié)議大揭秘

    什么是S7協(xié)議 有網(wǎng)友說,如果 S7 是一輛汽車,它可能看起來像這樣: 實際上,西門子S7協(xié)議是西門子集團專為旗下
    的頭像 發(fā)表于 08-12 14:21 ?2435次閱讀
    西門子 <b class='flag-5'>S7</b> 通信<b class='flag-5'>協(xié)議</b>大揭秘

    鋇錸技術(shù)BL118 Node-Red邊緣計算網(wǎng)關(guān)西門子PLC S7協(xié)議使用方法

    一、概述 node-red-contrib-s7用于與 Siemens S7 PLC 交互的 Node-RED 節(jié)點。S7數(shù)據(jù)
    的頭像 發(fā)表于 12-03 16:48 ?484次閱讀
    鋇錸技術(shù)BL118 Node-Red邊緣計算網(wǎng)關(guān)西門子<b class='flag-5'>PLC</b> <b class='flag-5'>S7</b><b class='flag-5'>協(xié)議</b>使用方法