精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在單片機(jī)上實(shí)現(xiàn)PLC邏輯

GReq_mcu168 ? 來(lái)源:cg ? 2018-12-07 16:30 ? 次閱讀

有朋友想定制一個(gè)凈水機(jī)控制器,有一些獨(dú)特的功能要增加,但是商品控制板沒(méi)有這樣的功能,問(wèn)我能否做一個(gè),我覺(jué)得單片機(jī)完全能滿足這種簡(jiǎn)單的控制需要,上手開(kāi)始編程序時(shí)候突然感到,用PLC邏輯編這種功能是非常簡(jiǎn)單輕松的,而如果用匯編或C編卻感覺(jué)有點(diǎn)棘手,編程效率不高,所以想為何不在單片機(jī)上實(shí)現(xiàn)PLC的邏輯呢?

上網(wǎng)搜索嘗試看能否找到合適的程序下載來(lái)稍微改改就能用的呢?方案幾年前就有了,實(shí)際上是利用三菱的低檔PLC編程軟件編輯好梯形圖,存盤后用專用的格式轉(zhuǎn)換工具轉(zhuǎn)換成HEX單片機(jī)燒寫文件燒進(jìn)去,嘗試下載三菱PLC工具軟件,但是在我的WIN7-64位系統(tǒng)上不能正常工作,好容易換了系統(tǒng)裝好開(kāi)發(fā)工具,但是初次上手這款開(kāi)發(fā)工具,界面挺復(fù)雜的,懶得研究各個(gè)按鈕的使用,由于是單片機(jī)的硬件,對(duì)于程序的編制和轉(zhuǎn)換有很多限制條件,否則是轉(zhuǎn)換不成功的,嫌麻煩,放棄!

某寶倒是有百元PLC板出售,但是為了這么個(gè)簡(jiǎn)單的東西專門買個(gè)全功能板子有點(diǎn)浪費(fèi),而且其編程軟件仍然是三菱的盜版軟件,算了,再想辦法把。

由于工作中經(jīng)常接觸PLC程序,對(duì)其工作原理也略知一二,網(wǎng)上也有相關(guān)的說(shuō)明介紹,其實(shí)就是三個(gè)主要步驟,第一步掃描IO輸入,第二步執(zhí)行邏輯,第三步輸出邏輯到IO,很簡(jiǎn)單的,最早PLC也是用單片機(jī)實(shí)現(xiàn)的,我為何不用匯編在51上搭建一個(gè)架構(gòu),簡(jiǎn)單的邏輯編制進(jìn)去就能運(yùn)轉(zhuǎn)呢?

其中邏輯執(zhí)行步驟還是有點(diǎn)意思的,需要把PLC邏輯翻譯成單片機(jī)的匯編語(yǔ)言執(zhí)行,這塊開(kāi)始也沒(méi)有把握,后來(lái)搜索到一篇百度文章,介紹了一下三菱PLC邏輯是如何翻譯成匯編的,我看了下估計(jì)其實(shí)是利用反匯編工具把HEX反編譯成的ASM代碼,并不清晰明了,而且還帶著反匯編時(shí)候的行號(hào),僅供參考了。

搜索結(jié)果中也有幾篇論文,涉及到在51單片機(jī)上實(shí)現(xiàn)PLC邏輯的內(nèi)容,但是那些論文都是充數(shù)的,僅僅幾個(gè)IO邏輯,沒(méi)有什么定時(shí)器,計(jì)數(shù)器功能的體現(xiàn),哎!僅供參考!

看來(lái)這個(gè)PLC系統(tǒng)還是需要自己寫了!OK!既然決定自己重寫,那就開(kāi)工吧!利用春節(jié)休假時(shí)間,編制了如下ASM51匯編PLC代碼:

代碼主要架構(gòu)如下:

1、IO定義部分:根據(jù)所使用的單片機(jī)IO口數(shù)量,任意指定多少個(gè)I多少個(gè)O,那幾個(gè)腳是I,哪幾個(gè)是O都可以任意指定,在這個(gè)51系統(tǒng)里面設(shè)計(jì)了最大32個(gè)I,32個(gè)O,占用64個(gè)位尋址區(qū)域,其實(shí)用不到那么多,也可以分配給其它需要的標(biāo)志位用,因?yàn)?1系統(tǒng)總可位尋址地址只有128位,需要仔細(xì)分配.

