本文是利用snap7进行对plc1200进行读写,所用语言是python3,windows7下,plc具体型号为S7-1212DC/DC/DC

1.snap7安装

win+R打开运行串口,输入cmd,确定后,输入下面的命令:(需要提前安装python 和 pip)

使用python的pip命令安装即可:pip install python-snap7

截图是我已经安装过了,如果有问题,请检查python安装是够正确,是否增加python的路径到环境变量中。

snap7相关内容可以查看链接https://blog.csdn.net/Paul22101574/article/details/81583198。

不做深入探究,请继续向下看。

******************************************************************************************

windows安装报错:

Traceback (most recent call last):

File "Y:\Lonnox\Projekte\Bibliothek\Python und SPS\S7-1200 Test.py", line 6, in plc = snap7.client.Client()

File "C:\Python34\lib\site-packages\snap7\client.py", line 30, in __init__

self.library = load_library()

File "C:\Python34\lib\site-packages\snap7\common.py", line 54, in load_library

return Snap7Library(lib_location).cdll

File "C:\Python34\lib\site-packages\snap7\common.py", line 46, in __init__

raise Snap7Exception(msg)

snap7.snap7exceptions.Snap7Exception: can't find snap7 library. If installed, try running ldconfig

解决方法:将dll lib文件拷入python安装文件夹。资源处有。

******************************************************************************************

在ubantu14.04中linux系统安装及配置

系统自带python2,同样的pip install python-snap7,安装snap7库成功。

下面配置系统的ip地址:

1.确保ubantu关闭了防火墙

启用

sudo ufw enable

sudo ufw default deny

作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。

关闭

sudo ufw disable

查看防火墙状态

sudo ufw status

2.配置eth0或者eth1 的静态ip地址

$gedit /etc/network/interfaces

# interfaces eth0 for snap7 connect plc

auto eth0

iface eth0 inet static

address 192.168.0.100

netmask 255.255.255.0

gateway 192.168.0.1

保存,重启。

ifconfig就可以看见修改了。

2.设置西门子PLC

使用博图软件对PLC属性进行设置

(1)打开plc,更改IP地址:(注意这一步不是必须的,我自己链接的时候使用默认192.168.0.1总是出现连接超时或者失败,修改了IP就好了,修改为192.168.1.11)。

(2)打开保护,修改为无保护,默认无保护。

(3)数据读写可以对输入(I)、输出(Q)、M区甚至是T区(时钟)区读写,但是实际操作中,我对I区读写没有任何反应,对M区和Q区测试可以,所以建议使用全局DB数据块进行读写,然后PLC程序稍加修改就行。例如,原来的I0.1可以使用M10.1的数字使用==指令判别,==1接通,逻辑差不多,就是需要把I区的开关转换成M区。

好了,废话到此。建立全局数据块DB_1,这里的DB号为1.

点到项目树的DB1右击打开属性列表,保护为无保护。

取消优化的块访问,默认块访问是优化的

好了,看下DB块中的数据吧。

我这里只用了这几个,重要的是看数据块的偏移量,这里是后面要用到的地址。

暂停,请打开网址,端好小板凳,认真观看  http://www.ad.siemens.com.cn/service/elearning/Course/455.html

这三个视频。如果想怎加记忆,每个视屏同名的会有强化记忆的小程序。

PLC的部分到此结束,请给PLC接上24V电源,用网线把电脑和PLC连接,把刚才修改plc的项目导入plc中。如果连不上,可以手动修改电脑的ip为192.168.1.0,和之前设置的plc需要在同一个子网下面。

下面打开python的shell,确认是否能够连接和读写。

输入下面的命令

>>> import snap7

>>> plc=snap7.client.Client()

>>> plc.connect('192.168.1.11',0,1)

这里需要注意的是ip和你设置的Plc的ip一致,connect的参数,0,1位一般为默认参数,是指代plc的网口插槽位置的。断开连接直接调用plc.disconnect()就可以断开连接了。

下面介绍两个最最重要的函数:也就基本上只使用到这些:

read_area(area,dbnumber,start,size)

write(area,dbnumber,start,data)

首先介绍第一个参数,我们读写,主要的区别就是地址不同,plc自带地址分类,如下:

0x81是输入区,0x82输出区,0x84是db块。

第二个参数是dbnumber,输入输出区域默认为0,db块就是块的序号,我这里是数据块_1,其实就是1号,所以写1.

下面两个参数,start和size,对于I0.3起始地址为0,对应size为3

对于M3.4,对应的就是M(0x83),起始地址是3,对应bit位是4,

用write_area(self, area, dbnumber, start, data):函数写I\Q\M区不同类型寄存器的值:

过程与read_area相逆,根据地址和数据类型,把值填到函数的data中。

