Python Snap7实现S7-1200 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 |
使用教程
- 创建客户端实例
client = snap7.client.Client()
- 连接客户端
'''
@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)
- 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)
- 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通信控制相关推荐
- S7 1200 PLC对编码器计数,断电记忆
目录 准备工作 新建项目 PLC硬件配置 添加程序 编辑HMI画面 下载程序并启动 后记: 准备工作 准备一款1200系列PLC,和装有TIA Portal 的上位机,用网线将两者连接.把编码器连接到 ...
- python snap7 plc db_python snap7讀寫s7-1200PLC的數據(PLC的I、Q、M區)
最近項目上要開發基於TCP/IP協議的PC上位機和西門子S7系列PLC的通訊和數據采集,網上搜羅了一圈發現有python snap7這個工具,鑒於此次開發時間有限,就自己研究上手了,期間也碰到很多安裝 ...
- PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速
PLC实验-西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pa ...
- 基于s7—1200的电梯控制,wincc hmi动画仿真,带PLC源代码
基于s7-1200的电梯控制,wincc hmi动画仿真,带PLC源代码,hmi源代码,图纸,IO地址分配id=639682504507&
- 西门子plc s-7 1200驱动伺服电机方法
西门子plc s-7 1200驱动伺服电机方法 前言 完整设备连接 驱动实际接线图 程序编写 新建项目 添加工艺对象 配置工艺对象 程序编写 启动方法 选择工作模式 前言 其实,伺服电机还用另外两种工 ...
- PLC实验—西门子S7 1200 PID控制步进电机转速
PLC实验-西门子S7 1200 PID控制步进电机转速 严格讲并不是PID控制,因为并不是并不研究这个方向,研二又比较忙,时间限制只加了比例系数 这里只是抛砖引玉,希望大家可以进一步完善补充 思路 ...
- 信捷plc485通信上位机_基于Snap7实现与西门子PLC通信
如果你对西门子PLC通信或者上位机开发稍微有一点研究的话,应该对Snap7有所耳闻. Snap7是一个基于以太网与西门子S7系列PLC通信的开源库,在世界领域应用很广.但也许是因为资料比较少,而且很多 ...
- 西门子S7系列PLC安全防护研究
近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来.工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存 ...
- 在s7 1200中模拟量的应用
模拟量 概念:随着时间连续变化的物理量被称为模拟量.例如:电压.电流.压力.速度.流量.温度等信号.通常电压信号为0~10V,电流信号为4~20mA,可以用PLC的模拟量模块进行数据采集,其经过抽样和 ...
最新文章
- C++ 获取内存地址(取值运算符)
- 如何为Pyramid添加Middleware
- NOP 指令作用[转]
- pythonexcel工具介绍_Python处理excel的强大工具
- 网页中弹出模式对话框
- java操作ssdb:set、map、list..
- opengl es的射线拾取
- 软件静态架构 软件组件图_组件图| 软件工程
- Redis工作笔记-String类型
- case class和trait
- EF框架step by step(1)—Database-First
- cmder中设置code page为utf8的方法
- 远程协同网络架构photon cloud
- linux打开gaussian16软件,Gaussian View 在Ubuntu16下的安装
- 操作系统实验一:父子进程通信
- linux源码编译ipk,openwrt SDK, 利用SDK生成自己的ipk安装包
- Nginx和HA负载
- 计算机网络掉线,电脑网络经常掉线的解决方法
- 声律启蒙--喜欢这个韵律
- 禁用ngnix的空主机头