snap7读写西门⼦plc1200步骤(python)PLC通讯本⽂是利⽤snap7进⾏对plc1200进⾏读写,所⽤语⾔是python3,windows7下,plc具体型号为S7-1212DC/DC/DC
注意在ubuntu安装的时候,先安装python3-pip在进⾏pip3 install,否则默认使⽤python2环境。
1.snap7安装
win+R打开运⾏串⼝,输⼊cmd,确定后,输⼊下⾯的命令:(需要提前安装python 和 pip)
使⽤python的pip命令安装即可:pip install python-snap7
截图是我已经安装过了,如果有问题,请检查python安装是够正确,是否增加python的路径到环境变量中。
snap7相关内容可以查看链接。
不做深⼊探究,请继续向下看。
******************************************************************************************
windows安装报错:
Traceback (most recent call last):
File "Y:\Lonnox\Projekte\Bibliothek\Python und SPS\S7-1200 Test.py", line 6, in <module>
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安装⽂件夹。资源处有。
-
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
2021.3.1更新
如果在linux出现同样的报错,解决⽅法如下:
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
******************************************************************************************
在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块中的数据吧。
我这⾥只⽤了这⼏个,重要的是看数据块的偏移量,这⾥是后⾯要⽤到的地址。暂停,请打开⽹址,端好⼩板凳,认真观看
这三个视频。如果想怎加记忆,每个视屏同名的会有强化记忆的⼩程序。
PLC的部分到此结束,请给PLC接上24V电源,⽤⽹线把电脑和PLC连接,把刚才修改plc的项⽬导⼊plc中。如果连不上,可以⼿动修改电脑的ip为192.168.1.0,和之前设置的plc需要在同⼀个⼦⽹下⾯。
下⾯打开python的shell,确认是否能够连接和读写。
输⼊下⾯的命令
>>> import snap7
>>> plc=snap7.client.Client()
>>> t('192.168.1.11',0,1)
这⾥需要注意的是ip和你设置的Plc的ip⼀致,connect的参数,0,1位⼀般为默认参数,是指代plc的⽹⼝插槽位置的。断开连接直接调⽤plc.disconnect()就可以断开连接了。
下⾯介绍两个最最重要的函数:也就基本上只使⽤到这些:
read_area(area,dbnumber,start,size)ubuntu怎么安装python
write(area,dbnumber,start,data)
⾸先介绍第⼀个参数,我们读写,主要的区别就是地址不同,plc⾃带地址分类,如下: