日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

S7-200作MODBUS RTU主站和从站例程教学

發(fā)布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 S7-200作MODBUS RTU主站和从站例程教学 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

0前提&注意

S7-200 Modbus RTU 通信

為了在S7-200上應(yīng)用MODBUS RTU通信協(xié)議,Micro/WIN的軟件版本應(yīng)當(dāng)是STEP 7-Micro/WIN V3.2以上,并安裝Micro/WIN32 V3.2的Instruction Library(指令庫)軟件包(通常沒有被預(yù)裝):

此外,只有Port 0支持MODBUS RTU從站模式;Port 0和Port1都支持MODBUS RTU主站模式。

1 S7-200 MODBUS協(xié)議指令簡介

1.1 MODBUS主站協(xié)議指令

包括MBUS_CTRL和MBUS_MSG指令。

MBUS_CTRL指令
該指令用于主站通信初始化,主要針對S7-200 PORT0端口,需要在每個掃描周期調(diào)用,以便監(jiān)視MBUS_MSG指令啟動的任何突發(fā)消息進程。

MBUS_MSG指令
該指令用于啟動MODBUS從站的請求并處理應(yīng)答。同一時刻僅能有一個MBUS_MSG指令執(zhí)行,因此執(zhí)行多個該指令時,通常每個讀寫指令都用上一個指令的Done位激活,以此保證所有讀寫指令循環(huán)進行。當(dāng)EN輸入?yún)?shù)和First輸入?yún)?shù)都為1時,MBUS_MSG指令啟動對MODBUS從站的請求。

