python与西门子PLC通讯

本文介绍了如何使用Python的snap7库连接到西门子PLC进行数据读取和写入操作,包括对输入、输出、位存储区等的数据交互,并提供了示例代码。
摘要由CSDN通过智能技术生成
                       python与西门子PLC通讯

安装Python-snap7

win+R打开“运行”,输入cmd,确定后,进入DOS命令行终端,输入下面的命令:

pip install python-snap7

areas = ADict({

‘PE’: 0x81, #input

‘PA’: 0x82, #output

‘MK’: 0x83, #bit memory

‘DB’: 0x84, #DB

‘CT’: 0x1C, #counters

‘TM’: 0x1D, #Timers

})

程序编写

I读   0x82改为0x81

Q读   0x82改为0x81

M读   0x82改为0x83

import snap7

from snap7.util import *

from snap7.snap7types import *

def ReadMemory(self,byte,bit,datatype):

result=self.read_area(0x81,0,byte,datatype)

if datatype==S7WLBit:  #这里的datatype应该可以写数字(参照上面写入output),或者像这里直接写类型

return get_bool(result,0,bit)

if datatypeS7WLByte
or datatype
S7WLWord:

return get_int(result,0)

if datatype==S7WLReal:        #elif更好

return get_real(result,0)

if datatype==S7WLDWord:

return get_dword(result,0)

myplc=snap7.client.Client()

myplc.connect(‘192.168.0.1’, rack=0,slot=2)

print(‘bool型’,ReadMemory(myplc,10,0,S7WLBit))#I10.0

print(‘byte型’,ReadMemory(myplc,11,0,S7WLByte)/256)#IB22

print(‘Word型’,ReadMemory(myplc,12,0,S7WLWord))#IW12

print(‘Real型’,ReadMemory(myplc,14,0,S7WLReal))#ID14

print(‘Dword型’,ReadMemory(myplc,18,0,S7WLDWord)) #ID18

I   0x81

Q  0x81

M  0x83

import snap7

from snap7.util import *

from snap7.snap7types import *

def WriteMemory(self,byte,bit,datatype,value):

result=self.read_area(0x83,0,byte,datatype)

if datatype==S7WLBit:

set_bool(result,0,bit,value)

if datatypeS7WLByte
or datatype
S7WLWord:

set_int(result,0,value)

if datatype==S7WLReal:

set_real(result,0,value)

if datatype==S7WLDWord:

set_dword(result,0,value)

self.write_area(0x83,0,byte,result)

myplc=snap7.client.Client()

myplc.connect(‘192.168.0.1’, rack=0,slot=2)

WriteMemory(myplc,10,0,S7WLBit,False)

WriteMemory(myplc,11,0,S7WLByte,10*256)  #写入值要X256

WriteMemory(myplc,12,0,S7WLWord,32)

WriteMemory(myplc,14,0,S7WLReal,3.14159)

WriteMemory(myplc,18,0,S7WLDWord,1132818)

字定义:

DB1.DBX0.0 读

import snap7

from snap7.util import *

from snap7.snap7types import *

myplc=snap7.client.Client()

myplc.connect(‘192.168.0.1’, rack=0,slot=1)

#DB1.DBX0.0

result=myplc.read_area(0x84,1,0,1)#长度为1,即1BYTE

aa=get_bool(result,0,0)#DB1.DBX0.0

print(aa)

#DB1.DBB0.0

result=myplc.read_area(0x84,1,0,2)#长度为2,因为字节跟字snap7都定义为2个字,所以结果要除于256(字的高低位原理)

aa=get_int(result,0)#DB1.DBB0,且读取的值默认为有符号的,所以PLC段输入的要为有有符号类型

print(aa/256)

#DB1.DBBW0

result=myplc.read_area(0x84,1,0,2)#长度为2,

aa=get_int(result,0)#DB1.DBW0,且读取的值默认为有符号的范围取值,所以PLC段输入的要为有有符号类型

print(aa)

#DB1.DBD0

result=myplc.read_area(0x84,1,0,4)#长度为4,

aa=get_dword(result,0)#DB1.DBD0,改为get_dword 只支持正数显示

print(aa)

#DB1.DBD0  real浮点数

result=myplc.read_area(0x84,1,0,4)#长度为4,

aa=get_real(result,0)#DB1.DBD0,改为get_real,支持正负

print(aa)

#浮点数写

import snap7

from snap7.util import *

from snap7.snap7types import *

myplc=snap7.client.Client()

myplc.connect(‘192.168.0.1’, rack=0,slot=1)#1200写1,300写2

data=myplc.read_area(0x84,1,0,4)# 1中要写PLC存在的DB块,且去掉块优化选项,不然通讯不上

value=get_real(data,0)   #数据类型eral

print(value)

set_real(data,0,112.0)#112.0为要写入的值

myplc.write_area(0x84,1,0,data)#0x84为DB类型,1为DB几,0为DBD0,设为4为DBD4

plc.disconnect #断开连接

Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Qu
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值