亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于通用型MCU 的開源PLC 上下位機(jī)指令一致性研究

        2021-04-28 03:12:48王庭有張才勇
        化工自動(dòng)化及儀表 2021年2期
        關(guān)鍵詞:指令語言

        羅 驍 王庭有 張才勇

        (昆明理工大學(xué)機(jī)電工程學(xué)院)

        昆明理工大學(xué)機(jī)電工程學(xué)院張才勇設(shè)計(jì)搭建的小微型嵌入式PLC 以STM32MCU 為CPU的核心硬件,采用層疊式設(shè)計(jì),由3 塊PCB 板疊加構(gòu)成。 頂層PCB 板為整個(gè)PLC 的核心板塊,集成MCU 芯片、EEPROM 芯片、485 通信接口和輸入輸出提示燈。 二層PCB 板為PLC 與控制對象的輸入輸出交流層,包含光耦輸入、繼電器輸入等外設(shè)元件。 底層PCB 板是PLC 的電源層,集成了交流轉(zhuǎn)直流的多個(gè)降壓模塊,可為PLC 和外接模塊供電。該小微型嵌入式PLC 的特點(diǎn)在于有極強(qiáng)的通用性和定制性,用戶可以根據(jù)自身需求的不同, 對PLC 的核心板進(jìn)行裁剪或添加外設(shè),即可在不同控制情景下實(shí)現(xiàn)用途。

        目前, 小微型PLC 具有較高的市場占有率,并以其較高的性價(jià)比逐漸替代傳統(tǒng)小型PLC 設(shè)備,相比于現(xiàn)有的整塊式PLC,開發(fā)層疊結(jié)構(gòu)的PLC 擴(kuò)展性更好、更靈活。 因此筆者對層疊結(jié)構(gòu)的小微型嵌入式PLC 上下位機(jī)指令一致性進(jìn)行研究,并設(shè)計(jì)實(shí)驗(yàn)驗(yàn)證指令的實(shí)現(xiàn)情況。

        1 PLC 指令實(shí)現(xiàn)

        1.1 編程語言的選擇

        根據(jù)國際電工委員會制定的工業(yè)控制編程語言標(biāo)準(zhǔn)IEC 1131-3,PLC 的編程語言包括以下5 種:梯形圖語言(LD)、指令表語言(IL)、功能模塊圖語言(FBD)、順序功能流程圖語言(SFC)和結(jié)構(gòu)化文本語言(ST)[1]。其中,指令表語言是與匯編語言類似的一種助記符編程語言,和匯編語言一樣由操作碼和操作數(shù)組成。 在無計(jì)算機(jī)的情況下,適合采用PLC 手持編程器對用戶程序進(jìn)行編制。 同時(shí),指令表語言與梯形圖語言一一對應(yīng),在PLC 編程軟件下可以相互轉(zhuǎn)換[2]。

        由于其他編程語言編寫的控制程序最終都需要轉(zhuǎn)換為指令序列來執(zhí)行,并且利用指令表語言編寫的程序通??梢砸宰罡咚俣冗\(yùn)行[3~5],因此筆者選擇指令表語言作為PLC 編程軟件使用的編程語言。

        1.2 指令實(shí)現(xiàn)

        1.2.1 基本邏輯運(yùn)算

        PLC 中最基本的運(yùn)算方式是邏輯運(yùn)算,基本邏輯運(yùn)算包含“與”、“或”、“非”3 種運(yùn)算,其余的邏輯運(yùn)算均以此為基礎(chǔ)實(shí)現(xiàn),因此首先要實(shí)現(xiàn)基本邏輯運(yùn)算(圖1)。

        1.2.2 邏輯堆棧

        邏輯堆棧是PLC 在進(jìn)行邏輯運(yùn)算時(shí)用于存儲運(yùn)算結(jié)果和中間值的區(qū)域, 是PLC 運(yùn)行的基礎(chǔ),一般采用整段連續(xù)的區(qū)域作為邏輯堆棧[6]。棧深關(guān)系到PLC 的運(yùn)算能力,將PLC 的邏輯堆棧棧深和指針定義如下:

        圖1 基本邏輯運(yùn)算定義

        上述代碼定義了邏輯堆棧的棧深為40,頂層作為運(yùn)算結(jié)果的存儲區(qū), 余下39 層用于存儲運(yùn)算的中間值。 使用棧頂指針logical_array_pointer操作堆棧,當(dāng)有數(shù)據(jù)入棧時(shí),丟棄底層數(shù)據(jù),將堆棧內(nèi)容依次下移,騰空棧頂單元壓入數(shù)據(jù);當(dāng)有數(shù)據(jù)出棧時(shí),彈出頂層數(shù)據(jù),將堆棧內(nèi)容依次上移,棧底單元補(bǔ)0。

        定義邏輯堆棧后,需要PLC 來實(shí)現(xiàn)對堆棧的操作,因此要定義操作堆棧的指令,如圖2 所示。

        圖2 部分堆棧操作指令定義

        2 編程軟件與PLC 指令一致性

        為了保證PLC 嚴(yán)格按照所編指令進(jìn)行工作,需要將PLC 能夠識別的數(shù)字編碼與編程軟件所用的操作碼和操作數(shù)一一對應(yīng)起來,表1 給出了部分操作碼和操作數(shù)對應(yīng)的編碼。 將表1 所示的操作碼(操作數(shù))對應(yīng)的編碼寫入文件ins.m 中,并加入MATLAB,以保證編寫出的PLC 指令能夠正確編譯。

        表1 部分操作碼和操作數(shù)對應(yīng)的編碼

        PLC 要執(zhí)行指令, 首先需要識別指令函數(shù),具體實(shí)現(xiàn)方法為:每當(dāng)執(zhí)行完任一指令后,指向用戶程序存儲區(qū)的指針會根據(jù)本條指令的占用內(nèi)存自動(dòng)向下偏移m(m=1,3,6)個(gè)字節(jié),以達(dá)到正確取址和執(zhí)行下一條指令的目的。 例如執(zhí)行只有操作碼的LPS 指令,執(zhí)行指令后指針向下偏移1 個(gè)字節(jié), 繼續(xù)執(zhí)行下一條指令。 若執(zhí)行OUT Q0 指令, 操作碼OUT 占1 個(gè)字節(jié),Q0 占2 個(gè)字節(jié),則執(zhí)行該指令后指針向下偏移3 個(gè)字節(jié)。 然后編寫ins_exc.c 文件,在其中定義用戶程序執(zhí)行函數(shù)user_pro_exc (), 該函數(shù)的執(zhí)行流程如圖3所示。

        圖3 user_pro_exc()函數(shù)執(zhí)行流程

        如圖3 所示,執(zhí)行user_pro_exc()函數(shù)時(shí),首先判斷用戶程序存儲區(qū)內(nèi)是否有用戶程序,如果用戶程序指針user_pro_storage_p 指向的地址內(nèi)容為0,則說明沒有用戶程序,結(jié)束函數(shù)執(zhí)行;反之,如果不為0,則執(zhí)行construction()函數(shù),該函數(shù)的執(zhí)行流程如圖4 所示。

        圖4 construction()函數(shù)執(zhí)行流程

        如圖4 所示,開始執(zhí)行construction()函數(shù)后,首先執(zhí)行選擇函數(shù)select()對用戶程序中的指令進(jìn)行選擇,對于沒有操作數(shù)的指令,如LPS 指令等直接執(zhí)行后即結(jié)束該函數(shù)。 對于既有操作碼又有操作數(shù)的指令, 如LD I0 指令等進(jìn)一步匹配到sub_select()函數(shù)后再執(zhí)行操作,sub_select()函數(shù)能為這些指令提供I、Q、M、C、T 等操作數(shù)。

        完成PLC 對函數(shù)指令的識別工作后,即可達(dá)到使PLC 正確執(zhí)行上位機(jī)用戶程序指令的目的。

        使用MATLAB GUI 工具設(shè)計(jì)簡單的編程界面(圖5),實(shí)現(xiàn)PLC 程序的編程、編譯和下載功能。 該編程軟件界面左側(cè)為STL 指令編寫區(qū)域,在此區(qū)域內(nèi)編寫所需的用戶程序;右側(cè)是編譯提示區(qū)域, 當(dāng)指令編寫完成后點(diǎn)擊編譯按鈕,編譯提示區(qū)域會顯示編譯后的十六進(jìn)制數(shù)。

        圖5 PLC 編程軟件界面

        3 PLC 指令驗(yàn)證實(shí)驗(yàn)

        設(shè)計(jì)實(shí)驗(yàn)對PLC 的邏輯指令進(jìn)行驗(yàn)證,實(shí)驗(yàn)指令包括:觸點(diǎn)指令LD、A、O、LDN、AN、ON;邏輯堆棧指令A(yù)LD、OLD、LPS、LRD、LPP; 輸出指令OUT。

        在PC 端的PLC 編程軟件中輸入指令表指令,編譯如圖6 所示。

        圖6 PLC 指令

        在4 個(gè)輸出端口上各連接一個(gè)LED,當(dāng)輸出端口得電時(shí)二極管發(fā)光,輸出端口不得電時(shí)二極管熄滅。

        該實(shí)驗(yàn)中設(shè)計(jì)多種接通方案, 具體如下:僅I0 或I3 得電時(shí),Q3 得電,其余回路不接通。 I0 和I2 得電時(shí),僅Q3 得電,其余回路不接通;若同時(shí)再接通I4、I5 或I6,則在Q3 保持燈亮的情況下,分別有Q0、Q1 或Q2 燈亮,說明串聯(lián)電路接通。I0和I3 得電時(shí)的情況與I0 和I2 得電情況一致。

        通過實(shí)驗(yàn),觀察到如下現(xiàn)象:

        a. 啟動(dòng)PLC,按下I0,Q3 得電,對應(yīng)的LED點(diǎn)亮,其余LED 保持熄滅;斷開I0,按下I3,Q3得電,對應(yīng)的LED 點(diǎn)亮,其余LED 保持熄滅。

        b. 接通I0 和I2 的同時(shí),再按下I4,Q3 和Q0得電,對應(yīng)的LED 點(diǎn)亮;斷開I4,接通I5,Q3 和Q1 得電,對應(yīng)的LED 點(diǎn)亮,其余LED 保持熄滅;斷開I5,接通I6,Q3 和Q2 得電,對應(yīng)的LED 點(diǎn)亮,其余LED 保持熄滅。

        c. 接通I0 和I3 的同時(shí),再按下I4,Q3 和Q0得電,對應(yīng)的LED 點(diǎn)亮;斷開I4,接通I5,Q3 和Q1 得電,對應(yīng)的LED 點(diǎn)亮,其余LED 保持熄滅;斷開I5,接通I6,Q3 和Q2 得電,對應(yīng)的LED 點(diǎn)亮,其余LED 保持熄滅。

        綜上所述,實(shí)驗(yàn)結(jié)果與設(shè)計(jì)方案一致,說明使用筆者設(shè)計(jì)的指令表語言編程器編寫的用戶指令在下位機(jī)PLC 中得到了正確執(zhí)行。

        4 結(jié)束語

        筆者使用MATLAB 編寫出的PLC 指令表語言編程軟件能夠正確進(jìn)行指令的編譯,并且能夠在STM32MCU 的下位機(jī)PLC 上正確執(zhí)行, 說明上位機(jī)和下位機(jī)的指令具有一致性,是一個(gè)能實(shí)際應(yīng)用的編程軟件。

        猜你喜歡
        指令語言
        聽我指令:大催眠術(shù)
        語言是刀
        文苑(2020年4期)2020-05-30 12:35:30
        ARINC661顯控指令快速驗(yàn)證方法
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        電子測試(2018年18期)2018-11-14 02:30:34
        讓語言描寫搖曳多姿
        多向度交往對語言磨蝕的補(bǔ)正之道
        累積動(dòng)態(tài)分析下的同聲傳譯語言壓縮
        殺毒軟件中指令虛擬機(jī)的脆弱性分析
        我有我語言
        一種基于滑窗的余度指令判別算法
        亚洲五码av在线观看| 免费av一区二区三区无码| 国产麻豆精品一区二区三区v视界 妺妺窝人体色www看美女 | 青青草针对华人超碰在线| 成人久久精品人妻一区二区三区| av日韩高清一区二区| 人妻熟妇乱又伦精品视频| 亚洲熟女乱色综合亚洲av| 特黄aa级毛片免费视频播放| 久久精品国产亚洲av高清蜜臀| 粉嫩极品国产在线观看免费一区| 亚洲国产av无码专区亚洲av| 天堂影院一区二区三区四区| 国产人澡人澡澡澡人碰视频| 无码 免费 国产在线观看91| 日韩精品免费视频久久| 国产精品国产三级国产av中文| 男人的天堂av网站| 熟女少妇在线视频播放| 狠狠躁天天躁无码中文字幕图| 国产国语一级免费黄片| 中文字幕一区二区三区乱码人妻| 色综合av综合无码综合网站| 精品人妻人人做人人爽| 欧美人妻日韩精品| 狠狠色欧美亚洲综合色黑a| 久久99精品综合国产女同| 中国人妻与老外黑人| 国产免费久久精品国产传媒| 欧美亚洲另类自拍偷在线拍| 亚洲国产av精品一区二| 亚洲不卡高清av网站| 国语对白嫖老妇胖老太| 动漫在线无码一区| 中文亚洲一区二区三区| 国产自拍av在线观看视频| 亚洲av日韩精品久久久久久久| 亚洲美女影院| 黑丝美女被内射在线观看| 精品久久一品二品三品| 狠狠摸狠狠澡|