2、位尋址變量定義(包括各類標(biāo)志位,臨時(shí)變量寄存器等等)目前設(shè)計(jì)了8個(gè)計(jì)時(shí)器的Timer DN, Timer EN,共16位,8個(gè)計(jì)數(shù)器的counter reset 和counter DN 標(biāo)志位共16個(gè),專用于上升沿下降沿檢測(cè)的標(biāo)志位4對(duì),占用8個(gè),剩余用于臨時(shí)變量,這些地址分配在這塊變量定義區(qū)域可以根據(jù)需要任意調(diào)整

3、內(nèi)存規(guī)劃,包括堆棧區(qū)的設(shè)置,定時(shí)器,計(jì)數(shù)器的累加值和預(yù)設(shè)值地址等等,目前初步定義8個(gè)計(jì)數(shù)器的當(dāng)前計(jì)數(shù)值和預(yù)設(shè)值,8個(gè)計(jì)時(shí)器的當(dāng)前計(jì)數(shù)值和預(yù)設(shè)值,共占用32個(gè)內(nèi)存地址,也可根據(jù)需要調(diào)整,51單片機(jī)片內(nèi)總的用戶可用內(nèi)存地址包括堆棧區(qū)只有128個(gè),實(shí)際去除位尋址區(qū)和堆棧區(qū)可用的估計(jì)只有80個(gè)左右,不過(guò)對(duì)于小程序應(yīng)該夠用的。沒(méi)必要去增加成本擴(kuò)展RAM

4、上電初始化,包括0.01秒微定時(shí)器設(shè)置,內(nèi)存清零,中斷設(shè)置,如果想增加串口功能也是可以的,51本來(lái)就有兩個(gè)定時(shí)器,無(wú)非多寫一個(gè)串口中斷服務(wù)程序就是了。

5、微定時(shí)器中斷服務(wù)程序編寫,單片機(jī)每0.01秒定時(shí)中斷時(shí)執(zhí)行,進(jìn)行內(nèi)存時(shí)基標(biāo)志位刷新,用于提醒主程序相應(yīng)時(shí)間到了,基本的時(shí)基設(shè)計(jì)了0.01秒,0.1秒,1秒,10秒,1分鐘,1小時(shí),1天,1周八個(gè)時(shí)間標(biāo)志位,其實(shí)真沒(méi)必要,不過(guò)自己編寫架構(gòu)就是好玩,想設(shè)計(jì)幾個(gè)就設(shè)計(jì)幾個(gè)哈哈!

6、下面是主要PLC邏輯,執(zhí)行時(shí)是不停掃描循環(huán)執(zhí)行的,與真實(shí)的PLC運(yùn)行結(jié)構(gòu)是一樣的,當(dāng)然咱們編的就要簡(jiǎn)單許多了,沒(méi)有那么多的功能。而且用匯編編寫執(zhí)行效率要比C高,目前1K代碼的匯編程序可以寫好多,而如果用C寫再編譯就會(huì)大許多,很多時(shí)候廉價(jià)小單片機(jī)就裝不下了。

7、掃描開(kāi)始是對(duì)定時(shí)器計(jì)數(shù)器處理,如果某計(jì)時(shí)器的相應(yīng)時(shí)基標(biāo)志位置位,則處理對(duì)應(yīng)程序用定時(shí)器的狀態(tài)判斷與設(shè)置,計(jì)數(shù)器內(nèi)存累加,狀態(tài)判斷與設(shè)置,用于主邏輯執(zhí)行部分執(zhí)行;對(duì)于計(jì)數(shù)器主要是判斷是否有計(jì)數(shù)器復(fù)位請(qǐng)求以及進(jìn)行當(dāng)前計(jì)數(shù)值與預(yù)設(shè)值是否相等判斷,置位相應(yīng)標(biāo)志位.

8、輸入掃描,這塊很簡(jiǎn)單,就是把輸入IO口復(fù)制到內(nèi)存相應(yīng)區(qū)域內(nèi);

9、正式邏輯執(zhí)行:這塊直接就是按照梯形圖行的概念,每一個(gè)梯形圖行,就是一段匯編代碼,為了翻譯時(shí)候方便,直接把邏輯就在注釋行內(nèi)形象的用符號(hào)畫出來(lái)。

邏輯的翻譯還是有點(diǎn)技巧,實(shí)現(xiàn)了基本IO輸入,與或非邏輯,定時(shí)器以及計(jì)數(shù)器功能,外加上升沿下降沿判斷等功能,這些基本的PLC功能都能在這個(gè)小架構(gòu)里面實(shí)現(xiàn),盡管不是十分完美例如定時(shí)器狀態(tài)更新的時(shí)效性由于架構(gòu)問(wèn)題還不能達(dá)到每次掃描更新,對(duì)于上升下降沿的判斷需要更多的內(nèi)存和語(yǔ)句實(shí)現(xiàn)等等,但是對(duì)于簡(jiǎn)單的應(yīng)用還是沒(méi)有問(wèn)題的.

