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 datatypeS7WLWord:
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 datatypeS7WLWord:
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 #断开连接
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Qu |