举个写的例子:client.write_area(0x82, 0,0,struct.pack('B',24)) 意思是向PLC的开关量输出口D0.3和D0.4值写1,24的二进制是00011000。

这里需要提醒下,因为读写获得的都是16进制的数字,需要把相对应的解码和编码到10进制方便读写。

>>> plc.write_area(0x84,1,0,struct.pack('B',1))

>>> data=plc.read_area(0x84,1,0,8)

>>> print(data)

bytearray(b'\x01\x00\x00\x00\x00\x00\x00\x00')

这是对db块的M1.0写1,读写例子,。读取时候为了减少多次读取,我是用了一次性读取了8位。

这里给出我记录的某一博文的例子,有错误不管,哈哈哈

---------------------------------------------------------------老子是分割线--------------------------------------------------------------------------

通过读写PLC的M10.1、MW201来具体看看如何读写PLC。

import struct

import time

import snap7

def plc_connect(ip, rack=0, slot=1):

"""

连接初始化

:param ip:

:param rack: 通常为0

:param slot: 根据plc安装,一般为0或1

:return:

"""

client = snap7.client.Client()

client.connect(ip, rack, slot)

return client

def plc_con_close(client):

"""

连接关闭

:param client:

:return:

"""

client.disconnect()

def test_mk10_1(client):

"""

测试M10.1

:return:

"""

area = snap7.snap7types.areas.MK

dbnumber = 0

amount = 1

start = 10

print(u'初始值')

mk_data = client.read_area(area, dbnumber, start, amount)

print(struct.unpack('!c', mk_data))

print(u'置1')

client.write_area(area, dbnumber, start, b'')

print(u'当前值')

mk_cur = client.read_area(area, dbnumber, start, amount)

print(struct.unpack('!c', mk_cur))

def test_mk_w201(client):

"""

测试MW201,数据类型为word

:param client:

:return:

"""

area = snap7.snap7types.areas.MK

dbnumber = 0

amount = 2

start = 201

print(u'初始值')

mk_data = client.read_area(area, dbnumber, start, amount)

print(struct.unpack('!h', mk_data))

print(u'置12')

client.write_area(area, dbnumber, start, b'')

print(u'当前值')

mk_cur = client.read_area(area, dbnumber, start, amount)

print(struct.unpack('!h', mk_cur))

time.sleep(3)

print(u'置3')

client.write_area(area, dbnumber, start, b'')

print(u'当前值')

mk_cur = client.read_area(area, dbnumber, start, amount)

print(struct.unpack('!h', mk_cur))

if __name__ == "__main__":

client_fd = plc_connect('192.168.0.1')

test_mk10_1(client_fd)

test_mk10_1(client_fd)

plc_con_close(client_fd)

从代码可见,MW201,根据M确定area为MK,根据W确定数据amount为2Btye,根据201确定start为201,读出来的数据根据数据长度用struct进行unpack,写数据对应strcut的pack。

这里给出PLC变量类型和大小,这样对应确定读写的amount。

---------------------------------------------------------------老子是分割线--------------------------------------------------------------------------

下面是我读写i0.1的例子,可是却没有成功,原因未知。

>>> plc.write_area(0x81,0,0,struct.pack('B',1))

>>> data=plc.read_area(0x81,0,0,1)

>>> print(data)

bytearray(b'\x00')

>>> data=plc.read_area(0x81,0,0,8)

>>> print(data)

bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00')

下面这个同样的,不过使用了转码,以供转码的示范

>>> plc.write_area(0x81,0,0,struct.pack('B',1))

>>> data=plc.read_area(0x81,0,0,1)

>>> print(struct.unpack('!B',data)[0])

0

>>> data=plc.read_area(0x81,0,0,0)

特别提醒,对于DB块M的读写时,当是多个字时,低地址的字节其实在写入时候位于数字的高字节段,也就是高位,高地址的字节反而位于数字的低位数段。所谓的大端模式和小端模式,请自行百度。知道就行。

写数据都是8位一次写入,如果写入MW类型或者Real等更大数据,需要8位分割,我的实现是每次进行位与操作,然后通过移位8位获得高位。

在提供几篇不错的博客::

https://blog.csdn.net/xiaoxianerqq/article/details/81661010

https://blog.csdn.net/weixin_29482793/article/details/79555836

第二个博客博主做了个软件,如果大家只是玩一下,可以看看,但是源码没有开放,可以用QT也完成该界面操作。