10、邏輯輸出,這塊也很簡(jiǎn)單,就是把對(duì)應(yīng)的邏輯運(yùn)算結(jié)果輸出到單片機(jī)的IO口即可.

11、后期操作部分,也就是每次掃描運(yùn)算結(jié)束后還有余力進(jìn)行其它需要功能的輸出,這塊在真正PLC里面也是很重要的,應(yīng)該會(huì)進(jìn)行邏輯效驗(yàn),遠(yuǎn)程通訊等功能,咱這個(gè)就都簡(jiǎn)化掉了,僅僅為了測(cè)試掃描時(shí)間對(duì)一個(gè)內(nèi)存變量進(jìn)行增一操作而已,可以調(diào)用看看掃描周期時(shí)間是否超過(guò)了最小定時(shí)器時(shí)間等等輔助功能. 實(shí)測(cè)12M時(shí)鐘0.01秒執(zhí)行了這個(gè)小邏輯多達(dá)70多遍!

架構(gòu)有了,具體邏輯要怎么寫,最好還是在PLC模擬器上先試著編寫一下,功能沒(méi)問(wèn)題了再抄到我們的單片機(jī)里面來(lái),進(jìn)行逐句翻譯,因?yàn)閱纹瑱C(jī)匯編語(yǔ)言的調(diào)試還是很麻煩的,畢竟不直觀,還是在PLC模擬器里面做好了再搬進(jìn)來(lái)比較好。

Keil里面編譯成HEX文件后可以直接刷寫進(jìn)單片機(jī)使用了,真正用之前最好還是要根據(jù)單片機(jī)的晶振時(shí)鐘,再調(diào)整一下微定時(shí)器的定時(shí)參數(shù),盡量符合0.01秒的要求,不要偏差太大,還有一種方法是利用proteus軟件仿真硬件運(yùn)行也是不錯(cuò)的。

通過(guò)反復(fù)修改匯編程序,通過(guò)仿真測(cè)試到目前為止我們只是完成了PLC芯片邏輯的軟件編寫,下面就可以燒寫進(jìn)51內(nèi)核的單片機(jī)內(nèi)實(shí)際運(yùn)行了,這里我使用的是STC的國(guó)產(chǎn)單片機(jī),15W408系列,DIP20替換AT89C2051還能多增加幾個(gè)IO腳,僅僅幾元,價(jià)格便宜,1T內(nèi)核,性能強(qiáng)勁(之前寫的0.01秒掃描70多次是在仿真環(huán)境下,12T的89C2051達(dá)到的性能,如果使用STC的1T系列要注意實(shí)際運(yùn)行速度會(huì)增加12倍,達(dá)到0.01秒掃700多次,有時(shí)候太快了也會(huì)引起煩惱呵呵),IO可以設(shè)定為強(qiáng)推挽,驅(qū)動(dòng)力強(qiáng),串口直接下載程序,編程方便,對(duì)于非專業(yè)應(yīng)用,給DIYer做點(diǎn)小東西還是很合適的.使用STC專用下載線(僅僅十幾塊,比別的芯片下載編程器可便宜多了,甚至使用5元的USB轉(zhuǎn)TTL串口線也能用,只是需要手動(dòng)斷電一次而已,專用的下載線增加了自動(dòng)斷電功能,使下載更方便些)下載進(jìn)芯片,得到一只帶程序的芯片.

利用面包板搭建測(cè)試電路實(shí)際驗(yàn)證邏輯功能,如果邏輯不滿意或者定時(shí)時(shí)間不合適還可以回去修改程序,重新編譯下裝,直到滿意為止,為了能夠應(yīng)用到實(shí)際環(huán)境中,還需要為它配上電源電路,輸入按鍵開(kāi)關(guān),輸出驅(qū)動(dòng)三極管或繼電器等硬件才能和實(shí)際的應(yīng)用環(huán)境配合使用,發(fā)揮預(yù)想的作用。

實(shí)際應(yīng)用中對(duì)于抗干擾還是需要花費(fèi)一些心思的,干擾來(lái)自一下幾個(gè)方面:

1、電磁閥動(dòng)作時(shí)候產(chǎn)生的電磁脈沖和反電動(dòng)勢(shì),這個(gè)可以使用二極管做續(xù)流,來(lái)消除電磁閥斷電反電動(dòng)勢(shì)脈沖,通過(guò)增加光耦進(jìn)行輸出隔離,也可以提高抗干擾性能;

