开发笔记1.0

如何通过python与西门子1500plc进行通讯

anaconda与snap7的安装

snap7库使用详解

read_area()

地址信息:

DB块地址:

字节地址:

字节长度:

示例如下:

write_area()

读字节:

修改位数据:

写入修改后的数据:

扩展内容

如何通过python与西门子1500plc进行通讯

入行自动化小半年,因为有图像处理和plc控制两方面协调的需求,而笔者之前主用python,因此对此进行了一段时间的探索,也走了很多弯路,写个笔记给自己也给后来者。

anaconda与snap7的安装

在寻找可用的通讯模块这方面,笔者陆陆续续试了很多,最后还是选择了snap7,如果有更方便的模块,欢迎讨论。

开发环境的配置是老生常谈了,相关博客非常多,不再赘述,只说几点需要注意的事项:

首先,snap7的安装,我不是太清楚怎么修改anaconda的库源,反正使用pip可以安装snap7,但是使用conda就找不到,解决方法是使用anaconda自带的Anaconda Prompt输入:

pip install python-snap7

注意python字段不要落下

其次,snap7安装结束后需要把snap7-full-1.4.2\release\Windows\Win64目录下的dll文件和lib文件放至Anaconda的安装目录和系统windows下的SysWOW64下。

snap7库使用详解

这一步踩了很多坑,我也不是想针对某些博客,但是很多人压根就没有实验过代码,把别人的复制一遍就成了一篇技术博客,断章取义,以讹传讹,对后来者造成了很大的麻烦。

本段只说方法,由于项目特殊性,不便截图。

开门见山:

import snap7

my_plc = snap7.client.Client()

my_plc.connect('192.168.0.10',0,1)#IP地址,第二个数字非0即1,第三个数字是cpu的机架号,请去plc控制柜查看

三句话建立对象,之后我们就可以使用read_area与write_area对plc内存数据进行读写,实现通讯。

在进行以下工作之前,必须着重强调一点:基于python的snap7只能对内存里整段的字节进行读写,而不可以直接操作具体的位。

read_area()

示例:

i_pre = my_plc.read_area(129,0,20,1)

四个参数分别代表地址信息,DB块地址,字节地址,字节长度

地址信息:

129 – I区,130 – Q区,131–M区,132–DB块,目前主要用的是这四块。

DB块地址:

对于IQM区,该数字为0,对于db块,该数字为db块的地址。

字节地址:

整数字节起始地址。

字节长度:

指向后读取的字节长度,一般针对位读取的话,填1即可,针对整数字节int32或int64等,需要酌情增加。

示例如下:

i_pre = my_plc.read_area(129,0,20,1)#表示I20.0为起点,向后读取1个字节

q_pre = my_plc.read_area(130,0,20,2)#表示Q20.0为起点,向后读取2个字节

m_pre = my_plc.read_area(131,0,20,3)#表示M20.0为起点,向后读取3个字节

db_pre = my_plc.read_area(132,20,2,1)#表示DB20为起点,地址偏移量为2,向后读取1个字节

通过字节读取之后的数据需要进行转换,转换之后会得到一个数组,拿出数组内相应的数字就是能够被处理的8位整数:

import struct

i = struct.unpack('!B',i_pre)[0]

再通过字节位读取得到我们想要的开关量,笔者并没有找到字节位读取相关的模块,所以采用以下方法:

右移–取模

#输入字节和地址偏移量

def read_bit(num,bit):

out = num>>bit

if out%2 == 0:

return False

else :

return True

如果有更方便的做法,欢迎讨论

至此,read_area()模块用法的坑几乎都填上了,基于以上流程,可以完成I、Q、M、BD区所有数据的字节读取与位读取及其相关函数编写。

write_area()

write_area()模块要比read_area()模块复杂些,由于python-snap7无法对位进行操作,因此int数据的写相对容易,而位数据写的操作就必须遵循以下流程:读字节–修改位数据–写字节

首先我们先理解write_area()函数的参数含义,示例:

my_plc.write_area(129,0,20,out_pre)

四个参数分别代表地址信息、DB地址、字节地址、写入数据

前三个参数同read_area(),写入数据则是打包后的字节数据。

在对write_area()模块参数了解后,我们继续完善开关量写入数据的全部流程:

读字节:

没啥好说的,利用前文的read_area()模块读取字节数据并使用unpack方法获得整数数据

修改位数据:

拿到8位整数之后,我们需要对其中的某个位进行修改而不改变其余字节的数据,笔者依旧是没找到相应的模块,采用的以下方法:

#输入字节数据,需要修改的位地址,需要修改的位参数,输出修改后的字节数据

def write_int(num,bit,boolnum):

out = num>>bit

if boolnum == False:

if out%2 ==0:

return num

else:

return num - 2**bit

else:

if out%2 ==0:

return num + 2**bit

else:

return num

如果有更加方便的做法,欢迎讨论

写入修改后的数据:

拿到修改后的数据,采用pack()方法将数据打包再发回plc:

out_pre = struct.pack('!B',byte_num)

my_plc.write_area(131,0,20,out_pre)

以上就是位数据写入的流程,如果是整数数据的话,只需要进行第三步即可,如果是好几个字节的数据,那就依次右移8位,依次写入

扩展内容

主要模块read_area()和write_area()掌握之后,就可以对plc内存区进行读写。

