Python Snap7实现S7-1200 PLC通信控制_python与西门子1200通讯-程序员宅基地

技术标签: python  plc  

介绍

​ Snap7 是一个基于以太网与S7系列的西门子PLC通讯的开源库,支持包括S7系列的S7-200、S7-200 Smart、S7-300、S7-400、S7-1200以及S7-1500的以太网通信。Snap 7支持python、C/C++、C#、labview等语言,其中最常用的当属它的python库——python-snap7

安装

​ python-snap7是python中的一个开放的功能包,所以使用前只需要直接用pip安装即可

pip install python-snap7

数据存储地址

python-snap7中定义的Areas字典

I Q M DB/V CT TM
0x81 0x82 0x83 0x84 0x1C 0x1D

使用教程

  1. 创建客户端实例
client = snap7.client.Client()
  1. 连接客户端
'''
@brief  连接客户端使用api
@param  address address是服务器的IP地址,如果使用NetToPLCsim
        连接PLCsim,则IP地址应该是计算机的IP地址
@param  rack     针对S7-1200此处应该是0
@param  slot     针对S7-1200此处应该是1
@param  tcpport     端口默认是102
'''
def connect(self, address, rack, slot, tcpport=102)
  1. PLC读取

获取PLC各个区的数值

'''
@brief  获取PLC各个区的数值
@param  area         PLC内各寄存区的代码
@param  dbnumber     dbnumber只针对DB块才有效
@param  start        start为寄存区起始地址
@param  size         size是读取数量
@return  bytearray类型
'''
def read_area(self, area, dbnumber, start, size)

不同类型所占字节大小

TypeSize = {
    'int': 2,  # 有符号(-32768~32767)
    'bool': 1,  # bool值
    'dint': 4,  # 有符号 (-2147483648~2147483647)
    'word': 2,  # 无符号(0~65536)
    'real': 4,  # 有符号 float类型(这范围记不住了)
    'dword': 4,  # 无符号(0~4294967295)
    'char': 1,  # CHAR,ASCII字符集,占用1个字节内存,主要针对欧美国家(字符比较少)
    'string': 255,  # STRING,占用256个字节内存,ASCII字符串,由ASCII字符组成
    's5time': 2,
    'wchar': 2,  # WCHAR,Unicode字符集,占用2个字节内存,主要针对亚洲国家(字符比较多)
    'wstring': 512,  # WSTRING,默认占用512个字节内存(可变),Unicode字符串,由Unicode字符构成
    'dt': 4,  # DateTime 日期
    'usint': 1,  # 0~255
    'sint': 1,  # -128~127
    'uint': 2,  # 0~4294967295
    'udint': 4,  # 0~4294967295
    'lreal': 8,
    'time': 4,
    'd': 2,
    'tod': 4,  # TOD (TIME_OF_DAY)数据作为无符号双整数值存储,被解释为自指定日期的凌晨算起的毫秒数(凌晨 = 0ms)。必须指定小时(24 小时/天)、分钟和秒。可以选择指定小数秒格式。
    'dtl': 12,  # DTL(日期和时间长型)数据类型使用 12 个字节的结构保存日期和时间信息。可以在块的临时存储器或者 DB 中定义 DTL 数据。
    'date': 2,  # Date(16位日期值)、
    'ltod': 8
}

读取字节数组中的布尔值

'''
@brief  读取字节数组中的布尔值
@param  _bytearray     读到的字节数组
@param  byte_index     字节的索引
@param  bool_index     布尔值的索引
@return  对应位的布尔类型
'''
def get_bool(_bytearray, byte_index, bool_index)
  1. PLC写入

写入PLC映像区

'''
@brief  写入PLC映像区
@param  area         PLC内各寄存区的代码
@param  dbnumber     dbnumber只针对DB块才有效
@param  start        start为寄存区起始地址
@param  data         bytearray类型,需要通过一个set_bool函数将传入的数据事先写好
@return  bytearray类型
'''
def write_area(self, area, dbnumber, start, data)

