詳細介紹
西門子PLC模塊 SIMATIC S7-300,CPU 313C-2 DP帶MPI的緊湊型CPU,16DE/16DA,3個快速計數器(30 kHz),集成DP接口,集成電源24VDC,工作存儲器128KB,前連接器(1x40極)和需要微型存儲卡。
西門子CPU6ES7313-6CG04-0AB0是緊湊型 CPU,可用于具有分布式結構的系統。集成數字量 I/O,支持與過程的直接連接;PROFIBUS DP主站/從站接口支持與分布式 I/O 的連接。因此,CPU 313C-2 DP 既可以用作分布式單元進行快速預處理,也可以用作帶下位現場總線系統的上位控制器。
問:兩臺314-2DP,怎么把主站的REAL數據傳到從站去?例如,主站MD100里數據我通過觸摸屏輸入是1.5,把MD100通過MOVE傳送到QD50,主站QD50對應從站ID50,怎么在從站里完整的讀到1.5,放到從站MD80里面?
問題補充:還有一問題,我主站上帶觸摸屏,從站也帶觸摸屏,主站與從站配置都*一樣,包括觸摸屏,目的就是控制一臺電機正反轉,來控制閘門上升下降,那我在從站那里可以輸入預置高度1.5米,動了以后再在主站里預置1.9米,也動。當我再在從站輸入預置高度時一直是主站給的數據了,請問,怎么來規避這個問題呢?就是對同一個MD120通過兩個觸摸屏都能設置,而又不相互影響,再怎么輸入都是后一次在觸摸屏上輸入有效,不管哪個觸摸屏。
答:實現Profibus主從站之間的MS通訊
通過圖解,說明2個CPU之間通過Profibus實現主從站之間的MS通訊。這個例子是結合某現場的實際情況來的,實際情況是在2套300系統之間進行數據通訊,由于每個CPU300都帶有ET200M從站,所以317的主DP口和315的DP口都只能是主站而不能配置為從站。并且2套系統之間距離較遠,MPI不行,于是就利用了317的MPI/DP口配置成DP口來和315通訊。
1.首先,在STEP7中新建一個Project,分別插入2個S7-300站。
這里我們插入的一個CPU315-2DP,作為主站;一個CUP317-2作為從站,并且使用317-2的個端口MPI/DP端口配置成DP口來實現和315-2DP的通訊。然后分別對每個站進行硬件組態:首先對從站CPU317-2進行組態:將317的個端口MPI/DP端口組態為PROFIBUS類型,并且創建一個不同于CPU自帶DP口的PROFIBUS網絡,設定地址。在操作模式頁面中,將其設置為DPSLAVE模式,并且選擇“Test,commissioning,routing”,是將此端口設置為可以通過PG/PC在這個端口上對CPU進行監控,以便于我們在通訊鏈路上進行程序監控。下面的地址用默認值即可。
然后選擇Configuration頁面,創建數據交換映射區。這里我們創建了2個映射區,圖中的紅色框選區域在創建時是灰色的,包括上面的圖中的Partner部分創建時也是空的,在主站組態完畢并編譯后,才會出現圖中所示的狀態。由于我們這里只是演示程序,所以創建的交換區域較小。組態從站之后,再組態主站。插入CPU時,不需要創建新的PROFIBUS網絡,選擇從站建立的第二條(也就是準備用來進行通訊的MPI/DP端口創建的那條)PROFIBUS網絡即可。組態好其它硬件,確認CPU的DP口處于主站模式,從窗口右側的硬件列表中的已組態的站點中選擇CPU31X,拖放到主站的PROFIBUS總線上,
這時會彈出鏈接窗口,選擇以組態的從站,點擊Connect按鈕,然后進入Configuration頁面,可以看到前面在從站中設定的映射區域,逐條進行編輯(Edit…),確認主從站之間的對應關系。主站的輸入對應從站的輸出,主站的輸出對應從站的輸入。至此,硬件的組態完成,將各個站的組態信息下載到各自的CPU中。通過NetPro可以看到整個網絡的結構圖。
2.編寫程序。
硬件組態完畢,下載,PLC運行之后,數據并不會自動交換。需要通過程序來執行。在組態中,input和output區域,也并不是實際硬件組態中的硬件地址,也就是說,input和output并不代表I/O模塊的地址和數據。但是映射區域組態用到的input和output地址,同時也占用了I/O模塊的組態地址,就是說,映射區的地址和I/O地址是并行的,不能重復使用。所以在硬件的I/O模塊全部組態完畢之后再組態映射區。
西門子CPU6ES7313-6CG04-0AB0映射區的數據交換是通過系統功能塊SFC14(DPRD_DAT——ReadConsistentDataofaStandardDPSlave)和SFC15(DPWR_DAT——WriteConsistentDatatoaStandardDPSlave)實現的。SFC14和SFC15是成對使用的,一個發送一個接收,缺一不可。數據的通訊也是交互的,可以相互交換數據。本例中,我們通過簡單的數據來驗證通訊結果。
首先,我們在程序中插入數據區DB1,前面我們只建立了2個字(2Word)的映射區,于是我們建立如下內容的DB1,為了查看的方便,DB1的前半部分作為接收數據的存儲區,后半部分用作發送數據的存儲區。在317和315中我們插入同樣的DB1,然后分別在OB1中編寫通訊程序。其中,程序的LADDR地址,對應的是硬件的映射區組態時本站的LocalAddr中的地址,從站的LocalAddr我們組態的是0,對應的PartnerAddr也就是主站的地址是4。需要注意的是這里的地址是需要用16進制的格式來表示的,我們組態時是用10進制表示的。
完成之后,我們在各站中插入OB82、OB86、OB122等程序塊,這些是為了保證當通訊的一方掉電時,不會導致另一方的停機。完成之后,將所有的程序分別下載到各自的CPU中,個站切換到運行狀態,通過PLC監控功能,設定數據之后,我們監控的結果如下:上面的表格內容為主站315的數據,下面的是從站317的數據。可以看到,兩個站都分別將各自的DBB4—DBB7數據發送出去并被另一方成功接收后存儲在各自的DBB0—DBB3中。驗證中,我們將一個站的CPU切換到STOP狀態,可以看到,另一個站的CPU硬件SF指示燈報警,但PLC正常運行不停機。待該站恢復之后,報警自動消失。
擴展問題:在一個站的CPU掉站之后,另一個站的接收數據區顯示的仍然是后一次接收到的數據,并且,即使在這種狀態下,居然仍然無法修改該數據區內容。這樣就存在一個問題,當前站需要知道當前接收數據存儲區的內容是否是實時的數據。如何判斷。
大概思路:
方法1,用以前的方法,在每個數據接收周期開始前,將已接收數據清空。這樣當接收周期內接收不到新的數據時,就可以察覺到。但是問題是,SFC14和SFC15沒有接收是否完成、是否成功等標識位,并且,在接收不到新的數據時,原有數據不能修改。此方法不通。
方法2,通過別的方式方法檢測兩個站之間的通訊狀態。在SIEMENS的文檔中,有這樣的描述:主站:主站掌握總線中數據流的控制權。只要它擁有訪問總線權(令牌),主站就可在沒有外部請求的情況下發送信息。在PROFIBUS協議中,主站也被稱作主動節點。從站:從站是簡單的輸入、輸出設備。典型的從站為傳感器,執行器以及變頻器。從站也可為智能從站,入S7-300/400帶集成口的CPU等。從站不會擁有總線的訪問授權。從站只能確認收到的信息或者在主站的請求下發送信息。從站也被稱作被動節點。另外,SIEMENS對SFC14/15的描述也分別是:用于讀取Profibus從站的數據/用于將數據寫入Profibus從站。
根據這些描述,通過CPU集成口通訊這種方式下,作為從站的CPU應該屬于“智能從站”,但是SIEMENS的描述中,卻沒有說智能從站和普通的從站之間有什么區別。那么根據上面的主從站的描述,主站可以主動的獲取到從站的數據,并可以自主的將數據寫入從站;而從站必須在主站的指令下獲取或者發送數據。而在本例中,這些說法似乎無法成立。
本例中,SFC14、SFC15是成對使用的,不論在主站上還是從站上,主從站之間的SFC14和SFC15必然是需要成對出現的。也就是說,任何一方沒有SFC15運行的的話,另一方的SFC14都讀不到數據。而任何一方沒有SFC14的話,另一方的SFC15發送出來的數據也無人接收。至少從這點看來,看不出主從站有什么區別。不過,聯想到以前曾經做過S7-300和MM430的Profibus通訊,該通訊方式中,顯然MM440是作為從站出現的,所以在正確組態之后,只需要在主站(CPU)中寫好SFC14/15即可,當然,MM440中我們也寫不進去程序。那么在這種方式中,可以說是*的遵守了SIEMENS文檔中的說法。同時也說明,在“智能從站”這種方式下,并不遵守SIEMENS文檔中對從站的描述。再次研究SFC14/15的收發狀態,發現,可能是因為數據的存在是過程映像中,所以只要SFC15發送過一次,數據即存在于過程映射中,SFC14隨時都從映像中讀取數據,所以存在前面說的,SFC14運行過程中,是無法修改接收數據存儲區的數據的。脫離SFC14/15,而使用MOVE方法的研究:不使用SFC14/15,而是利用組態的時候產生的I/O地址來傳數據。根據創建過程映射區時的組態信息,我們寫寫出了如下的程序:在主站315-2DP中:在從站317中:其中,M位的使用是測試程序的不同情況下使用的臨時點,和本程序功能無關。由此可見,在這種方式下,因為組態時組態的地址是系統的I區和Q區,所以是可以用MOVE來實現通訊的,但是同時也存在的問題是,這種方式下,通訊所用的I/Q區占用了S7-300的系統區,而S7-300的系統區可使用范圍是有限的,所以在系統的實際I/O模塊較多時,通訊的數據量將會變得更加有限。
西門子PLC模塊