2、對(duì)于開(kāi)關(guān)輸入通道要考慮單片機(jī)輸入電阻是比較高的,長(zhǎng)線容易引入外部干擾,這個(gè)問(wèn)題可以通過(guò)在輸入引腳外加1K上拉電阻的方法來(lái)降低輸入阻抗,達(dá)到抗干擾的目的;

3、電源也是干擾源,因?yàn)榇蠊β?a target="_blank">電機(jī)和電磁閥的動(dòng)作都會(huì)造成24V電源的瞬間劇烈波動(dòng),盡管單片機(jī)的電源消耗不大但是很容易因干擾而復(fù)位或者造成輸入輸出不正常等現(xiàn)象,因此電源濾波也很重要,通過(guò)示波器可以觀察到當(dāng)電機(jī)或電磁閥動(dòng)作時(shí),單片機(jī)5V電源的波動(dòng)情況,通過(guò)采取增加π型LC濾波,可以極大降低電源引起的干擾.

4 、電磁輻射也要考慮,單片機(jī)控制板本體最好增加金屬外殼并接地,抵抗電機(jī)電磁閥或廚房用電設(shè)備的外部干擾,這就是為什么我喜歡收集金屬糖果糕點(diǎn)盒的原因,呵呵!

對(duì)于DIYer來(lái)講,有時(shí)候想法挺好,試驗(yàn)也成功,但是實(shí)際裝機(jī)后卻失敗了,這些可能不是我們做的不好,實(shí)際是沒(méi)有考慮到復(fù)雜的工作環(huán)境,真正的產(chǎn)品為什么比我們DIY的成本高,其主要方面就是考慮的實(shí)際工作現(xiàn)場(chǎng)的復(fù)雜性,真正的核心控制可能很簡(jiǎn)單,但是周邊的各種保護(hù)很復(fù)雜,甚至接錯(cuò)線了也要考慮到,成本和可靠性就成正比了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6032

    文章

    44514

    瀏覽量

    632972
  • plc
    plc
    +關(guān)注

    關(guān)注

    5008

    文章

    13150

    瀏覽量

    462054