写入字节数组中的布尔值

'''
@brief  写入字节数组中的布尔值
@param  _bytearray     待写入的字节数组
@param  byte_index     字节的索引
@param  bool_index     位索引
@param  value          写入的布尔值
'''
def set_bool(_bytearray, byte_index, bool_index, value)

​ 由于写入要求的是dataarray类型,所以最快捷的方法是先使用read_area读取输出映像区的值,之后通过set_bool赋值,之后通过write_area传入输出映像区。代码示例:

def WriteOutput(dev, bytebit, value):
    #使用split分割bytebit,例如0.0,可以分割成byte = 0, bit = 0
    byte,bit = bytebit.split('.')
    byte,bit = int(byte), int(bit)

    #使用read_area读取输出映像区的值
    dataArray = dev.read_area(0x82, 0, byte, 1)
    #通过set_bool对dataArray赋值
    set_bool(dataArray, 0, bit, value)
    #过write_area将dataArray传入输出映像区
    dev.write_area(0x82, 0, byte, dataArray)

​ 通过这个函数,可以实现对指定的输出映像区进行写操作,接下来使用这个函数,对PLC内Q0.0-Q1.7共16个输出循环写入1和0。

参考

通过Python实现S7-1200输出控制

python 使用Snap7读写西门子S7系列PLC

后续

 喜欢的话可以关注一下我的公众号技术开发小圈,尤其是对深度学习以及计算机视觉有兴趣的朋友,我会把相关的源码以及更多资料发在上面,希望可以帮助到新入门的大家!
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Rosen_er/article/details/123474247

智能推荐

Python股票量化投资课学习—单均线双均线策略_python股票量化投资课程-程序员宅基地

文章浏览阅读1.2k次。当前天的15日均价大于昨天的15日均价,且昨天的15日均价小于今天的15日均价时,出现买入信号。# 当前天的15日均价小于昨天的15日均价,且昨天的15日均价大于今天的15日均价时,出现卖出信号。# 买入信号出现时,发送买入指令,系统自动执行买入交易。# 卖出信号出现时,发送卖出指令,系统自动执行卖出交易。# 卖出信号出现时,发送卖出指令,系统自动执行卖出交易。# 买入信号出现时,发送买入指令,系统自动执行买入交易。# 判断是否持仓,如果持仓,则判断是否是否卖出信号。具体内容:金叉买进死叉卖出。..._python股票量化投资课程

学习SQL Server这一篇就够了_学习sql server这一篇就够了_轻松的小希的博客-csdn博客_sql server学习-程序员宅基地

文章浏览阅读5.4w次,点赞525次,收藏3.3k次。目录第一章 数据库概述1.1、数据库的好处1.2、数据库的常见概念1.3、数据库的存储特点1.4、数据库的常见分类1.5、SQL语言的分类第二章 SQL Server概述2.1、SQL Server的概述2.2、SQL Server的下载2.3、SQL Server的安装2.4、SQL Server的第一种连接2.5、SQL Server的第二种连接2.6、SQL Server的连接说明第三章 SQL Server数据库管理3.1、创建数据库3.1.1、界面方式3.1.2、命令方式3.2、修改数据库3.2._学习sql server这一篇就够了_轻松的小希的博客-csdn博客_sql server学习

输入关键字生成对联_自动对联工具-程序员宅基地

文章浏览阅读3k次。鼠年春节临近,来试试新的基于 GPT2-Chinese 自动对联系统:自动写对联(输入开头进行对联自动生成)和自动对对联(输入上联自动写下联)。老的自动对联功能是去年基于深度学习机器翻译模型上线的一个自动对对联的对话模块:风云三尺剑,花鸟一床书---对联数据集和自动对联机器人。这一年来,以BERT为代表的预训练模型不断推陈出新,席卷整个自然语言处理(NLP)领域,这其中NLP的难题之一自然语言生成..._输入首字 对联