此外,笔者在开发期间,遇到了负数的传输,plc里负数按照补码存储,在传输之前需要对数据进行补码计算。

笔者经验尚浅,所有内容均为自学,若有错漏,还请各位小伙伴们及时提醒。

python snap7开发手册_python-snap7开发笔记相关推荐

  1. 微赞php.ini_微赞微擎二开笔记开发手册之模块开发指南(九)

    微赞微擎二开笔记开发手册之模块开发指南(九) 阅读本章内容之前请确定已了解微赞工作流程. 本章内容主要介绍如何编写及发布微赞功能模块. 微赞功能模块是微赞系统中扩展的独立功能, 微赞系统提供了相应的机 ...

  2. JAVA开发手册华山版 - 学习笔记

    JAVA开发手册华山版 关于Java开发手册 JAVA开发手册(华山版)下载 一.编程规约 1. 编程风格 2. 常量定义 3. 代码格式 4. OOP规约 5. 集合处理 6. 并发处理 7. 控制 ...

  3. getvod.php_PHPvod模板开发手册PHPvod模板开发手册.pdf

    PHPvod模板开发手册PHPvod模板开发手册 PHPVOD 模板开发手册 一.模板与风格 1.模板用于定义网页结构,文件类型一般为 htm. 2.风格用于定义网页的表现形式,文件类型包括 CSS ...

  4. python函数中文手册doc-Python 中文开发手册

    使用内容审核Python版本SDK包,需要您配置Python开发环境.从Python官网下载并安装合适的Python版本.兼容Python2.6+以及Python3.x.推荐使用Python3.x版本 ...

  5. python开发职位_Python后端开发是什么职位?

    陪伴而非守候 阶段一:Python开发基础Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法.数据类型.字符编码.文件操作.函数.装饰器.迭代器.内置方法.常用 ...

  6. python名片管理系统视频_python视频学习笔记6(名片管理系统开发)

    cards_main.py主函数 cards_tools.py -------------------------------------------------------------------- ...

  7. python有哪些常见的开发环境_Python集成开发环境有哪些

    对于Python集成开发环境,你更喜欢哪一款? 0.Spyder Spyder是Python(x,y)的作者为它开发的一个简单的集成开发环境.和其他的Python开发环境相比,它最大的优点就是模仿MA ...

  8. python 模板引擎 对比_Python Web开发模板引擎优缺点总结

    做 Web 开发少不了要与模板引擎打交道.我陆续也接触了 Python 的不少模板引擎,感觉可以总结一下了. 一.首先按照我的熟悉程度列一下: pyTenjin:我在开发 Doodle 和 91 外教 ...

  9. python爬虫开发环境_python爬虫开发教程下载|Python爬虫开发与项目实战(范传辉 著)pdf 完整版_ - 极光下载站...

    Python爬虫开发与项目实战pdf扫描版下载.Python爬虫开发是一个Pthyon编程语言与HTML基础知识引领读者入门知识,重点讲述了云计算的相关内容及其在爬虫中的应用,进而介绍如何设计自己的爬 ...

  10. python是一种跨平台开源免费的高级动态编程语言吗_第1章 管中窥豹:Python概述免费阅读_Python程序设计开发宝典免费全文_百度阅读...

    1.1 Python是这样一种语言 有不少人说Python是一种"大蟒蛇语言".虽然在英语中Python确实有大蟒蛇的意思,但Python语言和大蟒蛇却没有任何关系.Python语 ...

最新文章

  1. linux进程间通信:无名管道 pipe
  2. 关于 automation服务器对象不能创建
  3. 【前沿】何恺明大神ICCV2017最佳论文Mask R-CNN的Keras/TensorFlow/Pytorch 代码实现
  4. jaxp的Sax解析
  5. oracle创建序列seq起始值为1_Oracle修改序列(Sequence)起始值问题
  6. Winform将FastReport的report与PreviewControl建立绑定关系
  7. JVM——CPU缓存架构与Java 内存模型
  8. Aspectj快速上手代码示例之Before,After,Around
  9. linux常用命令之压缩打包
  10. c语言程序运行时可以从键盘上读入,C语言程序设计题库之
  11. Java如何快速入门?Java基础_Java入门
  12. 十大验证码解决方案服务比较
  13. xp访问贡享显示指定服务器,XP访问Win10共享打印机指定的网络名不再可用解决方法...
  14. 3小时快学期权(第二版)读书笔记(上)
  15. 下一步工作应该怎样开展
  16. strcmp与strncmp与memcmp的区别
  17. Android仿网易游戏的精美开场动画+动画基础详解
  18. 征服英语的二十二条军规
  19. 传美云商系统开发源码
  20. HTML表单验证pattern

热门文章

  1. 7个免费的服务器监控工具
  2. autojs java文件_autojs官方文档
  3. 修复EXE文件无法打开
  4. Planetside.Software.Terragen.v0.9.43.WinALL 1CD(景观产生器)
  5. 计算机考苏州公务员考试,苏州公务员考试难度
  6. 网络子系统55_ip协议分片重组_加入ipq
  7. 商场收银系统服务器安装在哪里,收银系统安装教程
  8. 你专属的程序员春节“大礼包”
  9. Linux C | 查看二进制文件的小工具HexView
  10. 绘图杂记【1】Python、R等绘图