Siemens Smart 200 PLC 通讯(基于python-)

xml 复制代码
import struct
import time
import snap7
from snap7.util import *


def plc_connect(ip, type, rack=0, slot=1):
   """
   连接初始化
   :param ip:
   :param type::param connection_type: 1 for PG, 2 for OP, 3 to 10 for S7 Basic
   :param rack: 通常为0  
   :param slot: 根据plc安装,一般为0或1
   :return:client
   """
   client = snap7.client.Client()
   client.set_connection_type(type)
   client.connect(ip, rack, slot)
   return client

def plc_con_close(client):
   """
   连接关闭
   :param client:
   :return:
   """
   client.disconnect()


def read_VB(client, offset):
   """ :param client: client
      :param offset: int 
      :returns: str.
   """
   vb_data = client.db_read(1, offset, 1)
   return vb_data[0]

def read_area(client, offset):
   """ :param client: client
      :param offset: int
      :returns: str.
   """
   i0_0 = client.read_area(snap7.types.Areas.I, 0, 1)
   # eb_data = .eb_read(10, 5)
   return i0_0


def read_I(client):
      """
        I输入状态区的读操作-------------bool
        :param byte:
        :param bit:
        :return:
        """
      data = client.read_area(snap7.types.Areas.PE, 0, 0 ,1) # i0.0的 一个字节
      print(get_bool(data, 0, 0)) # i0.0的 一个字节


def read_Q(client):
   """
    Q电磁线圈状态区的读操作-------------bool
    :param byte:
    :param bit:
    :return:
    """
   data = client.read_area(snap7.type.Areas.PA, 0, 0, 1)  # i0.0的 一个字节
   print(get_bool(data, 0, 0))  # i0.0的 一个字节


def write_VB(client, offset, data):
   """ :param client: client
      :param offset: int 
      :param data: str
   """
   data = int(data)
   temp = hex(int(data))[2:]
   if data < 0 or data > 255:
      print("请输入0-255之间的数")
   else:
      if data < 16:
         temp = "0"+ temp
      client.db_write(1, offset, bytes.fromhex(temp))
      # client.
      print("向寄存器VB"+str(offset)+"写入"+str(data)+"成功")

if __name__ == "__main__":

   client_fd = plc_connect('192.168.0.2', 2)
   print("connect success")   
   print(read_Q(client_fd))
   # write_VB(client_fd,0,210)
   plc_con_close(client_fd)

调试

通过设置plc软件中的Q0.0的程序,完成联通及状态读取

参考:https://python-snap7.readthedocs.io/en/latest/index.html

相关推荐
linuxxx11011 小时前
高考志愿填报辅助系统
redis·后端·python·mysql·ai·django·高考
Mintopia11 小时前
Trae Coding - 「Excel 秒变海报」—— 上传 CSV,一句话生成可打印信息图。
前端·人工智能·trae
无妄无望11 小时前
ragflow代码学习切片方式(1)docling_parser.py
人工智能·python·学习
醒过来摸鱼11 小时前
9.12 sinc插值
python·线性代数·算法·numpy
晴殇i11 小时前
CSS 相对颜色:告别 180 个颜色变量的设计系统噩梦
前端·css
MegatronKing11 小时前
Reqable 3.0版本云同步的实践过程
前端·后端·测试
李剑一11 小时前
我用Trae生成了一个Echarts 3D柱状图的Demo
前端·vue.js·trae
Crystal32811 小时前
3D实战案例(飞行的火箭/创建3D导航/翻书效果/创建长方体/环环相扣效果)
前端·css
6***x54511 小时前
前端组件库发展趋势,原子化CSS会成为主流吗
前端·css
00后程序员张11 小时前
接口调试从入门到精通,Fiddler抓包工具、代理配置与HTTPS抓包实战技巧
前端·ios·小程序·https·fiddler·uni-app·webview