用python编写西门子plc程序_snap7读写西门子plc1200步骤(python)相关推荐

  1. 西门子1200 1500 完整大型PLC程序 3台西门子触 摸屏 程序块无密码 结构清晰 程序带中文注解 共1多台发那科机器人

    西门子1200 1500 完整大型PLC程序 3台西门子触 摸屏 程序块无密码 结构清晰 程序带中文注解 共1多台发那科机器人 三个SEW变频器控制的4面转台 130多个气缸 1200 1500 间使 ...

  2. 教你用Python 编写 Hadoop MapReduce 程序

    摘要:Hadoop Streaming 使用 MapReduce 框架,该框架可用于编写应用程序来处理海量数据. 本文分享自华为云社区<Hadoop Streaming:用 Python 编写 ...

  3. 西门子PLc程序,博途V16 V17版1200与多台G120变频器通过过modbus RTU485 通讯控制,模拟量转

    西门子PLc程序,博途V16 V17版1200与多台G120变频器通过过modbus RTU485 通讯控制,模拟量转换,温度转换,压力Pid控制,西门子KTP700 HMi 含电路图,G120变频器 ...

  4. 西门子PLC程序 西门子1200PLC程序,配触摸屏程序,IO,BOM,电气图纸,莫风扇定子线端

    西门子PLC程序 西门子1200PLC程序,配触摸屏程序,IO,BOM,电气图纸,莫风扇定子线端,两台PLC编程,使用西门子V90伺服,ProFinnet通讯,配合雅马哈机器人,康耐视相机,喷码机,三 ...

  5. 堆垛机西门子PLC程序+输送线程序+触摸屏程序

    堆垛机西门子PLC程序+输送线程序+触摸屏程序. 物流仓储. 涵盖通信,算法,运动控制,屏幕程序,可电脑仿真测试. 实际项目完整程序. 西门子S7-1200+G120+劳易测激光测距 博途V15.1编 ...

  6. 西门子1200 1500 完整大型PLC程序 3台西门子触摸屏程序块

    西门子1200 1500 完整大型PLC程序 3台西门子触摸屏程序块无密码 结构清晰 程序带中文注解 共1多台发那科机器人 三个SEW变频器控制的4面转台 130多个气缸 1200 1500 间使用智 ...

  7. 为了偷懒,我开始用Python编写Android应用程序

    为了偷懒,我开始用Python编写Android应用程序 说明 环境准备 开发环境准备(windows) 编译环境准备 自行配置制作编译环境 偷懒:直接下载配置好的虚拟机 编译 验证APK 总结 说明 ...

  8. 使用Python编写网络扫描程序

    使用Python编写网络扫描程序 ​ 网络扫描程序通过向成百上千台计算机发送请求并分析其响应,扫描第2层和第3层网络中指定范围内的网络ID.利用某些扩展技术,网络扫描程序还可以获得通过Samba和Ne ...

  9. 西门子plc程序代写代写西门子plc程序包括200smart,1200plc和1500plc和上位机系统

    西门子plc程序代写代写西门子plc程序包括200smart,1200plc和1500plc和上位机系统,注释详细,易懂上手,并且录制视频讲解程序 编号:69100640625555877西门子PLC ...

最新文章

  1. groupby elasticsearch
  2. 网页里显示访问的那台服务器,在web服务器中把网页放在那里,才能被访问
  3. python映射类型-Python中的映射数据类型 dict
  4. mongodb 3.4 安装_Python数据分析及可视化实例之CentOS7.2+MongoDB V3.4 安装
  5. 喜报丨神策数据再获北京市广播电视局优秀推荐项目
  6. AUTOSAR从入门到精通100讲(三十六)-CAN总线错误处理
  7. 十六进制除法运算法则_苏教版数学七年级上册 微课视频 2.6 有理数的乘法与除法(1)...
  8. jeecg框架日常开发问题解决方法
  9. TCP模块的断开操作
  10. 浅谈ERP数据的重要性
  11. JAVA中级二 输入输出流,常见文件操作
  12. HVCC文史通证行业顶尖技术确保安全无忧
  13. 如何在eclipse中创建jsp工程项目
  14. Arthas Web-Console一站式解决方案
  15. DVWA靶场通关教程
  16. 数据库中的多表联查(四表联查)
  17. Linux文件和目录管理(2)
  18. Docker搭建nextcloud使用云盘
  19. 互联互通社区祝大家中秋节快乐!
  20. RTKLIB观测数据读取修改

热门文章

  1. MySQL面试题大全(陆续更新)
  2. android 带刻度的滑动条_Android自定义控件尺子 滚动刻度尺
  3. Flink 算子状态与键控状态总结
  4. ChatGPT 桌面应用程序 for macOS, Linux, Windows v0.10
  5. 弹性计算双周刊 第24期
  6. 笔记本自带键盘失效问题
  7. 2020全国语文高考作文
  8. 2021年度训练联盟热身训练赛第八场
  9. 鸿蒙大战是什么,混沌氏(浑沌)、鸿蒙氏,盘古开天辟地时两个最强大的部落首领?...
  10. 秒的换算:皮秒、纳秒、微秒、毫秒