S7-200CPU通信口的自由口模式實(shí)現(xiàn)Modbus通信協(xié)議.doc
《S7-200CPU通信口的自由口模式實(shí)現(xiàn)Modbus通信協(xié)議.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《S7-200CPU通信口的自由口模式實(shí)現(xiàn)Modbus通信協(xié)議.doc(8頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
在組態(tài)王里點(diǎn)擊“com1”(根據(jù)你在前面已經(jīng)定的com口而定),然后在右邊的界面上顯示你所建立的文件,然后對(duì)你編譯的主畫面點(diǎn)反鍵,然后在下拉菜單中點(diǎn)擊“測(cè)試---”(你的文件名),再隨便在選項(xiàng)里輸入一個(gè)你編寫的程序里的標(biāo)志位,看能不能顯示你的PLC內(nèi)的當(dāng)前值,如果可以顯示,就應(yīng)該是通信上了。 通過S7-200CPU通信口的自由口模式實(shí)現(xiàn)Modbus通信協(xié)議,可以通過無線數(shù)據(jù)電臺(tái)等慢速通信設(shè)備傳輸。這為組成S7-200之間的簡單無線通信網(wǎng)絡(luò)提供了便利。 詳細(xì)情況請(qǐng)參考《S7-200系統(tǒng)手冊(cè)》(2002年10月或以后版本)的相應(yīng)章節(jié)。 Modbus是公開通信協(xié)議,其最簡單的串行通信部分僅規(guī)定了在串行線路的基本數(shù)據(jù)傳輸格式,在OSI七層協(xié)議模型中只到1,2層。 Modbus具有兩種串行傳輸模式,ASCII和RTU。它們定義了數(shù)據(jù)如何打包、解碼的不同方式。支持Modbus協(xié)議的設(shè)備一般都支持RTU格式。 通信雙方必須同時(shí)支持上述模式中的一種。 Modbus是一種單主站的主/從通信模式。Modbus網(wǎng)絡(luò)上只能有一個(gè)主站存在,主站在Modbus網(wǎng)絡(luò)上沒有地址,從站的地址范圍為0-247,其中0為廣播地址,從站的實(shí)際地址范圍為1-247。 Modbus通信標(biāo)準(zhǔn)協(xié)議可以通過各種傳輸方式傳播,如RS232C、RS485、光纖、無線電等。在S7-200CPU通信口上實(shí)現(xiàn)的是RS485半雙工通信,使用的是S7-200的自由口功能。 ModbusRTU主站指令庫(測(cè)試版) 西門子針對(duì)S7-200最新推出支持ModbusRTU主站的協(xié)議庫(測(cè)試版),用戶可以將這個(gè)庫添加到Micro/WIN軟件中,并通過調(diào)用庫指令,方便地實(shí)現(xiàn)ModbusRTU主站的功能。 注意: 1.ModbusRTU主站指令庫的功能是通過在用戶程序中調(diào)用預(yù)先編好的程序功能塊實(shí)現(xiàn)的,該庫只對(duì)Port0口有效。該指令庫將設(shè)置Port0工作在自由口通信模式下。 2.ModbusRTU主站指令庫使用了一些用戶中斷功能,編其他程序時(shí)不能在用戶程序中禁止中斷。 使用ModbusRTU主站指令庫,可以讀寫ModbusRTU從站的數(shù)字量、模擬量I/O以及保持寄存器。 要使用ModbusRTU主站指令庫,須遵循下列步驟: 取得ModbusRTU主站指令庫文件,并添加到編程軟件STEP7-Micro/WIN中; 按照要求編寫用戶程序調(diào)用ModubsRTU主站指令庫。 注意:此指令庫/程序的作者和擁有者對(duì)于該軟件的功能性和兼容性不負(fù)任何責(zé)任。使用該軟件的風(fēng)險(xiǎn)完全由用戶自行承擔(dān)。由于它是免費(fèi)的,所以不提供任何擔(dān)保,錯(cuò)誤糾正和熱線支持,用戶不必為此聯(lián)系西門子技術(shù)支持與服務(wù)部門。 1.調(diào)用ModbusRTU主站初始化和控制子程序 使用SM0.0調(diào)用MBUS_CTRL完成主站的初始化,并啟動(dòng)其功能控制: 圖2.用SM0.0調(diào)用ModbusRTU主站初始化與控制子程序 各參數(shù)意義如下: a. EN 使能: 必須保證每一掃描周期都被使能(使用SM0.0) b. Mode 模式: 為1時(shí),使能Modbus協(xié)議功能;為0時(shí)恢復(fù)為系統(tǒng)PPI協(xié)議 c. Baud 波特率: 支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。 d. Parity 校驗(yàn): 校驗(yàn)方式選擇 0=無校驗(yàn) 1=奇較驗(yàn) 2=偶較驗(yàn) e. Timeout 超時(shí): 主站等待從站響應(yīng)的時(shí)間,以毫秒為單位,典型的設(shè)置值為1000毫秒(1秒),允許設(shè)置的范圍為1-32767。 注意:這個(gè)值必須設(shè)置足夠大以保證從站有時(shí)間響應(yīng)。 f. Done 完成位: 初始化完成,此位會(huì)自動(dòng)置1??梢杂迷撐粏?dòng)MBUS_MSG讀寫操作(見例程) g. Error 初始化錯(cuò)誤代碼(只有在Done位為1時(shí)有效): 0=無錯(cuò)誤 1=校驗(yàn)選擇非法 2=波特率選擇非法 3=模式選擇非法 2.調(diào)用ModbusRTU主站讀寫子程序MBUS_MSG,發(fā)送一個(gè)Modbus請(qǐng)求; 圖3.調(diào)用ModbusRTU主站讀寫子程序 各參數(shù)意義如下: a. EN 使能: 同一時(shí)刻只能有一個(gè)讀寫功能(即MBUS_MSG)使能 注意:建議每一個(gè)讀寫功能(即MBUS_MSG)都用上一個(gè)MBUS_MSG指令的Done完成位來激活,以保證所有讀寫指令循環(huán)進(jìn)行(見例程)。 b. First 讀寫請(qǐng)求位: 每一個(gè)新的讀寫請(qǐng)求必須使用脈沖觸發(fā) c. Slave 從站地址: 可選擇的范圍1-247 d. RW 從站地址: 0=讀,1=寫 注意: 1.開關(guān)量輸出和保持寄存器支持讀和寫功能 2.開關(guān)量輸入和模擬量輸入只支持讀功能 e. Addr 讀寫從站的 選擇讀寫的數(shù)據(jù)類型 數(shù)據(jù)地址: 000001至000xxx-開關(guān)量輸出 100001至100xxx-開關(guān)量輸入 300001至300xxx-模擬量輸入 400001至400xxx-保持寄存器 f. Count 數(shù)據(jù)個(gè)數(shù) 通訊的數(shù)據(jù)個(gè)數(shù)(位或字的個(gè)數(shù)) 注意:Modbus主站可讀/寫的最大數(shù)據(jù)量為120個(gè)字(是指每一個(gè)MBUS_MSG指令) g. DataPtr 數(shù)據(jù)指針: 1.如果是讀指令,讀回的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中 2.如果是寫指令,要寫出的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中 h. Done 完成位 讀寫功能完成位 i. Error 錯(cuò)誤代碼: 只有在Done位為1時(shí),錯(cuò)誤代碼才有效 0=無錯(cuò)誤 1=響應(yīng)校驗(yàn)錯(cuò)誤 2=未用 3=接收超時(shí)(從站無響應(yīng)) 4=請(qǐng)求參數(shù)錯(cuò)誤(slaveaddress,Modbusaddress,count,RW) 5=Modbus/自由口未使能 6=Modbus正在忙于其它請(qǐng)求 7=響應(yīng)錯(cuò)誤(響應(yīng)不是請(qǐng)求的操作) 8=響應(yīng)CRC校驗(yàn)和錯(cuò)誤 - 101=從站不支持請(qǐng)求的功能 102=從站不支持?jǐn)?shù)據(jù)地址 103=從站不支持此種數(shù)據(jù)類型 104=從站設(shè)備故障 105=從站接受了信息,但是響應(yīng)被延遲 106=從站忙,拒絕了該信息 107=從站拒絕了信息 108=從站存儲(chǔ)器奇偶錯(cuò)誤 常見的錯(cuò)誤: 如果多個(gè)MBUS_MSG指令同時(shí)使能會(huì)造成6號(hào)錯(cuò)誤 從站delay參數(shù)設(shè)的時(shí)間過長會(huì)造成主站3號(hào)錯(cuò)誤 從站掉電或不運(yùn)行,網(wǎng)絡(luò)故障都會(huì)造成主站3號(hào)錯(cuò)誤 3.在CPU的V數(shù)據(jù)區(qū)中為庫指令分配存儲(chǔ)區(qū)(LibraryMemory) ModbusMaster指令庫需要一個(gè)284個(gè)字節(jié)的全局V存儲(chǔ)區(qū)。 常問問題 MODBUS指令庫啟動(dòng)后,如何通過同一個(gè)通信端口進(jìn)行CPU監(jiān)控? MODBUS指令庫使用的是CPU的自由口通信功能,工作在自由口模式下的通訊口不能使用Micro/WIN的PPI編程通信監(jiān)控。如果通信口都已經(jīng)被占用,可以考慮: 加一個(gè)通信模塊(如EM277、CP243-1、EM241等)擴(kuò)展出一個(gè)編程通信口 中止自由口模式,可以將CPU上的模式開關(guān)從RUN撥到STOP;或者保持處于RUN狀態(tài),用程序停止指令庫的MODBUS模式(參見指令庫應(yīng)用) 如何理解MODBUS地址與功能碼的區(qū)別? MODBUS地址與MODBUS的功能碼是兩個(gè)層次的概念。 根據(jù)MODBUS通信協(xié)議,MODBUS數(shù)據(jù)的地址使用00xxx、10xxx、30xxx和40xxx的形式,分別表示數(shù)字量輸出、數(shù)字量輸入、模擬量輸入等數(shù)據(jù)地址。在使用S7-200的指令庫時(shí),MODBUS數(shù)據(jù)地址與S7-200的I/O和數(shù)據(jù)存儲(chǔ)區(qū)地址間有特定的對(duì)應(yīng)關(guān)系。 有些設(shè)備表明它支持MODBUSRTU通信協(xié)議,但也詳細(xì)提供了讀寫數(shù)據(jù)的詳細(xì)通信幀格式,其中包括如何指定MODBUS站的地址,需要讀寫數(shù)據(jù)類型、長度等等。數(shù)據(jù)幀有特定字節(jié)指出此指令讀寫的數(shù)據(jù)類型和地址,此字節(jié)的數(shù)據(jù)內(nèi)容即所謂“功能碼”,如功能1指定讀取單個(gè)/多個(gè)數(shù)字量輸出點(diǎn)的值。 支持MODBUS協(xié)議的設(shè)備或軟件,使用時(shí)用戶直接設(shè)置或看到的應(yīng)當(dāng)是MODBUS數(shù)據(jù)地址。MODBUS地址所訪問的數(shù)據(jù),是通過各種“功能”讀寫而來。功能碼是MODBUS地址的底層。如果MODBUS通信的一方提供的所謂MODBUS協(xié)議只有功能碼,則需要注意了解此功能號(hào)與MODBUS地址間的對(duì)應(yīng)關(guān)系。 ModbusRTU從站 S7-200CPU上的通信口Port0可以支持ModbusRTU協(xié)議,成為ModbusRTU從站。此功能是通過S7-200的自由口通信模式實(shí)現(xiàn),因此可以通過無線數(shù)據(jù)電臺(tái)等慢速通信設(shè)備傳輸。 如果想在S7-200CPU之間、或者其他支持ModbusRTU的設(shè)備使用ModbusRTU協(xié)議通信,需要由有S7-200CPU做Modbus主站。S7-200CPU做主站必須由用戶自己用自由口模式,按相關(guān)協(xié)議編程。 詳情請(qǐng)參考《S7-200系統(tǒng)手冊(cè)》之相關(guān)章節(jié)。 要實(shí)現(xiàn)ModbusRTU通信,需要STEP7-Micro/WIN32V3.2以上版本的編程軟件,而且須安裝STEP7-Micro/WIN32V3.2InstructionLibrary(指令庫)。ModbusRTU功能是通過指令庫中預(yù)先編好的程序功能塊實(shí)現(xiàn)的。 ModbusRTU從站指令庫只支持CPU上的通信0口(Port0)。 注意:由子程序參數(shù)HoldStart和MaxHold指定的保持寄存器區(qū),是在S7-200CPU的V數(shù)據(jù)存儲(chǔ)區(qū)中分配,此數(shù)據(jù)區(qū)不能和庫指令數(shù)據(jù)區(qū)有任何重疊,否則在運(yùn)行時(shí)會(huì)產(chǎn)生錯(cuò)誤,不能正常通信。注意Modbus中的保持寄存器區(qū)按“字”尋址,即MaxHold規(guī)定的是VW而不是VB的個(gè)數(shù)。 在圖2的例子中,規(guī)定了MODBUS保持寄存器區(qū)從VB0開始(HoldStart=VB0),并且保持寄存器為1000個(gè)字(MaxHold=1000),因保持寄存器以字(兩個(gè)字節(jié))為單位,實(shí)際上這個(gè)通信緩沖區(qū)占用了VB0~VB1999共2000個(gè)字節(jié)。因此分配庫指令保留數(shù)據(jù)區(qū)時(shí)至少要從VB2000開始。當(dāng)然保持區(qū)不一定要從VB0開始。 注意:你選用的CPU的V存儲(chǔ)區(qū)大??!CPU型號(hào)不同V數(shù)據(jù)存儲(chǔ)區(qū)大小不同。應(yīng)根據(jù)需要選擇MODBUS保持寄存器區(qū)域的大小。 包含ModbusRTU從站指令庫的項(xiàng)目編譯、下載到CPU中后,在編程計(jì)算機(jī)(PG/PC)上運(yùn)行一些Modbus測(cè)試軟件可以檢驗(yàn)S7-200的ModbusRTU通信是否正常,這對(duì)查找故障點(diǎn)很有用。測(cè)試軟件通過計(jì)算機(jī)串口(RS-232)和PC/PPI電纜連接CPU。如果必要,須將PC/PPI電纜設(shè)置在自由口通信方式。 可到一些軟件下載網(wǎng)站尋找類似軟件,如ModScan32等。 MODBUS地址總是以00001、30004之類的形式出現(xiàn)。S7-200內(nèi)部的數(shù)據(jù)存儲(chǔ)區(qū)與MODBUS的0、1、3、4共4類地址的對(duì)應(yīng)關(guān)系如下: 表1.MODBUS地址對(duì)應(yīng)表 MODBUS地址 S7-200數(shù)據(jù)區(qū) 00001~00128 Q0.0~Q15.7 10001~10128 I0.0~I15.7 30001~30032 AIW0~AIW62 40001~4xxxx T~T+2*(xxxx-1) 其中T為S7-200中的緩沖區(qū)起始地址,即HoldStart。 如果已知S7-200中的V存儲(chǔ)區(qū)地址,推算MODBUS地址的公式如下: MODBUS地MODBUS從站的網(wǎng)絡(luò)地址與S7-200的CPU網(wǎng)絡(luò)地址有什么關(guān)系? 沒有關(guān)系。支持網(wǎng)絡(luò)通信的通信協(xié)議必須有其自己的網(wǎng)絡(luò)尋址規(guī)定。Modbus從站的地址只是它在Modbus網(wǎng)絡(luò)上的地址,而通常所說的S7-200CPU地址是CPU在西門子的PPI網(wǎng)絡(luò)上的站地址。S7-200CPU的大部分通信功能都通過PPI網(wǎng)絡(luò)完成,例如編程、網(wǎng)絡(luò)讀寫通信等。 如何理解MODBUS地址與功能碼的區(qū)別? MODBUS地址與MODBUS的功能碼是兩個(gè)層次的概念。 根據(jù)MODBUS通信協(xié)議,MODBUS數(shù)據(jù)的地址使用00xxx、10xxx、30xxx和40xxx的形式,分別表示數(shù)字量輸出、數(shù)字量輸入、模擬量輸入等數(shù)據(jù)地址。在使用S7-200的指令庫時(shí),MODBUS數(shù)據(jù)地址與S7-200的I/O和數(shù)據(jù)存儲(chǔ)區(qū)地址間有特定的對(duì)應(yīng)關(guān)系。 有些設(shè)備表明它支持MODBUSRTU通信協(xié)議,但也詳細(xì)提供了讀寫數(shù)據(jù)的詳細(xì)通信幀格式,其中包括如何指定MODBUS站的地址,需要讀寫數(shù)據(jù)類型、長度等等。數(shù)據(jù)幀有特定字節(jié)指出此指令讀寫的數(shù)據(jù)類型和地址,此字節(jié)的數(shù)據(jù)內(nèi)容即所謂“功能碼”,如功能1指定讀取單個(gè)/多個(gè)數(shù)字量輸出點(diǎn)的值。 支持MODBUS協(xié)議的設(shè)備或軟件,使用時(shí)用戶直接設(shè)置或看到的應(yīng)當(dāng)是MODBUS數(shù)據(jù)地址。MODBUS地址所訪問的數(shù)據(jù),是通過各種“功能”讀寫而來。功能碼是MODBUS地址的底層。如果MODBUS通信的一方提供的所謂MODBUS協(xié)議只有功能碼,則需要注意了解此功能號(hào)與MODBUS地址間的對(duì)應(yīng)關(guān)系。 MODBUS指令庫啟動(dòng)后,如何通過同一個(gè)通信端口進(jìn)行CPU監(jiān)控? MODBUS指令庫使用的是CPU的自由口通信功能,工作在自由口模式下的通訊口不能使用Micro/WIN的PPI編程通信監(jiān)控。如果通信口都已經(jīng)被占用,可以考慮: 加一個(gè)通信模塊(如EM277、CP243-1、EM241等)擴(kuò)展出一個(gè)編程通信口 中止自由口模式,可以將CPU上的模式開關(guān)從RUN撥到STOP;或者保持處于RUN狀態(tài),用程序停止指令庫的MODBUS模式(參見指令庫應(yīng)用) 為何有些HMI軟件使用MODBUSRTU讀取S7-200中的實(shí)數(shù)會(huì)出現(xiàn)錯(cuò)誤? 有些HMI軟件使用MODBUSRTU通信協(xié)議時(shí),處理存儲(chǔ)在數(shù)據(jù)保持寄存器中的實(shí)數(shù)(浮點(diǎn)數(shù))的方式與西門子的實(shí)數(shù)保存格式不同。西門子的PLC遵循“高字節(jié)低地址、低字節(jié)高地址”的規(guī)律。 MODBUSRTU的保持寄存器總是以“字(雙字節(jié))”為單位,而一個(gè)實(shí)數(shù)需要4個(gè)字節(jié)(雙字)表示。HMI軟件在處理時(shí)可能會(huì)把保持寄存器的兩個(gè)“字”互換位置,造成不能識(shí)別以西門子格式表示的實(shí)數(shù)。如果HMI軟件一方無法處理這種實(shí)數(shù),則可在S7-200CPU中編程將存入數(shù)據(jù)緩沖區(qū)(保持寄存器區(qū))的實(shí)數(shù)的高字和低字互換。 為何有的HMI軟件用ModbusRTU可以讀取作為從站的S7-200的內(nèi)容,但不能寫入? 可能此軟件使用了Modbus功能15(寫多個(gè)離散量)或類似功能(功能16)。S7-200從站協(xié)議遵守“以整字節(jié)地址邊界(如Q0.0、Q2.0)開始、以8的整數(shù)倍為位個(gè)數(shù)”的規(guī)約。如果HMI軟件未嚴(yán)格執(zhí)行此規(guī)律就可能發(fā)生寫入錯(cuò)誤的情況。 S7-200是否支持ModbusASCII模式? S7-200可以支持上述模式,但是沒有現(xiàn)成的指令庫,需要用戶自己編程。 項(xiàng)目編譯后為何出現(xiàn)很多錯(cuò)誤? 使用指令庫時(shí),若編譯后出現(xiàn)很多錯(cuò)誤,一般是因?yàn)槲粗付◣熘噶顢?shù)據(jù)存儲(chǔ)區(qū)。請(qǐng)參考相關(guān)條目。 S7-200CPU的Port1是否可以支持ModbusRTU協(xié)議? 可以。用戶可以自己編程實(shí)現(xiàn)。 在S7-200的“TipsandTricks”幫助文檔中,Tip041是ModbusRTU從站程序,用戶可以參考。 S7-200是否可以組成ModbusRTU通信網(wǎng)絡(luò)?如何組網(wǎng)? S7-200可以組成RS-485基礎(chǔ)上的ModbusRTU網(wǎng)絡(luò)。如果通信對(duì)象是不同標(biāo)準(zhǔn)的通信口,可能還需要轉(zhuǎn)換 址=40000+(T/2+1);T為偶數(shù) 上位機(jī)編程(組態(tài)王) 在用組態(tài)王通過modbus與200連接時(shí)注意設(shè)置串口通信模式,modbus默認(rèn)的是RTU模式,這也是200指令庫默認(rèn)的,注意地址、波特率、及通信格式的對(duì)應(yīng)。只要地址設(shè)定正確連接還是比較容易的。 硬件連線 使用ppi編程電纜即可。- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- S7 200 CPU 通信 自由 模式 實(shí)現(xiàn) Modbus 通信協(xié)議
鏈接地址:http://m.appdesigncorp.com/p-8357395.html