部分指令輸入/輸出端意義

  • First:首次參數(shù),參數(shù)變化新請求要發(fā)送,需邊沿觸發(fā)該位
  • RW:讀寫參數(shù),0為讀,1為寫
  • Addr:起始MODBUS地址,與從站的Addr含義不同,見下表:
  • Count:計數(shù)參數(shù)。從起始地址開始讀寫的數(shù)據(jù)的個數(shù),計數(shù)數(shù)值是位數(shù)或字?jǐn)?shù)。
  • DataPtr:數(shù)據(jù)指針參數(shù),只針對S7-200的V存儲器中與讀取或?qū)懭胝埱笙嚓P(guān)的數(shù)據(jù)的間接地址指針。如果是讀指令,讀回的數(shù)據(jù)會放到這個(本地)數(shù)據(jù)區(qū)中;如果是寫指令,要寫出的數(shù)據(jù)會放到這個數(shù)據(jù)區(qū)中。
  • 1.2 MODBUS從站協(xié)議指令

    包括MBUS_INIT指令后MBUS_SLAVE指令。

    MBUS_INIT指令
    該指令用于啟用和初始化或禁止MODBUS從站通信。在使用MBUS_SLAVE指令之前必須正確執(zhí)行MBUS_INIT指令。應(yīng)在每次通信狀態(tài)改變時執(zhí)行該指令,因此EN輸入應(yīng)當(dāng)通過一個邊沿脈沖打開或僅在首次掃描時執(zhí)行。

    部分指令輸入/輸出端意義

  • MaxIQ:最大I/Q位,參與通信的最大I/Q點數(shù),S7-200的I/O映像區(qū)為128/128,因此一般建議將該位設(shè)為128
  • MaxAI:最大AI字?jǐn)?shù),參與通信的最大AI通道數(shù),16或32,CPU為226時將該位設(shè)為32可允許存取全部模擬輸入。
  • MaxHold:用于設(shè)定供Modbus地址4xxx使用的V存儲器中的字保持寄存器數(shù)目(注意是字而非字節(jié))。
  • HoldStart:V儲存器中保持寄存器的起始地址
  • MODBUS主設(shè)備可存取V存儲器的MaxHold個字?jǐn)?shù),并從HoldStart開始。
  • MBUS_SLAVE指令
    該指令用于為MODBUS主設(shè)備發(fā)出的請求服務(wù),每次掃描時執(zhí)行,以便該指令檢查和回答Modbus。

    部分指令輸入/輸出端意義
    Done:MODBUS執(zhí)行通信中時為1,否則為0

    2 MODBUS指令庫的添加方法

    2.1添加指令庫

    通常組態(tài)軟件沒有附帶指令庫,需額外下載。在官網(wǎng)下載壓縮包后,直接按提示安裝,然后重進軟件即可。

    2.2分配主站庫儲存區(qū)

    從站庫儲存區(qū)的分配方法與本章所述方法一致。

    調(diào)用STEP 7 - Mciro/WIN32 V3.2 Instruction Library(指令庫)需要分配庫指令數(shù)據(jù)區(qū)(Library Memory)。庫指令數(shù)據(jù)區(qū)是相應(yīng)庫的子程序和中斷程序所要用到的變量存儲空間。如果在編程時不分配庫指令數(shù)據(jù)區(qū),編譯時會產(chǎn)生許多相同的錯誤。
    ●注意庫儲存區(qū)不得與其它儲存區(qū)重疊。

    分配方法:
    右擊【program block】,在菜單中選擇【library memory】,在彈出的選項中選擇【suggest address】,即可進行地址的自動分配(一般建議手動分配)。

    ●該功能只考慮到了其他一般尋址,而未考慮到諸如Modbus數(shù)據(jù)保持寄存器區(qū)等的設(shè)置。應(yīng)當(dāng)確保不與其他任何已使用的數(shù)據(jù)區(qū)重疊、沖突。不應(yīng)重復(fù)按Suggest Address按鈕,否則也會造成混亂。

    3 S7-200作MODBUS RTU主站例程

    兩臺S7-200 PLC通過Modbus進行通信時,一臺為從站,一臺為主站,當(dāng)主站I0.2為ON時,可通過Modbus方式讀取從站S7-200 PLC的I0.0~I0.7的數(shù)值。

    3.1接線

    使用RS485通信電纜連接主從站的PORT0口。

    3.2編程

  • 分配主站庫儲存區(qū)
  • MODBUS主站編程
  • 分配從站庫儲存區(qū)
  • MODBUS從站編程
  • 3.3測試結(jié)果

    將PC-PPI編程線纜接入主站的PORT1口,改變從站IB0狀態(tài),接著撥主站I0.2為ON,在狀態(tài)表中對VB200進行監(jiān)控,其值與從站IB0結(jié)果相對應(yīng)。

    需注意的是由于程序限制(執(zhí)行MBUS_MSG指令需要EN和First同時為1,但是First參數(shù)只在I0.2為ON的上升沿為1,此后為0),若從站IB0狀態(tài)改變,需要手動將主站I0.2復(fù)位然后再置位,狀態(tài)表才能刷新,否則將一直保持上一次的值。

    若希望可以自動刷新,可以對程序做如下改進:


    即增加了重復(fù)計時的定時器來自動刷新MBUS_MSG的指令。需注意定時器刷新周期過短可能會漏掉一些信息。

    可以直接將VB200內(nèi)的信息傳送到QB0上通過指示燈顯示(即實現(xiàn)從站IB0控制主站QB0),免去了在軟件上監(jiān)控的麻煩:

    如果要實現(xiàn)主站對從站的寫(主站IB0控制從站QB0),可添加如下程序:

    此時程序中出現(xiàn)了兩個MBUS_MSG指令,同一時刻僅能有一個MBUS_MSG指令執(zhí)行,因此通常每個讀寫指令都用上一個指令的Done位(此處為M2.1)激活來保證所有讀寫指令循環(huán)進行。

    3.4注意及問題

    ●MODBUS從屬協(xié)議通信指定端口0,當(dāng)端口0被用于MODBUS從屬協(xié)議通信時,就無法用于任何其他用途,包括與組態(tài)軟件通信。因此若要在CPU處于RUN時監(jiān)控程序或下載程序,可使用PORT1。

    在實驗過程(源程序)中MBUS_MSG指令接連出現(xiàn)了6號錯誤、4號錯誤和3號錯誤。
    3=接收超時(從站無響應(yīng))
    4=請求參數(shù)錯誤(slave address,Modbus address,count,RW)
    6=Modbus正在忙于其它請求

    僅能實現(xiàn)對部分問題的復(fù)現(xiàn):
    觸發(fā)6號錯誤的情況:從站沒有輸入(IB0均處于復(fù)位狀態(tài)時)

    3號問題和4號問題出現(xiàn)的情況未知,但是可以確定的是,在接線和程序正確的情況下,連續(xù)改變I0.2的值可消除此類問題。

    4 S7-200作MODBUS RTU從站例程補充說明

    本文是對官方文檔S7-200 Modbus RTU 通信的補充。

    由于官方文檔并未提供從建立工程到使用MODSCAN 32進行測試的完整步驟,這里再提供一篇更為完整的教程:
    ModScan(主站)與200PLC(從站)的Modbus通訊

    4.1梯形圖

    由于官方教程已包含例程,可以直接引用官方例程,無需自己創(chuàng)建。

    這里要注意MBUS_INIT的Addr(從站地址)、MaxHold(最大保持寄存器區(qū))和HoldSt~(保持寄存器區(qū)起始地址)。
    從站地址取值1~247,不可與其它從站沖突。

    由子程序參數(shù)HoldStart和MaxHold指定的保持寄存器區(qū),是在S7-200 CPU的V數(shù)據(jù)存儲區(qū)(CPU型號不同V數(shù)據(jù)存儲區(qū)大小不同)中分配,其中MaxHold規(guī)定了保持寄存器區(qū)的大小,HoldSt規(guī)定了保持寄存器區(qū)起始地址,默認(rèn)為VB0。要注意的是MaxHold以字為單位(VW),HoldSt以字節(jié)為單位(VB),而1W=2B。當(dāng)HoldStart = VB0,MaxHold=1000時,保持寄存器區(qū)并非VB0~VB999,而是VB0~VB1999共2000個字節(jié)。

    Modbus RTU 從站地址與S7-200的地址對應(yīng)關(guān)系如下表所示:

    舉例,若HoldStart為VB1000,則按照公式,40001對應(yīng)VB1000,40002對應(yīng)VB10002;更確切的說VB1000和VB1001對應(yīng)40001,VB1002和VB1003對應(yīng)40002。

    注意!不同設(shè)備的Modbus協(xié)議起始地址不一定一樣,有些從0開始,有些從1開始;建議從0開始的設(shè)備地址加1,也從1開始。

    庫指令區(qū)
    庫指令數(shù)據(jù)區(qū)不能和保持寄存器區(qū)有任何重疊,否則在運行時會產(chǎn)生錯誤,不能正常通信。
    庫指令數(shù)據(jù)區(qū)是相應(yīng)庫的子程序和中斷程序所要用到的變量存儲空間,如果在編程時不分配庫指令數(shù)據(jù)區(qū),編譯時會產(chǎn)生許多相同的錯誤。該區(qū)缺省情況下是從VB0開始。建議不要使用"Suggest Address"按鈕進行自動分配,容易造成混亂。

    向V數(shù)據(jù)儲存區(qū)的變量寫值
    默認(rèn)情況下該區(qū)變量的值為0,若想要改變變量值,需要使用MOV_B指令。
    當(dāng)HoldStart=VB1000時,若想令40001=0102H,則:

    特別提示

    Modbus 指令庫啟動后(即將MODBUS程序下載進PLC并啟動CPU后),將無法通過同一個通信端口進行 CPU 監(jiān)控,也無法下載新工程。如要重新下載程序,必須先將CPU手動置STOP再進行下載或者使用Port1口進行下載
    MODSCAN 32也是同樣的道理,使用STEP 7-Micro/WIN下載完成后如果不退出軟件,MODSCAN將無法與PLC建立通信;同理,MODSCAN與PLC建立通信后,即使將PLC的CPU撥至STOP也無法建立通信。

    總結(jié)

    以上是生活随笔為你收集整理的S7-200作MODBUS RTU主站和从站例程教学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。