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