原文標(biāo)題:高手教你如何在單片機(jī)上實(shí)現(xiàn)PLC邏輯

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    何在單片機(jī)上使用c++?

    何在單片機(jī)上使用c++?
    發(fā)表于 10-08 06:38

    代碼是如何在單片機(jī)上跑的呢

    淺談:對(duì)于任何電子產(chǎn)品,硬件是軟件運(yùn)行的基礎(chǔ),而軟件賦予了硬件靈魂,兩者有機(jī)結(jié)合成為一個(gè)功能豐富、強(qiáng)大的系統(tǒng)。我們寫的代碼是如何在單片機(jī)上跑的呢?下面以比較簡(jiǎn)單的方式簡(jiǎn)述一下,如果還要研究很多細(xì)節(jié)
    發(fā)表于 11-17 07:47

    何在STM32單片機(jī)上實(shí)現(xiàn)Printf函數(shù)打印串口信息并進(jìn)行代碼調(diào)試?

    何在STM32單片機(jī)上實(shí)現(xiàn)Printf函數(shù)打印串口信息并進(jìn)行代碼調(diào)試?
    發(fā)表于 12-02 07:35

    單片機(jī)上實(shí)現(xiàn)FTP

    何在單片機(jī)上實(shí)現(xiàn)FTP文件上傳這篇文章是我本人編寫的 在網(wǎng)上也是絕無(wú)僅有一開(kāi)始發(fā)表在我的網(wǎng)易博客上了 結(jié)果被轉(zhuǎn)移且被誤傷 有可能存在某些字符或文字出錯(cuò)的地方有時(shí)間我會(huì)重新編寫, 目前大家先看
    發(fā)表于 01-07 06:53

    何在系列51單片機(jī)上移植uCOS-II

    本文詳細(xì)系統(tǒng)地介紹了uC/OS-II在51單片機(jī)上的移植、重入實(shí)現(xiàn)方法、硬件仿真、固化、人機(jī)界面等關(guān)鍵內(nèi)容。
    發(fā)表于 08-02 17:34 ?2次下載
    如<b class='flag-5'>何在</b>系列51<b class='flag-5'>單片機(jī)上</b>移植uCOS-II

    何在單片機(jī)上使用TEA加密通信源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在單片機(jī)上使用TEA加密通信源代碼免費(fèi)下載。
    發(fā)表于 07-19 17:37 ?2次下載
    如<b class='flag-5'>何在</b><b class='flag-5'>單片機(jī)上</b>使用TEA加密通信源代碼免費(fèi)下載

    何在51單片機(jī)上使用DS1302

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在51單片機(jī)上使用DS1302。
    發(fā)表于 07-17 17:38 ?5次下載
    如<b class='flag-5'>何在</b>51<b class='flag-5'>單片機(jī)上</b>使用DS1302

    何在51單片機(jī)上輸出一個(gè)周期20ms占空比為75%的矩形波

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在51單片機(jī)上輸出一個(gè)周期20ms占空比為75%的矩形波。
    發(fā)表于 07-10 17:40 ?2次下載
    如<b class='flag-5'>何在</b>51<b class='flag-5'>單片機(jī)上</b>輸出一個(gè)周期20ms占空比為75%的矩形波

    何在2KB內(nèi)存的單片機(jī)上實(shí)現(xiàn)俄羅斯方塊

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在2KB內(nèi)存的單片機(jī)上實(shí)現(xiàn)俄羅斯方塊。
    發(fā)表于 06-04 17:52 ?1次下載

    PLC單片機(jī)相比有什么優(yōu)勢(shì)?

    來(lái)開(kāi)發(fā)的,PLC所有功能,單片機(jī)肯定可以都做到,比如一些計(jì)時(shí),計(jì)數(shù),中斷,模擬量處理,通訊,邏輯控制,這些單片機(jī)都可以實(shí)現(xiàn),而且響應(yīng)速度上比
    的頭像 發(fā)表于 07-07 09:36 ?1.5w次閱讀

    何在單片機(jī)上實(shí)現(xiàn)卡爾曼濾波詳細(xì)計(jì)算方法和程序概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在單片機(jī)上實(shí)現(xiàn)卡爾曼濾波詳細(xì)計(jì)算方法和程序概述。
    的頭像 發(fā)表于 08-11 11:23 ?1.3w次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>單片機(jī)上</b><b class='flag-5'>實(shí)現(xiàn)</b>卡爾曼濾波詳細(xì)計(jì)算方法和程序概述

    何在單片機(jī)上實(shí)現(xiàn)開(kāi)根號(hào)

    因?yàn)楣ぷ鞯男枰?b class='flag-5'>單片機(jī)上實(shí)現(xiàn)開(kāi)根號(hào)的操作。目前開(kāi)平方的方法大部分是用牛頓迭代法。我在查了一些資料以后找到了一個(gè)比牛頓迭代法更加快速的方法。不敢獨(dú)享,介紹給大家,希望會(huì)有些幫助。
    的頭像 發(fā)表于 01-19 11:02 ?3592次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>單片機(jī)上</b><b class='flag-5'>實(shí)現(xiàn)</b>開(kāi)根號(hào)

    何在51單片機(jī)上實(shí)現(xiàn)串口收發(fā)命令

    串口通信在電子行業(yè)中應(yīng)用較廣,通過(guò)上位機(jī)發(fā)送命令,實(shí)現(xiàn)各種功能的控制及數(shù)據(jù)的反饋。本文就是在51 單片機(jī)上實(shí)現(xiàn)串口收發(fā)命令,程序調(diào)試正常,可以運(yùn)用到控制系統(tǒng)中。
    發(fā)表于 11-26 17:02 ?9次下載

    單片機(jī)】代碼是如何在單片機(jī)上運(yùn)行起來(lái)的?

    淺談:對(duì)于任何電子產(chǎn)品,硬件是軟件運(yùn)行的基礎(chǔ),而軟件賦予了硬件靈魂,兩者有機(jī)結(jié)合成為一個(gè)功能豐富、強(qiáng)大的系統(tǒng)。我們寫的代碼是如何在單片機(jī)上跑的呢?下面以比較簡(jiǎn)單的方式簡(jiǎn)述一下,如果還要研究很多細(xì)節(jié)
    發(fā)表于 11-10 19:20 ?3次下載
    【<b class='flag-5'>單片機(jī)</b>】代碼是如<b class='flag-5'>何在</b><b class='flag-5'>單片機(jī)上</b>運(yùn)行起來(lái)的?

    PLC單片機(jī)相比有什么優(yōu)勢(shì)

    基于單片機(jī)來(lái)開(kāi)發(fā)的,PLC所有功能,單片 機(jī)肯定可以都做到,比如一些計(jì)時(shí),計(jì)數(shù),中斷,模擬量處理,通訊,邏輯控制,這些單片機(jī)都可以
    發(fā)表于 04-20 11:16 ?0次下載
    <b class='flag-5'>PLC</b>與<b class='flag-5'>單片機(jī)</b>相比有什么優(yōu)勢(shì)