袁金慶
摘要:現(xiàn)在工業(yè)控制領(lǐng)域大部分仍是以PLC(可編程邏輯控制器)為控制核心的工業(yè)自動化,但隨著工業(yè)4.0概念的提出,制造業(yè)對自動化、智能化生產(chǎn)模式的需求日益增長,作為邏輯控制器的PLC對一些大數(shù)據(jù)量處理工作力不從心。本文主要將淺顯談?wù)撓聀ython在工業(yè)控制領(lǐng)域的應(yīng)用。
關(guān)鍵詞:python;自動化;工業(yè)控制;
1、概述
隨著科學(xué)技術(shù)的發(fā)展,越來越多的企業(yè)開始進(jìn)入智能化生產(chǎn),PLC在對連續(xù)數(shù)據(jù)采集,數(shù)據(jù)顯示,數(shù)據(jù)庫管理等工作顯得心有余而力不足。連續(xù)數(shù)據(jù)采集,數(shù)據(jù)顯示,數(shù)據(jù)庫管理等工作使用上位機(jī)比較適合,而上位機(jī)開發(fā)語言主要有C、C++、C#、VB.NET、python等,python相對與其他語言簡單易學(xué),效率高,免費且開源等優(yōu)勢。
2、PLC發(fā)展現(xiàn)狀
(1)在PLC技術(shù)中,開關(guān)量的邏輯控制是最為常見的類型,其應(yīng)用最為廣泛?;陂_關(guān)量的邏輯控制技術(shù)取代了傳統(tǒng)繼電器電路,使電路控制技術(shù)的真正進(jìn)入了邏輯控制時代。
(2)由于PLC只能處理數(shù)字信號,在應(yīng)用過程中需要將模擬量進(jìn)行數(shù)字化轉(zhuǎn)換,此過程需要借助A/D和D/A轉(zhuǎn)換器實現(xiàn),為便于用戶使用,PLC廠家在進(jìn)行設(shè)計的過程中,就已經(jīng)研發(fā)了與之相匹配的A/D和D/A轉(zhuǎn)換器,從而保證PLC器件能夠?qū)δM量控制信號做出正確的響應(yīng)。
(3)在控制機(jī)構(gòu)的配置上,基于開關(guān)量的串口控制模塊需要與位置傳感器相連接,根據(jù)執(zhí)行機(jī)構(gòu)的運(yùn)動情況,進(jìn)行周期性的響應(yīng),這就是基于運(yùn)動控制的PLC技術(shù)。
(4)所謂過程控制,也就是自動控制原理中的反饋控制(或閉環(huán)控制),在PLC技術(shù)的實際應(yīng)用中,不僅需要對現(xiàn)場狀態(tài)進(jìn)行及時的反饋,還應(yīng)當(dāng)具備對過程量的控制能力。
3、python語言優(yōu)勢
Python語言目當(dāng)前最為流行的編程語言之一,相對于其他語言Python具有明顯優(yōu)勢。
(1)簡單、易學(xué)
(2)免費、開源
(3)高層語言
(4)可移植性
(5)解釋性
(6)面向?qū)ο?/p>
(7)可擴(kuò)展性
(8)豐富的庫
(9)規(guī)范的代碼
4、python在工業(yè)控制領(lǐng)域的應(yīng)用
(1)與PLC通訊
本文以西門子S7系列的PLC為例,使用Snap7庫實現(xiàn)與PLC的數(shù)據(jù)交換。
① python安裝snap7只需要簡單命令pip install python-snap7即可。
② 使用snap7.client.Client庫中connect(self,address,rack,slot, tcpport=102)與PLC連接。
例:
import snap7
client = snap7.client.Client()
client.connect("127.0.0.1",0,0,1012) #"127.0.0.1"為PLCip地址,0為PLC號,0為CPU所在槽號,1012為端口號。
③ 數(shù)據(jù)讀取,又分為ct?_read、db_read、mb_read、tm_read或者read_area等。
例:
read_area(area,dbnumber,start,size)
#area為內(nèi)存地址區(qū)域如下表,dbnumber為DB號,僅讀取DB區(qū)域時使用,start為偏移起始地址,size讀取字節(jié)數(shù)
④ 數(shù)據(jù)寫入,同數(shù)據(jù)讀取,又分為ct?_write、db_write、mb_write、tm_write或者write_area等。
通過以上,用很少的代碼就可以實現(xiàn)PLC的讀寫。
(2)機(jī)器人或其他第三方智能設(shè)備通訊。
Python自帶socket模塊,可以通過socket通訊實現(xiàn)與支持socket通訊方式的設(shè)備通訊。
第三方設(shè)備一般作為服務(wù)端會與多個設(shè)備相連接,上位系統(tǒng)一般使用客戶端,使用python如下代碼建立客戶端。
from socket import *
HOST = '127.0.0.1' #第三方設(shè)備的ip地址
PORT = 21567 #端口號
BUFSIZ =1024 #設(shè)置緩存器大小
ADDR = (HOST,PORT)
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
(3)建立數(shù)據(jù)庫
現(xiàn)在已經(jīng)存在了很多優(yōu)秀的商業(yè)數(shù)據(jù)庫,如Oracle、DB2、SQL Server、Access等。同時,還有很多優(yōu)秀的開源數(shù)據(jù)庫,如MySQL、PostgreSQL等。
其中MySQL是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),因為其速度、可靠性和適應(yīng)性而備受關(guān)注。MySQL是流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一。本文以MySQL為例介紹。
① 數(shù)據(jù)庫安裝。首先必須確保安裝MySQL。Python中使用pip install MySQL-python安裝即可。
② 數(shù)據(jù)庫連接。
例:import MySQLdb
db=MySQLdb.connect("localhost","testuser","test123","TESTDB", charset='utf8') #打開數(shù)據(jù)庫連接
③ 獲取游標(biāo),要想操作數(shù)據(jù)庫,光連接數(shù)據(jù)是不夠的,必須拿到操作數(shù)據(jù)庫的游標(biāo),才能進(jìn)行后續(xù)的操作。
例:cursor=conn.cursor()
④ 創(chuàng)建數(shù)據(jù)庫
如果數(shù)據(jù)庫連接存在我們可以使用execute()方法來為數(shù)據(jù)庫創(chuàng)建表:
cursor.execute('CREATE DATABASE IF NOT EXISTS pythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
⑤ 創(chuàng)建表
sql="""CREATE TABLE IF NOT EXISTS user` (`id`int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NOT NULL, `age` int(11) NOT NULL,PRIMARY KEY (`id`) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""
cursor.execute(sql)
⑥ 插入單條數(shù)據(jù)
insert=cur.execute("insert into user values(1,'liming',18)")
⑦ 數(shù)據(jù)庫查詢
查詢Mysql使用fetchone()方法獲取單條數(shù)據(jù),使用fetchall()方法獲取多條數(shù)據(jù)。
5、結(jié)束語
Python具有大量的第三方庫,比如Numpy庫具有支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫,可以處理PLC或第三方設(shè)備中的大量數(shù)據(jù)。再比如PIL、matplotlib庫,可以將讀取的數(shù)據(jù)進(jìn)行圖片形式或三維形式的直觀顯示。Xlwt/xlrd等EXCEL庫可以將數(shù)據(jù)寫入EXCEL中,便于數(shù)據(jù)的整理保存比較等工作。Python作為現(xiàn)在最流行的編程語言,在工業(yè)控制領(lǐng)域我們也可以適當(dāng)應(yīng)用,解決一些小問題,提高工作效率。
參考文獻(xiàn):
[1]陳琥.PLC的發(fā)展現(xiàn)狀及應(yīng)用前景[J].電子技術(shù)與軟件工程,2017,000(009):120-120.
[2]宋春穎.基于Python的數(shù)據(jù)挖掘與分析[C]//第三十四屆中國(天津)2020’IT、網(wǎng)絡(luò)、信息技術(shù)、電子、儀器儀表創(chuàng)新學(xué)術(shù)會議.0.
[3]丁未.將工業(yè)與科技世界的運(yùn)行統(tǒng)一在Python語言的開源框架中[J].中國儀器儀表,2013,000(008):23-25,31.