matplotlib——折线图(改变横坐标_matplotlib 横坐标单位-程序员宅基地

文章浏览阅读1.8w次,点赞7次,收藏33次。>改变横坐标的刻度:#建立一个x轴(1,20),y轴随机产生的折线图fig = plt.figure(figsize=(20,8), dpi=100)x= range(1, 21)#x 轴数据y = [random.randint(1,21) for i in range(1,21)]#y 轴数据plt.plot(x, y)#将x的刻度按一个单位来表示plt.xticks(..._matplotlib 横坐标单位

物联网Coap框架 ------- Californium结构分析-程序员宅基地

文章浏览阅读555次。一.Calinfornium简介Californium 是一款基于Java实现的Coap技术框架,该项目实现了Coap协议的各种请求响应定义,支持CON/NON不同的可靠性传输模。在同等的Coap协议的技术实现中,Calinfornium框架在众多框架中以性能最优。如下:二.Californium的项目结构目前Californium 项目的托管地址在:http..._[pserver(main)#5] o.e.californium.core.network.udpmatcher : error receiving

PHP的getimagesize读取远程图片慢的解决方法_php getimagesize远程图片-程序员宅基地

文章浏览阅读238次。PHP的getimagesize读取远程文件,使用的方法本质上跟file_get_contents一样,所以都会出现非常耗时的情况。_php getimagesize远程图片

随便推点

虚拟机内存管理之内存分配器_申请16字节的内存 20字节的内存-程序员宅基地

文章浏览阅读1.9k次。本文意在通过深入剖析常用的内存分配器的关键实现,以理解虚拟机动态内存管理的设计哲学,并为实现虚拟机高效的内存管理提供指引。_申请16字节的内存 20字节的内存

Java寒假学习总结_java寒假学习报告-程序员宅基地

文章浏览阅读8k次,点赞7次,收藏2次。一、寒假学习内容:与C语言类似基础学习:数据类型划分、基本数据类型、数据类型转换、运算符、表达式与语句、选择与循环语句、数组的定义及使用、方法的声明及使用,数组引用传递面向对象编程:类与对象、封装性、构造方法、匿名对象、String类引用传递及基本类型、this关键字、static关键字..._java寒假学习报告

进程控制_进程控制问题-程序员宅基地

文章浏览阅读667次。本篇博客简要说明以下几个问题:进程切换,内核如何实现进程间切换?进程创建,用户要创建新进程,如何创建呢?进程加载,如何运行一个新进程?进程等待与退出,父子进程的交互进程切换:进程切换实际上是上下文的切换。暂停当前运行的进程,从运行态变成其他状态;调度另一个进程从就绪态变成运行态。进程切换的要求是 切换前保存进程上下文,切换后恢复进程上下文(上下文:主要指寄存器中的信息),快速切换进..._进程控制问题

Python必备基本技能——命令行参数args详解_python args.参数-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏7次。这篇博客将介绍一项开发人员、工程师和计算机科学家必备的技能——命令行参数(原理及使用)。 依赖argparse库,可以pip安装。vars会将命令行参数解析成字典,argparse Python 库在解析过程中用下划线替换破折号(若命令行参数中有中划线 “-” 需要用下划线 “_” 解析。)_python args.参数

3个实例教你如何在互联网上查找专业资料-程序员宅基地

文章浏览阅读377次。http://www.9238.net/  这是一个知识爆炸的时代,你被逼着比你的祖辈更快地、不停地学习掌握更多更新的知识,否则你随时会被时代抛弃在后面。幸运的是这也是一个工具无比强大的e时代,有更多更好的工具帮助你学习和掌握新知识,互联网就是其中之一。互联网的强大威力并不只是能够让你看看新闻,与一个不认识也不知道在那里的人聊聊天,它还能够帮你学习知识,解决问题。    作为国..._专业资料怎么查

python pandas dataframe 行列选择,切片操作_pandas 切片操作-程序员宅基地

文章浏览阅读10w+次,点赞22次,收藏91次。python pandas dataframe 行列选择,切片操作_pandas 切片操作

推荐文章

热门文章

相关标签