• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Python的羅克韋爾語音報(bào)警系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

      2024-10-31 00:00:00江海濤
      現(xiàn)代信息科技 2024年17期

      摘 要:隨著現(xiàn)代工廠生產(chǎn)規(guī)模的不斷擴(kuò)大,操作崗位監(jiān)控的HMI畫面也越來越多。面對大量的操作終端,除正常生產(chǎn)操作外,操作人員對重點(diǎn)報(bào)警的及時(shí)了解與跟蹤處理顯得尤為重要。文章以實(shí)現(xiàn)羅克韋爾語音報(bào)警系統(tǒng)為出發(fā)點(diǎn),基于Python開發(fā)環(huán)境,利用PySide2、Pylogix、win32com等第三方生態(tài)模塊,旨在設(shè)計(jì)一套能根據(jù)羅克韋爾PLC實(shí)時(shí)標(biāo)簽值自動播放語音報(bào)警的智能系統(tǒng)。

      關(guān)鍵詞:Python;PySide2;Pylogix;win32com;羅克韋爾;語音報(bào)警

      中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2024)17-0169-05

      0 引 言

      在一個(gè)基于羅克韋爾的工業(yè)自動化控制系統(tǒng)中,傳統(tǒng)的語音報(bào)警實(shí)現(xiàn)方式是在HMI系統(tǒng)上進(jìn)行開發(fā),當(dāng)PLC變量值滿足觸發(fā)條件時(shí),通過VBA腳本自動播放特定的聲音文件,一條報(bào)警內(nèi)容對應(yīng)一個(gè)聲音文件。

      在工程應(yīng)用實(shí)踐后,作者發(fā)現(xiàn)這種方式存在以下弊端:

      1)此方式基于HMI系統(tǒng)進(jìn)行開發(fā),為保證操作終端內(nèi)容的一致性,相關(guān)終端均需同步實(shí)施。在后期使用中,如果要增、刪、改配置,需要到各HMI操作終端中修改組態(tài)畫面,工作量煩瑣。

      2)播放的聲音文件需提前錄制,并存放于計(jì)算機(jī)中。一旦要更改語音播放內(nèi)容,需重新錄制聲音文件并替換,不夠靈活。

      3)系統(tǒng)長時(shí)間運(yùn)行后,HMI通過VBA腳本播放聲音文件會造成操作畫面卡頓,不利于正常生產(chǎn),關(guān)鍵時(shí)刻甚至存在安全隱患。

      本文中,作者以解決上述弊端為出發(fā)點(diǎn),利用主流編程語言Python及其第三方模塊,實(shí)現(xiàn)一款靈活、友好、智能的羅克韋爾語音報(bào)警系統(tǒng)。

      1 系統(tǒng)設(shè)計(jì)與開發(fā)

      主要過程如下:

      1)系統(tǒng)啟動后,加載UI界面、讀取Excel配置文件并將配置信息顯示到UI界面。

      2)檢查系統(tǒng)配置是否正常,如IP數(shù)量與槽號數(shù)量是否一致、IP地址是否有效等。如果系統(tǒng)配置不正常則退出系統(tǒng)運(yùn)行。

      3)從本地磁盤讀取歷史報(bào)警記錄文件并顯示到前端UI界面。

      4)定周期采集PLC變量值。如果有新的報(bào)警產(chǎn)生,則修改實(shí)時(shí)數(shù)據(jù)圖中變量對應(yīng)的當(dāng)前值、背景色,語音播放報(bào)警內(nèi)容,將報(bào)警信息顯示到歷史報(bào)警表格并保存到歷史報(bào)警文件中。

      5)如果系統(tǒng)配置不正常或人工點(diǎn)擊“關(guān)閉”按鈕,則系統(tǒng)退出。

      6)人機(jī)接口程序根據(jù)信號、槽函數(shù)自動觸發(fā)。

      系統(tǒng)運(yùn)行流程如圖1所示。

      1.1 系統(tǒng)配置表格設(shè)計(jì)

      該表格用于保存系統(tǒng)配置信息,包括標(biāo)簽所在CPU的IP地址、CPU槽號、Tag地址及對應(yīng)語音報(bào)警內(nèi)容。系統(tǒng)配置如表1所示。

      在后續(xù)使用中,如果要增加、減少、修改報(bào)警點(diǎn)或更改語音報(bào)警內(nèi)容,只需修改本配置表格即可,程序無須改動,使得系統(tǒng)應(yīng)用非常靈活、方便。

      1.2 前端UI界面開發(fā)

      基于PySide2模塊開發(fā)前端UI界面,內(nèi)容包括實(shí)時(shí)數(shù)據(jù)區(qū)、歷史數(shù)據(jù)區(qū)、狀態(tài)欄區(qū)、公共操作區(qū),用于系統(tǒng)配置信息、實(shí)時(shí)及歷史報(bào)警數(shù)據(jù)的可視化顯示及人機(jī)操作。

      系統(tǒng)運(yùn)行后,實(shí)時(shí)數(shù)據(jù)界面及歷史數(shù)據(jù)界面分別如圖2、圖3所示。

      1)實(shí)時(shí)數(shù)據(jù)區(qū)。通過點(diǎn)擊軟件頂部“實(shí)時(shí)數(shù)據(jù)”按鈕進(jìn)行切換,用于顯示本軟件名稱、開發(fā)作者、適用系統(tǒng)、Excel文件配置的Tag名稱、報(bào)警內(nèi)容、系統(tǒng)采集的當(dāng)前值等信息。

      2)歷史數(shù)據(jù)區(qū)。通過點(diǎn)擊軟件頂部“歷史數(shù)據(jù)”按鈕進(jìn)行切換,用于顯示配置統(tǒng)計(jì)信息(CPU總數(shù)、Tag總數(shù)、報(bào)名總數(shù))、報(bào)警查詢窗口、顯示全部按鈕、清空報(bào)警按鈕、歷史報(bào)警信息(報(bào)警時(shí)間、報(bào)警IP、報(bào)警Tag、報(bào)警內(nèi)容)。

      3)狀態(tài)欄區(qū)。位于軟件底部左半部分,用于顯示與軟件相關(guān)的狀態(tài)信息(如:配置是否異常、軟件授權(quán)狀態(tài)等)。

      4)公共操作區(qū)。位于軟件底部右半部分,包括:“聲音測試”按鈕,用于測試系統(tǒng)音頻狀態(tài);“關(guān)于作者”按鈕,點(diǎn)擊后彈出作者信息窗口;“總在最前”復(fù)選框,用于選擇本軟件是否顯示在桌面最前端。

      1.3 報(bào)警記錄生成

      當(dāng)新的語音報(bào)警產(chǎn)生時(shí),報(bào)警總數(shù)加1,在歷史報(bào)警表的最后生成一條新的記錄,并同時(shí)與之前產(chǎn)生的歷史報(bào)警合并成一個(gè)報(bào)警日志文件保存到電腦硬盤中。包含報(bào)警產(chǎn)生的日期、時(shí)間、CPU的IP、報(bào)警Tag、報(bào)警內(nèi)容。后期可根據(jù)需要調(diào)用該歷史記錄進(jìn)行篩選、查詢。

      2 系統(tǒng)配置表格解析及可視化顯示

      首先,基于第三方模塊openpyxl讀取Excel配置表格,獲取系統(tǒng)配置信息;然后,進(jìn)一步對配置內(nèi)容進(jìn)行解析和整合,如總共配置了多少套PLC、每套PLC的CPU IP地址、CPU槽號、Tag地址等;最后,將數(shù)據(jù)推送至前端UI界面中,關(guān)鍵實(shí)現(xiàn)代碼如下:

      # ------將讀到的數(shù)據(jù)寫到tablewidget------

      def write_to_ui_tab1_tw(self):

      # 設(shè)置TableWidget

      # 設(shè)置列數(shù)

      self.ui.tab1_tw.setColumnCount(3)

      # 設(shè)置列數(shù)

      self.ui.tab1_tw.horizontalHeader().setStyleSheet("::section{Background-color:rgb(255,228,225)}")

      # 設(shè)置單元選中

      self.ui.tab1_tw.setSelectionBehavior(QAbstractItemView.SelectItems)

      # Tag名稱

      self.ui.tab1_tw.setHorizontalHeaderItem(0,QTableWidgetItem('Tag名稱'))

      # 報(bào)警內(nèi)容

      self.ui.tab1_tw.setHorizontalHeaderItem(1,QTableWidgetItem('報(bào)警內(nèi)容'))

      # 當(dāng)前值

      self.ui.tab1_tw.setHorizontalHeaderItem(2,QTableWidgetItem('當(dāng)前值'))

      # Tag名稱

      self.ui.tab1_tw.setColumnWidth(0,334)

      # 報(bào)警內(nèi)容

      self.ui.tab1_tw.setColumnWidth(1,399)

      # 當(dāng)前值

      self.ui.tab1_tw.setColumnWidth(2,65)

      for i in range(len(self.excel_tag_address_list)):

      self.ui.tab1_tw.insertRow(i)

      # Tag名稱

      self.ui.tab1_tw.setItem(i,0,QTableWidgetItem(self.excel_tag_address_list[i]))

      # 報(bào)警內(nèi)容

      self.ui.tab1_tw.setItem(i,1,QTableWidgetItem(self.excel_voice_alarm_content_list[i]))

      # 當(dāng)前值

      self.ui.tab1_tw.setItem(i,2,QTableWidgetItem(' '))

      3 PLC數(shù)據(jù)采集及語音報(bào)警實(shí)現(xiàn)

      基于第三方模塊pylogix,根據(jù)系統(tǒng)配置的CPU數(shù)量、槽號、IP地址,通過以太網(wǎng),定周期從各PLC中讀取標(biāo)簽數(shù)值,并判斷是否滿足語音報(bào)警觸發(fā)條件。當(dāng)標(biāo)簽值滿足語音報(bào)警條件后,利用第三方模塊win32com,調(diào)用系統(tǒng)API接口,播放標(biāo)簽對應(yīng)的語音報(bào)警內(nèi)容,播放三次后自動停止。如表1中標(biāo)簽BOOL[1]滿足上升沿條件后,則會通過電腦音頻播放“M1膠帶機(jī)故障”。若同一個(gè)掃描周期有多個(gè)標(biāo)簽滿足語音報(bào)警條件,則依次按序播放。

      PLC數(shù)據(jù)采集及語音報(bào)警實(shí)現(xiàn)的關(guān)鍵代碼為:

      # ------讀取PLC變量值------

      def read_plc_job(self):

      # 變量值列表

      tag_read_content_list = []

      try:

      # 遍歷IP列表

      for index in range(len(self.excel_ip_list)):

      with PLC() as com:

      # IP

      com.IPAddress = self.excel_ip_list[index]

      # 槽號

      com.ProcessorSlot = self.excel_slot_list[index]

      # 批量讀取單個(gè)PLC變量

      tag_read_content_temp = com.Read(self.excel_per_cpu_tag_address_list[index])

      # 將變量值存放在value_list列表中

      tag_read_content_list += tag_read_content_temp

      except:

      pass

      # ------判斷標(biāo)簽上升沿并報(bào)警------

      for index,item in enumerate(tag_read_content_list):

      value = item.Value

      value_item = self.tablewidgetitem(value)

      # 更新前臺表中value列的值

      self.ui.tab1_tw.setItem(index,2,QTableWidgetItem(value_item))

      if value == True and (self.tag_value_ons_list[index] == False):

      # 報(bào)警時(shí)間

      alarm_time = str(datetime.datetime.now())[:-7]

      # 報(bào)警IP

      alarm_ip = self.excel_ip_fill_list[index]

      # 報(bào)警標(biāo)簽

      alarm_tag = self.excel_tag_address_list[index]

      # 報(bào)警內(nèi)容

      alarm_content = self.excel_voice_alarm_content_list[index]

      # 報(bào)警信息推送到UI

      insert_row_num = self.ui.tab2_tw.rowCount()

      self.ui.tab2_tw.insertRow(insert_row_num)

      # 報(bào)警時(shí)間

      self.ui.tab2_tw.setItem(insert_row_num,0,QTableWidgetItem(alarm_time))

      # 報(bào)警IP

      self.ui.tab2_tw.setItem(insert_row_num,1,QTableWidgetItem(alarm_ip))

      # 報(bào)警Tag

      self.ui.tab2_tw.setItem(insert_row_num,2,QTableWidgetItem(alarm_tag))

      # 報(bào)警內(nèi)容

      self.ui.tab2_tw.setItem(insert_row_num,3,QTableWidgetItem(alarm_content))

      # 累計(jì)報(bào)警總數(shù)

      self.alarm_num = self.ui.tab2_tw.rowCount()

      self.tab2_alarm_num_signal.set_text.emit(self.ui.tab2_alarm_num,str(self.alarm_num))

      # 保存歷史報(bào)警到本地文件

      # 將UI數(shù)據(jù)保存到csv文件中

      self.download_job()

      # 播放語音報(bào)警

      self.speaker.Speak(self.excel_voice_alarm_content_list[index])

      self.speaker.Speak(self.excel_voice_alarm_content_list[index])

      self.speaker.Speak(self.excel_voice_alarm_content_list[index])

      self.tag_value_ons_list[index] = value

      4 UI接口程序?qū)崿F(xiàn)

      UI接口程序主要用于實(shí)現(xiàn)人機(jī)交互功能:

      1)實(shí)時(shí)數(shù)據(jù)顯示:將Excel表格中配置的Tag名稱、報(bào)警內(nèi)容、PLC當(dāng)前值推送到前端UI界面。其中,當(dāng)前值狀態(tài)的定義如下。

      標(biāo)簽值為0時(shí),文本內(nèi)容顯示False,背景色為綠色,顏色代碼#99CC33;

      標(biāo)簽值為1時(shí),文本內(nèi)容顯示True,背景色為淺紅色,顏色代碼#FF9999;

      標(biāo)簽值讀取錯誤(配置的CPU信息錯誤或標(biāo)簽地址錯誤等)時(shí),文本內(nèi)容顯示None,背景色為黃色,顏色代碼#FFFF00。

      2)配置信息顯示。程序啟動之初,讀取Excel配置文件,獲取CPU總數(shù)、Tag總數(shù),推送至配置信息表中;從歷史報(bào)警文件中統(tǒng)計(jì)歷史報(bào)警總數(shù),推送至配置信息表中。

      3)歷史數(shù)據(jù)“報(bào)警查詢”。獲取“選擇報(bào)警內(nèi)容”下拉菜單的操作選項(xiàng)(下拉菜單選擇Al3l或某一項(xiàng)報(bào)警內(nèi)容),通過歷史數(shù)據(jù)查詢,將結(jié)果顯示在歷史報(bào)警表格中。

      4)歷史數(shù)據(jù)“顯示全部”。獲取“顯示全部”按鈕的操作信號,將系統(tǒng)產(chǎn)生的所有報(bào)警記錄顯示在下部的歷史報(bào)警表格中。

      5)歷史數(shù)據(jù)“清空報(bào)警”。獲取“清空報(bào)警”按鈕的操作信號,清空歷史報(bào)警表格內(nèi)容及硬盤中的歷史記錄文件。

      6)“聲音測試”。獲取“聲音測試”按鈕的操作信號,發(fā)出音頻“聲音測試”,用于測試主機(jī)聲卡、揚(yáng)聲器等是否正常,音量大小是否合適。

      7)“關(guān)于作者”。獲取“關(guān)于作者”按鈕的操作信號,彈出關(guān)于作者信息的UI界面,方便使用人員與作者進(jìn)行技術(shù)溝通和交流。

      8)“總在最前”。獲取“總在最前”復(fù)選框的當(dāng)前狀態(tài),用于控制該軟件是否總是顯示在桌面最前端。

      5 結(jié) 論

      由于本系統(tǒng)具有優(yōu)秀的通用性及良好的擴(kuò)展性,在羅克韋爾工程應(yīng)用中僅通過修改Excel配置文件即可滿足各種項(xiàng)目需求,大大節(jié)省了后期開發(fā)過程中的人工成本;同時(shí),該系統(tǒng)獨(dú)立于原有HMI系統(tǒng),在開發(fā)、應(yīng)用過程中不會對原有HMI產(chǎn)生影響,更可靠、更安全。

      參考文獻(xiàn):

      [1] 王維波,栗寶鵑,張曉東.Python Qt GUI與數(shù)據(jù)可視化編程 [M].北京:人民郵電出版社,2019:12-16.

      [2] 韋斯·麥金尼.利用Python進(jìn)行數(shù)據(jù)分析 [M].徐敬,譯.北京:機(jī)械工業(yè)出版社,2018:168-184.

      [3] 李慶輝.深入淺出Pandas:利用Python進(jìn)行數(shù)據(jù)處理與分析 [M].北京:機(jī)械工業(yè)出版社,2021:89-105.

      [4] 詹卡洛·扎克內(nèi). Python并行編程實(shí)戰(zhàn):第2版 [M].蘇鈺涵,譯.北京:中國電力出版社,2020:33-37.

      [5] 布拉德利.Python數(shù)據(jù)結(jié)構(gòu)與算法分析:第3版 [M].呂能,刁壽鈞,譯.北京:人民郵電出版社,2023:91-103.

      [6] 宋勇江,鞏偉.RSView32利用VBA實(shí)現(xiàn)報(bào)警歷史查詢 [J].自動化技術(shù)與應(yīng)用,2014,33(4):85-87+94.

      [7] 張蕾,王婧博,李曉丹.基于S7-200 PLC的步進(jìn)電機(jī)運(yùn)動控制系統(tǒng)設(shè)計(jì) [J].自動化技術(shù)與應(yīng)用,2024,43(2):9-12.

      [8] 王鵬.Pylogix與Rockwell系列PLC通信的研究 [J].自動化應(yīng)用,s97STBw7wiwDIikkLzyftalIvIGOe+H6c/4Lk59Au7o=2024,65(1):44-46+49.

      [9] 郭星濤,彭蓮香.基于Python的電子像控點(diǎn)點(diǎn)之記程序設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2024,37(3):75-77.

      [10] 蔡文樂,秦立靜.基于Python爬蟲的招聘數(shù)據(jù)可視化分析 [J].物聯(lián)網(wǎng)技術(shù),2024,14(1):102-105.

      DOI:10.19850/j.cnki.2096-4706.2024.17.033

      作者簡介:江海濤(1983—),男,漢族,江蘇南京人,電子信息工程師,本科,研究方向:鋼鐵行業(yè)自動化、數(shù)字化和智能化應(yīng)用。

      收稿日期:2024-03-29

      Design and Implementation of Rockwell Voice Alarm System Based on Python

      JIANG Haitao

      (Baosight Software (Nanjing) Co., Ltd., Nanjing 210039, China)

      Abstract: With the continuous expansion of modern factory production scale, the HMI screens for monitoring operation positions are also increasing. Faced with a large number of operating terminals, in addition to normal production operations, timely understanding and tracking processing of key alarms by operators is particularly important. Based on the Python development environment, this paper takes the implementation of the Rockwell voice alarm system as the starting point, and uses third-party ecological modules such as PySide2, Pylogix, and win32com, aiming to design an intelligent system that can automatically play voice alarms according to the real-time tag values of the Rockwell PLC.

      Keywords: Python; PySide2; Pylogix; win32com; Rockwell; voice alarm

      庄河市| 南召县| 临夏市| 屏东县| 武穴市| 根河市| 吉林市| 桐柏县| 通辽市| 晋江市| 珠海市| 宁陕县| 工布江达县| 剑川县| 江山市| 长海县| 长岭县| 稷山县| 仁布县| 福鼎市| 邮箱| 司法| 平远县| 双鸭山市| 冕宁县| 安阳市| 抚顺县| 双牌县| 佳木斯市| 阳春市| 武汉市| 巫溪县| 左权县| 全椒县| 巴里| 龙山县| 黄山市| 宣威市| 溧阳市| 荣成市| 通辽市|