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';生成一個適合你的列表
- 項目
- 項目
- 項目
- 項目
- 計劃任務
- 完成任務
創建一個表格
一個簡單的表格是這么創建的:
| 電腦 | $1600 |
| 手機 | $12 |
| 導管 | $1 |
設定內容居中、居左、居右
使用:---------:居中
使用:----------居左
使用----------:居右
| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants將ASCII標點字符轉換為“智能”印刷標點HTML實體。例如:
| Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
| Quotes | "Isn't this fun?" | “Isn’t this fun?” |
| Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
創建一個自定義列表
Markdown如何創建一個注腳
一個具有注腳的文本。1
注釋也是必不可少的
Markdown將文本轉換為 HTML。
KaTeX數學公式
您可以使用渲染LaTeX數學表達式 KaTeX:
Gamma公式展示 Γ(n)=(n?1)!?n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n?1)!?n∈N 是通過歐拉積分
Γ(z)=∫0∞tz?1e?tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞?tz?1e?tdt.
你可以找到更多關于的信息 LaTeX 數學表達式here.
新的甘特圖功能,豐富你的文章
Mon 06Mon 13Mon 20已完成 進行中 計劃一 計劃二 現有任務Adding GANTT diagram functionality to mermaid- 關于 甘特圖 語法,參考 這兒,
UML 圖表
可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖:
張三李四王五你好!李四, 最近怎么樣?你最近怎么樣,王五?我很好,謝謝!我很好,謝謝!李四想了很長時間,文字太長了不適合放在一行.打量著王五...很好... 王五, 你怎么樣?張三李四王五這將產生一個流程圖。:
鏈接長方形圓圓角長方形菱形- 關于 Mermaid 語法,參考 這兒,
FLowchart流程圖
我們依舊會支持flowchart的流程圖:
Created with Rapha?l 2.2.0開始我的操作確認?結束yesno- 關于 Flowchart流程圖 語法,參考 這兒.
導出與導入
導出
如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md文件或者.html文件進行本地保存。
導入
如果你想加載一篇你寫過的.md文件,在上方工具欄可以選擇導入功能進行對應擴展名的文件導入,
繼續你的創作。
注腳的解釋 ??
總結
以上是生活随笔為你收集整理的python与西门子PLC通讯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 006.不浅谈,数十条业务线以上的,前端
- 下一篇: python计算图像的曲率