介绍

​ 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 = 0byte,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

后续

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

Python Snap7实现S7-1200 PLC通信控制相关推荐

  1. S7 1200 PLC对编码器计数,断电记忆

    目录 准备工作 新建项目 PLC硬件配置 添加程序 编辑HMI画面 下载程序并启动 后记: 准备工作 准备一款1200系列PLC,和装有TIA Portal 的上位机,用网线将两者连接.把编码器连接到 ...

  2. python snap7 plc db_python snap7讀寫s7-1200PLC的數據(PLC的I、Q、M區)

    最近項目上要開發基於TCP/IP協議的PC上位機和西門子S7系列PLC的通訊和數據采集,網上搜羅了一圈發現有python snap7這個工具,鑒於此次開發時間有限,就自己研究上手了,期間也碰到很多安裝 ...

  3. PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速

    PLC实验-西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pa ...

  4. 基于s7—1200的电梯控制,wincc hmi动画仿真,带PLC源代码

    基于s7-1200的电梯控制,wincc hmi动画仿真,带PLC源代码,hmi源代码,图纸,IO地址分配id=639682504507&

  5. 西门子plc s-7 1200驱动伺服电机方法

    西门子plc s-7 1200驱动伺服电机方法 前言 完整设备连接 驱动实际接线图 程序编写 新建项目 添加工艺对象 配置工艺对象 程序编写 启动方法 选择工作模式 前言 其实,伺服电机还用另外两种工 ...

  6. PLC实验—西门子S7 1200 PID控制步进电机转速

    PLC实验-西门子S7 1200 PID控制步进电机转速 严格讲并不是PID控制,因为并不是并不研究这个方向,研二又比较忙,时间限制只加了比例系数 这里只是抛砖引玉,希望大家可以进一步完善补充 思路 ...

  7. 信捷plc485通信上位机_基于Snap7实现与西门子PLC通信

    如果你对西门子PLC通信或者上位机开发稍微有一点研究的话,应该对Snap7有所耳闻. Snap7是一个基于以太网与西门子S7系列PLC通信的开源库,在世界领域应用很广.但也许是因为资料比较少,而且很多 ...

  8. 西门子S7系列PLC安全防护研究

    近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来.工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存 ...

  9. 在s7 1200中模拟量的应用

    模拟量 概念:随着时间连续变化的物理量被称为模拟量.例如:电压.电流.压力.速度.流量.温度等信号.通常电压信号为0~10V,电流信号为4~20mA,可以用PLC的模拟量模块进行数据采集,其经过抽样和 ...

最新文章

  1. C++ 获取内存地址(取值运算符)
  2. 如何为Pyramid添加Middleware
  3. NOP 指令作用[转]
  4. pythonexcel工具介绍_Python处理excel的强大工具
  5. 网页中弹出模式对话框
  6. java操作ssdb:set、map、list..
  7. opengl es的射线拾取
  8. 软件静态架构 软件组件图_组件图| 软件工程
  9. Redis工作笔记-String类型
  10. case class和trait
  11. EF框架step by step(1)—Database-First
  12. cmder中设置code page为utf8的方法
  13. 远程协同网络架构photon cloud
  14. linux打开gaussian16软件,Gaussian View 在Ubuntu16下的安装
  15. 操作系统实验一:父子进程通信
  16. linux源码编译ipk,openwrt SDK, 利用SDK生成自己的ipk安装包
  17. Nginx和HA负载
  18. 计算机网络掉线,电脑网络经常掉线的解决方法
  19. 声律启蒙--喜欢这个韵律
  20. 禁用ngnix的空主机头

热门文章

  1. xilinx zynq(四)
  2. TikTok剪辑系统升级:照片模式增加文案字数,达人合作平台更新
  3. spring 事务实验
  4. IDEA 常用格式化快捷键记录
  5. python分布式存储系统_主流分布式存储技术的对比分析与应用
  6. java 校验字符串是否是 json 格式
  7. DRF--generics.py中的ListCreateAPIView,RetrieveUpdateDestroyAPIView
  8. 在windows系统中安装linux
  9. 教你十分钟掌握linux文件系统管理
  10. 查看java线程堵塞排查_java线程阻塞问题排查