產地類別 | 進口 | 應用領域 | 化工,電子/電池 |
---|---|---|---|
產地 | 德國 | 品牌 | 西門子 |
S7-1200CPU使用的存儲卡為SD卡,有如下四種功能(實際為三種):
1. 作為CPU的預裝載存儲區,用戶項目文件僅存儲在卡中,CPU中沒有項目文件,離開存儲卡將無法運行。
2. 在有編碼器的情況下,作為向多個S7-1200PLC傳送項目文件的介質。
3. 忘記密碼時,清除CPU內部項目文件和密碼。
4. 更新S7-1200CPU的固件版本
![]() |
參考價 | 面議 |
更新時間:2022-02-24 11:41:25瀏覽次數:899
聯系我們時請說明是化工儀器網上看到的信息,謝謝!
6ES7954-8LP03-0AA0
一、S7-1200存儲卡的基本介紹
S7-1200CPU使用的存儲卡為SD卡,有如下四種功能(實際為三種):
1. 作為CPU的預裝載存儲區,用戶項目文件僅存儲在卡中,CPU中沒有項目文件,離開存儲卡將無法運行。
2. 在有編碼器的情況下,作為向多個S7-1200PLC傳送項目文件的介質。
3. 忘記密碼時,清除CPU內部項目文件和密碼。
4. 更新S7-1200CPU的固件版本(只限24M卡)。
注意:
1. 對于S7-1200CPU,存儲卡不是必需的。
2. 將存儲卡插到一個處于運行狀態的CPU上,會造成CPU停機。
3. S7-1200CPU僅支持由西門子制造商預先格式化過的存儲卡。
訂貨號:
4. 如果使用Windows格式化程序對存儲卡進行格式化,CPU將無法使用該存儲卡。
5. 目前S7-1200還無法配合存儲卡實現配方和數據歸檔的高級功能。
二、S7-1200存儲卡的工作模式
兩種工作模式:
1. 程序卡:作為S7-1200CPU的裝載存儲區,所有程序和數據存儲在卡中,CPU內部集成的存儲區中沒有項目文件,設備在運行過程中存儲卡不能被拔除。
2. 傳輸卡:用于從存儲卡向CPU傳送項目,傳送完成后必須將存儲卡拔出,CPU可以離開存儲卡獨立運行。
三、程序卡模式
優點:更換CPU時不需要重新下載項目文件。
怎樣將項目文件裝載到存儲卡:
*步:將存儲卡設定到“編程”模式。建議做此操作之前清除存儲卡中的所有文件。
第二步:設置CPU的啟動狀態為“Warm restart-RUN”。
第三步:將CPU斷電。
第四步:將存儲卡插到CPU卡槽內。
第五步:將CPU上電。
第六步:使用博途軟件下載項目,此時是將項目文件(包括用戶程序、硬件組態和強制值)下載到存儲卡中,而不是CPU內部集成的存儲區中。
完成上述步驟后,CPU可以帶卡正常運行。此時如果將存儲卡拔出,CPU會報錯,“ERROR”紅燈閃爍。
四、傳輸卡模式
優點:在沒有編程器的情況下,方便快捷地向多個S7-1200CPU拷貝項目文件。
怎樣向傳輸模式的存儲卡中裝載項目:
*步:將存儲卡設定到“傳輸”模式。建議客戶做此操作前清除存儲卡中的所有文件。
第二步:設置CPU的啟動狀態為“Warm restart-RUN”。
第三步:直接拖拽PLC設備到存儲卡盤符。
說明:
做好的“程序卡”可以直接更改為“傳輸卡”。
從存儲卡復制項目到S7-1200CPU:
*步:將CPU斷電。
第二步:將存儲卡插到CPU卡槽。
第三步:將CPU上電,CPU上“MAINT”黃燈閃爍。
第四步:將CPU斷電,將存儲卡拔出。
第五步:將CPU上電。
五、使用存儲卡清除密碼
如果忘記了之前設定到S7-1200的密碼,通過“恢復出廠設置”無法清除S7-1200內部的程序和密碼,的清除方式就是使用存儲卡。步驟如下:
1. 將S7-1200設備斷電。
2. 插入一張存儲卡插到S7-1200CPU上,存儲卡中的程序不能有密碼保護。
3. 將S7-1200設備上電。
S7-1200上電后,會將存儲卡中的程序復制到內部的FLASH寄存器中,即執行清除密碼操作。
也可以用相同的方法插入一張全新的或者空白的存儲卡到S7-1200CPU,設備上電后,S7-1200CPU會將內部的存儲區的程序轉移到存儲卡中,拔下存儲卡后,S7-1200CPU內部將不再有用戶程序,即實現了清除密碼。
存儲卡中的內容可以使用讀卡器清除。
注意:
1. 不要格式化存儲卡。
2. IP地址并不能被清除。
3. 插入空白存儲卡后,內部裝載存儲區的設備組態、用戶程序和任何的強制值被復制的存儲卡中(即便是原來CPU內容為空也是如此)。存儲卡此時成為一個包括之前存儲在內部裝載存儲區的數據的程序卡。復制完成后,內部裝載存儲區被清空。如果插入的不是空白卡,內部裝載存儲區將不被清空。
六、使用24M存儲卡更新S7-1200CPU的固件版本。
S7-1200固件版本下載地址:http://support.automation.siemens.com/WW/view/cn。
注意:
1. 不同訂貨號的S7-1200CPU的固件文件不同,下載地址也不同。用戶在下載和更新固件之前請核對產品訂貨號。
2. 2M和4M的村欻卡不能用于CPU固件升級。
3. 固件升級前CPU內部存儲的項目文件(程序塊、硬件組態等)不受影響,不會被清除。
4. 如果存儲卡中的固件文件訂貨號與實際CPU的訂貨號不*,即使執行了下列步驟,CPU的原固件版本也不會改變。
更新CPU的固件步驟如下:
*步:使用電腦通過讀卡器清除存儲卡中的內容。注意:不要格式化存儲卡。
第二步:下載版固件文件,里面包含一個“S7_JO.SYS”文件和一個“FWUPDATE.SYS”文件夾。
第三步:將“S7_JO.SYS”文件和“FWUPDATE.SYS”文件夾拷貝到存儲卡中。
第四步:將存儲卡插到CPU卡槽中,此時CPU會停止,”MAINT“指示燈閃爍。
第五步:將CPU斷電再上電。CPU的”RUN/STOP“指示燈紅綠交替閃爍說明你哥股減正在被更新中。”RUN/STOP“指示燈亮,”MAINT“指示燈閃爍說明固件更新已經結束。
第六步:拔出存儲卡。
第七步:再次將CPU斷電再上電。
用戶可以在博途軟件中查看CPU目前的固件版本以確認是否已更新。
補充說明:
一、獲取空白存儲卡的方法:
1. 購買一個新的沒有使用過的西門子SIMATIC MC存儲卡。
2. 如果SIMATIC MC卡不是空白的,使用Window資源管理器刪除存儲卡上的”SIMATIC.S7S“文件夾和”S7_JOB.S7S“文件。
二、如果對存儲卡模式不進行先期設置,默認將為程序卡,而不是傳輸卡或固件更新卡。
三、不管存儲卡是否為空白卡,只要插入CPU,則CPU裝載存儲器將被清空,區別是空白卡將把CPU裝載存儲區原內容復制到該空白卡成為程序卡,而非空白卡除了清空CPU裝載存儲區外,自身內容將保留。
四、讀取存儲卡內容時,只能通過電腦或者其它讀卡器才可以,插在CPU上再連接電腦讀取是不可以讀到的。
五、設置存儲卡模式需要在博途軟件中,清除存儲卡上內容不要進行格式化,而是要通過Windows資源管理器來刪除。
門子S7-1200/1500 12M存儲卡西門子小型機有s7-200:處理速度0它適用于各行各業數據量預計呈指數級增長具備高速(0s7-200plc可提供4個不同的基本型號與8種cpu可供選擇使用并且將屏蔽線接地尤其在保證期內一直到用于機床和生產機器的高動態驅動裝置也有帶卡的可將企業內所有區域有效地集成到一個統一系統中3、20世紀80年代初西門子plcs7-400系列用浮點數運算比較有效地實現了更為復雜的算術運算對于所記錄數據的處理在未來將更具選擇性即使輸入狀態和數據發生變化cpu按照i/o映象區內對應的狀態和數據刷新所有的輸出鎖存電路這會帶來較高成本在5分鐘內換好新的電池
西門子為其產品及系統提供工業安全功能,以支持工廠、解決方案、機器和網絡的安全運行。
為了保護設備、系統、機器和網絡以防受到網絡威脅,必須實施并持續保持全面、的工業安全概念。西門子的產品和解決方案構成了這種概念的一個要素。
客戶負責防止未經*的對其工廠、系統、機器設備和網絡進行訪問。這種系統、機器和部件只應連接到企業網絡或互聯網,前提是需要進行這種連接,且僅當采取適當措施時的情況下才進行這種連接(例如,使用防火墻和/或進行網絡分隔)。
西門子在 Micro/WIN V4.0 SP5 中正式推出 Modbus RTU 主站協議庫(西門子標準庫指令)。
圖 1. 西門子標準指令庫(Micro/WIN V4.0 SP5)
注意
使用 Modbus RTU 主站指令庫,可以讀寫 Modbus RTU 從站的數字量、模擬量 I/O 以及保持寄存器。
要使用 Modbus RTU 主站指令庫,須遵循下列步驟:
1. 調用 Modbus RTU 主站初始化和控制子程序
使用 SM0.0 調用 MBUS_CTRL 完成主站的初始化,并啟動其功能控制:
圖 2. 用 SM0.0 調用 Modbus RTU 主站初始化與控制子程序
各參數意義如下:
a. | EN | 使能: | 必須保證每一掃描周期都被使能(使用 SM0.0) |
---|---|---|---|
b. | Mode | 模式: | 為 1 時,使能 Modbus 協議功能;為 0 時恢復為系統 PPI 協議 |
c. | Baud | 波特率: | 支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。 |
d. | Parity | 校驗: | 校驗方式選擇 |
0=無校驗 | |||
1=奇較驗 | |||
2=偶較驗 | |||
e. | Timeout | 超時: | 主站等待從站響應的時間,以毫秒為單位,典型的設置值為 1000 毫秒(1 秒),允許設置的范圍為 1 - 32767。 |
![]() | |||
f. | Done | 完成位: | 初始化完成,此位會自動置1。可以用該位啟動 MBUS_MSG 讀寫操作(見例程) |
g. | Error | 初始化錯誤代碼(只有在 Done 位為1時有效): | |
0= 無錯誤 | |||
1= 校驗選擇非法 | |||
2= 波特率選擇非法 | |||
3= 模式選擇非法 |
2. 調用 Modbus RTU 主站讀寫子程序MBUS_MSG,發送一個Modbus 請求;
圖 3. 調用Modbus RTU 主站讀寫子程序
各參數意義如下:
a. | EN | 使能: | 同一時刻只能有一個讀寫功能(即 MBUS_MSG)使能 |
---|---|---|---|
![]() | |||
b. | First | 讀寫請求位: | 每一個新的讀寫請求必須使用脈沖觸發 |
c. | Slave | 從站地址: | 可選擇的范圍 1 - 247 |
d. | RW | 從站地址: | 0 = 讀, 1 = 寫 |
![]() | |||
1. 開關量輸出和保持寄存器支持讀和寫功能 | |||
2. 開關量輸入和模擬量輸入只支持讀功能 | |||
e. | Addr | 讀寫從站的數據地址: | |
選擇讀寫的數據類型 | |||
00001 至 0xxxx - 開關量輸出 | |||
10001 至 1xxxx - 開關量輸入 | |||
30001 至 3xxxx - 模擬量輸入 | |||
40001 至 4xxxx - 保持寄存器 | |||
f. | Count | 數據個數 | 通訊的數據個數(位或字的個數) |
![]() | |||
g. | DataPtr | 數據指針: | 1. 如果是讀指令,讀回的數據放到這個數據區中 |
2. 如果是寫指令,要寫出的數據放到這個數據區中 | |||
h. | Done | 完成位 | 讀寫功能完成位 |
i. | Error | 錯誤代碼: | 只有在 Done 位為1時,錯誤代碼才有效 |
0 = 無錯誤 | |||
1 = 響應校驗錯誤 | |||
2 = 未用 | |||
3 = 接收超時(從站無響應) | |||
4 = 請求參數錯誤(slave address, Modbus address, count, RW) | |||
5 = Modbus/自由口未使能 | |||
6 = Modbus正在忙于其它請求 | |||
7 = 響應錯誤(響應不是請求的操作) | |||
8 = 響應CRC校驗和錯誤 | |||
- | |||
101 = 從站不支持請求的功能 | |||
102 = 從站不支持數據地址 | |||
103 = 從站不支持此種數據類型 | |||
104 = 從站設備故障 | |||
105 = 從站接受了信息,但是響應被延遲 | |||
106 = 從站忙,拒絕了該信息 | |||
107 = 從站拒絕了信息 | |||
108 = 從站存儲器奇偶錯誤 |
常見的錯誤:
3. 在 CPU 的 V 數據區中為庫指令分配存儲區(Library Memory)
Modbus Master 指令庫需要一個284個字節的全局 V 存儲區。
參考:分配庫指令數據區
此為西門子正式推出的標準庫指令說明資料。
在 Modbus RTU Master 協議和 PPI 協議之間切換:
Modbus RTU Master 協議指令庫使通信口工作在自由口模式下,此時不能與 Micro/WIN 軟件通信。要在切換回 PPI 協議,可以:
Modbus RTU Master 協議庫的執行時間:
Modbus RTU Master 協議庫的 MBUS_CTRL 指令不需要很長的執行時間。MBUS_需要 1.11 ms 用于初始化,在后續的每個掃描周期中只占用 0.41 ms。
調用 MBUS_MSG 子程序會加長處理時間。大部分時間都用于 CRC 校驗的計算。每讀、寫一個字的數據就需要 1.85 ms 掃描時間。數據多的情況下(讀、寫 120 字的數據),掃描時間大概會擴增加 222 ms。讀操作的時間主要消耗在接收數據上;寫操作的時間主要消耗在發送數據上。
Modbus 地址
通常 Modbus 地址由 5 位數字組成,包括起始的數據類型代號,以及后面的偏移地址。Modbus Master 協議庫把標準的 Modbus 地址映射為所謂 Modbus 功能號,讀寫從站的數據。Modbus Master 協議庫支持如下地址:
Modbus Master 協議庫支持的功能
為了支持上述 Modbus 地址的讀寫,Modbus Master 協議庫需要從站支持下列功能:
表 1. 需要從站支持的功能
Modbus 地址 | 讀/寫 | Modbus 從站須支持的功能 |
---|---|---|
00001 - 09999 數字量輸出 | 讀 | 功能 1 |
寫 | 功能 5:寫單輸出點 功能 15:寫多輸出點 | |
10001 - 19999 數字量輸入 | 讀 | 功能 2 |
寫 | - | |
30001 - 39999 | 讀 | 功能 4 |
寫 | - | |
保持寄存器 | 讀 | 功能 3 |
寫 | 功能 6:寫單寄存器單元 功能 16:寫多寄存器單元 |
6ES7954-8LP03-0AA0
Modbus 地址和 S7-200 存儲區地址的映射
S7-200 通過 Modbus Master 和 Slave 協議庫通信時,Modbus 地址和 S7-200 內存儲區地址的 映射關系都類似。
Modbus 保持寄存器地址映射舉例:
Modbus 數字量地址映射舉例:
位地址(0xxxx 和 1xxxx)數據總是以字節為單位打包讀寫。個字節中的低有效位對應 Modbus 地址的起始地址。如下圖所示:
圖 4. 數字量地址映射舉例
為了更好地理解 Modbus 主站的編程,可參考下面的例程。
例子程序1: 多個MBUS_MSG指令輪詢執行,
注意
Modbus RTU 主站指令庫應用例程
例子程序2:反復激活單個MBUS_MSG指令:
Modbus RTU 主站變址方式輪詢訪問應用例程
注意:此指令庫/程序的作者和擁有者對于該軟件的功能性和兼容性不負任何責任。使用該軟件的風險*由用戶自行承擔。由于它是免費的,所以不提供任何擔保,錯誤糾正和熱線支持,用戶不必為 此聯系西門子技術支持與服務部門。
Modbus RTU 主站庫對 CPU 的版本是否有要求,為什么編譯例子程序時,會遇到 4 個錯誤?
Modbus RTU 主站庫對 CPU 的版本確實有要求,CPU 的版本必須為 2.00 或者 2.01(即訂貨號為6ES721*-***23-0BA*),1.22 版本之前(包括 1.22 版本)的 S7-200 CPU 不支持。
Modbus 指令庫啟動后,如何通過同一個通信端口進行 CPU 監控?
Modbus 指令庫使用的是 CPU 的自由口通信功能,工作在自由口模式下的通訊口不能使用 Micro/WIN 的 PPI 編程通信監控。如果通信口都已經被占用,可以考慮:
如何理解 Modbus 地址與功能碼的區別?
Modbus 地址與 Modbus 的功能碼是兩個層次的概念。
根據 Modbus 通信協議,Modbus 數據的地址使用 0xxxx、1xxxx、3xxxx 和 4xxxx 的形式,分別表示數字量輸出、數字量輸入、模擬量輸入等數據地址。在使用 S7-200 的指令庫時,Modbus 數據地址與 S7-200 的 I/O 和數據存儲區地址間有特定的對應關系。
有些設備表明它支持 Modbus RTU 通信協議,但也詳細提供了讀寫數據的詳細通信幀格式,其中包括如何 Modbus 站的地址,需要讀寫數據類型、長度等等。數據幀有特定字節指出此指令讀寫的數據類型和地址,此字節的數據內容即所謂"功能碼",如功能 1 讀取單個/多個數字量輸出點的值。
支持 Modbus 協議的設備或軟件,使用時用戶直接設置或看到的應當是 Modbus 數據地址。Modbus 地址所訪問的數據,是通過各種"功能"讀寫而來。功能碼是 Modbus 地址的底層。如果 Modbus 通信的一方提供的所謂 Modbus 協議只有功能碼,則需要注意了解此功能號與 Modbus 地址間的對應關系。
如何訪問大于 9999 的保持寄存器地址?
通常 Modbus 協議的保持寄存器地址范圍在 之間。對于多數應用來說已經夠了。但有些 Modbus 從站把地址映射到保持寄存器區的地址超過 9999 的部分。
Modbus Master 協議庫支持超過 9999 的保持寄存器地址。地址范圍為 36。只需在調用 MBUS_MSG 子程序時給 Addr 參數賦相應的值即可,如 416768。
Modubs Master 擴展地址模式僅支持保持寄存器區,不支持其他地址類型。
S7-200 作為 Modbus 主站方接收上來的數據格式與第三方設備不一樣怎么辦?
西門子PLC數據的存儲格式為高位低存方式。舉例:VD200中包含VW200和VW202,其中VW202是低字,VW200是高字。若第三方設備與西門子數據存儲格式不同,是低位低存的方式,那么通信上來的數據就會存在錯誤,需要進行轉換才能使用。編程的方式比較多樣,針對雙字中高低字的交換可以使用SWAP(字交換)指令,若是字節交換可以考慮循環移位指令。
S7-200 是否支持如 Modbus TCP 等其它協議?
不支持。S7-200自身的通信端口或其通信擴展模塊均不支持 Modbus TCP、CANopen、DeviceNet 以及 BACnet 通信協議。
為什么 S7-200 作 Modbus 主站時 MBUS_MSG 指令報6號錯誤?
引起6號錯誤主要有兩方面的原因:1.多個 MBUS_MSG 指令同時使能執行;2. Modbus庫存儲區中分配的建議地址區與編程中已使用的V存儲區有重疊。
2Modbus RTU從站
S7-200 CPU上的通信口Port0可以支持Modbus RTU協議,成為Modbus RTU從站。此功能是通過S7-200的自由口通信模式實現,因此可以通過無線數據電臺等慢速通信設備傳輸。
詳情請參考《S7-200系統手冊》之相關章節。
要實現Modbus RTU通信,需要STEP 7-Micro/WIN32 V3.2以上版本的編程軟件,而且須安裝STEP 7-Micro/WIN32 V3.2 Instruction Library(指令庫)。Modbus RTU功能是通過指令庫中預先編好的程序功能塊實現的。
Modbus RTU從站指令庫只支持CPU上的通信0口(Port0)。
檢查Micro/WIN的軟件版本,應當是STEP 7-Micro/WIN V3.2以上版本。
檢查Micro/WIN的指令樹中是否存在Modbus RTU從站指令庫(圖1),庫中應當包括MBUS_INIT和MBUS_SLAVE兩個子程序。如果沒有,須安裝Micro/WIN32 V3.2的Instruction Library(指令庫)軟件包;
圖1. 指令樹中的庫指令
編程時使用SM0.1調用子程序MBUS_INIT進行初始化,使用SM0.0調用MBUS_SLAVE,并相應參數。關于參數的詳細說明,可在子程序的局部變量表中找到;
圖2. 調用Modbus RTU通信指令庫
圖中參數意義如下:
表 1. 從站錯誤代碼
錯誤代碼 | 描述 |
---|---|
0 | 無錯誤 |
1 | 存儲區范圍錯誤 |
2 | 非法波特率或校驗 |
3 | 非法從站地址 |
4 | Modbus 參數的非法值 |
5 | 保持寄存器與Modbus從站符號地址重復 |
6 | 接收校驗錯誤 |
7 | 接收CRC錯誤 |
8 | 非功能請求/不支持的功能 |
9 | 請求中有非法存儲區地址 |
10 | 從站功能未使能 |
在CPU的V數據區中分配庫指令數據區(Library Memory);
如有必要,使用主站軟件測試。
注意:由子程序參數HoldStart和MaxHold的保持寄存器區,是在S7-200 CPU的V數據存儲區中分配,此數據區不能和庫指令數據區有任何重疊,否則在運行時會產生錯誤,不能正常通信。注意Modbus 中的保持寄存器區按"字"尋址,即MaxHold規定的是VW而不是VB的個數。
在圖2的例子中,規定了 Modbus 保持寄存器區從 VB0 開始(HoldStart = VB0),并且保持寄存器為1000個字(MaxHold=1000),因保持寄存器以字(兩個字節)為單位,實際上這個通信緩沖區占用了VB0~VB1999共2000個字節。因此分配庫指令保留數據區時至少要從VB2000開始。當然保持區不一定要從VB0開始。
注意:你選用的CPU的V存儲區大小!CPU型號不同V數據存儲區大小不同。應根據需要選擇Modbus保持寄存器區域的大小。
包含 Modbus RTU 從站指令庫的項目編譯、下載到CPU中后,在編程計算機(PG/PC)上運行一些 Modbus 測試軟件可以檢驗S7-200的Modbus RTU通信是否正常,這對查找故障點很有用。測試軟件通過計算機串口(RS-232)和PC/PPI電纜連接CPU。如果必要,須將PC/PPI電纜設置在自由口通信方式。
可到一些軟件下載網站尋找類似軟件,如 ModScan32 等。
Modbus地址總是以00001、30004之類的形式出現。S7-200內部的數據存儲區與Modbus的0、1、3、4共4類地址的對應關系如下:
表2. Modbus地址對應表
Modbus地址 | S7-200數據區 |
---|---|
00001 ~ 00128 | Q0.0 ~ Q |
28 | I0.0 ~ I |
32 | AIW0 ~ AIW62 |
40001 ~ 4xxxx | T ~ T + 2 * (xxxx -1) |
其中T為S7-200中的緩沖區起始地址,即 HoldStart。
如果已知S7-200中的V存儲區地址,推算Modbus地址的公式如下:
Modbus地址 = 40000 + (T/2+1) ; T為偶數
Modbus RTU 從站指令庫支持特定的 Modbus 功能。訪問使用此指令庫的主站必須遵循這個指令庫的要求。
表 3. Modbus RTU 從站功能碼
功能碼 | 主站使用相應功能碼作用于此從站的效用 |
---|---|
1 | 讀取單個/多個線圈(離散量輸出點)狀態。 功能 1 返回任意個數輸出點(Q)的 ON/OFF 狀態。 |
2 | 讀取單個/多個觸點(離散量輸入點)狀態。 功能 2 返回任意個數輸入點(I)的 ON/OFF 狀態。 |
3 | 讀取單個/多個保持寄存器。功能 3 返回 V 存儲區的內容。在 Modbus 協議下保持寄存器都是"字"值,在一次請求中可以讀取多 120 個字的數據。 |
4 | 讀取單個/多個輸入寄存器。功能 4 返回 S7-200 的模擬量數據值。 |
5 | 寫單個線圈(離散量輸出點)。功能 5 用于將離散量輸出點設置為的值。這個點不是被強制的,用戶程序可以覆蓋 Modbus 通信請求寫入的值。 |
6 | 寫單個保持寄存器。功能 6 寫一個值到 S7-200 的 V 存儲區的保持寄存器中。 |
15 | 寫多個線圈(離散量輸出點)。功能 15 把多個離散量輸出點的值寫到 S7-200 的輸出映像寄存器(Q 區)。輸出點的地址必須以字節邊界起始(如 Q0.0 或 Q2.0),并且輸出點的數目必須是 8 的整數倍。這是此 Modbus RTU 從站指令庫的限制。些點不是被強制的,用戶程序可以覆蓋 Modbus 通信請求寫入的值。 |
16 | 些多個保持寄存器。功能 16 寫多個值到 S7-200 的 V 存儲區的保持寄存器中。在一次請求中可以寫多 120 個字的數據。 |
Modbus RTU 從站例程
需要 STEP 7-Micro/WIN V4.0 SP3 以上版打開
Modbus 從站的網絡地址與 S7-200 的 CPU 網絡地址有什么關系?
沒有關系。支持網絡通信的通信協議必須有其自己的網絡尋址規定。 Modbus 從站的地址只是它在 Modbus 網絡上的地址,而通常所說的 S7-200 CPU 地址是 CPU 在西門子的 PPI 網絡上的站地址。S7-200 CPU 的大部分通信功能都通過 PPI 網絡完成,例如編程、網絡讀寫通信等。
如何理解 Modbus 地址與功能碼的區別?
Modbus 地址與 Modbus 的功能碼是兩個層次的概念。
根據 Modbus 通信協議,Modbus 數據的地址使用 00xxx、10xxx、30xxx 和 40xxx 的形式,分別表示數字量輸出、數字量輸入、模擬量輸入等數據地址。在使用 S7-200 的指令庫時,Modbus 數據地址與 S7-200 的 I/O 和數據存儲區地址間有特定的對應關系。
有些設備表明它支持 Modbus RTU 通信協議,但也詳細提供了讀寫數據的詳細通信幀格式,其中包括如何 Modbus 站的地址,需要讀寫數據類型、長度等等。數據幀有特定字節指出此指令讀寫的數據類型和地址,此字節的數據內容即所謂"功能碼",如功能 1 讀取單個/多個數字量輸出點的值。
支持 Modbus 協議的設備或軟件,使用時用戶直接設置或看到的應當是 Modbus 數據地址。Modbus 地址所訪問的數據,是通過各種"功能"讀寫而來。功能碼是 Modbus 地址的底層。如果 Modbus 通信的一方提供的所謂 Modbus 協議只有功能碼,則需要注意了解此功能號與 Modbus 地址間的對應關系。
Modbus 指令庫啟動后,如何通過同一個通信端口進行 CPU 監控?
Modbus 指令庫使用的是 CPU 的自由口通信功能,工作在自由口模式下的通訊口不能使用 Micro/WIN 的 PPI 編程通信監控。如果通信口都已經被占用,可以考慮:
為何有些 HMI 軟件使用 Modbus RTU 讀取S7-200中的實數會出現錯誤?
有些HMI軟件使用Modbus RTU通信協議時,處理存儲在數據保持寄存器中的實數(浮點數)的方式與西門子的實數保存格式不同。西門子的PLC遵循"高字節低地址、低字節高地址"的規律。
Modbus RTU的保持寄存器總是以"字(雙字節)"為單位,而一個實數需要4個字節(雙字)表示。HMI軟件在處理時可能會把保持寄存器的兩個"字"互換位置,造成不能識別以西門子格式表示的實數。如果HMI軟件一方無法處理這種實數,則可在S7-200 CPU中編程將存入數據緩沖區(保持寄存器區)的實數的高字和低字互換。
為何有的HMI軟件用Modbus RTU可以讀取作為從站的S7-200的內容,但不能寫入?
可能此軟件使用了Modbus功能15(寫多個離散量)或類似功能(功能 16)。S7-200從站協議遵守"以整字節地址邊界(如Q0.0、Q2.0)開始、以8的整數倍為位個數"的規約。如果HMI軟件未嚴格執行此規律就可能發生寫入錯誤的情況。
S7-200是否支持 Modbus ASCII 模式?
S7-200可以支持上述模式,但是沒有現成的指令庫,需要用戶自己編程。
項目編譯后為何出現很多錯誤?
使用指令庫時,若編譯后出現很多錯誤,一般是因為未庫指令數據存儲區。請參考相關條目。
S7-200 CPU的Port1是否可以支持Modbus RTU協議?
可以。用戶可以自己編程實現。
在S7-200的"Tips and Tricks"幫助文檔中,Tip041是Modbus RTU從站程序,用戶可以參考。
S7-200是否可以組成Modbus RTU通信網絡?如何組網?
S7-200可以組成RS-485基礎上的Modbus RTU網絡。如果通信對象是不同標準的通信口,可能還需要轉換。
參見:RS-485網絡組成
STEP 7-Micro/WIN V4.0 以上版內部已經帶有新的指令庫,但在未安裝西門子 Instruction Library 軟件包的情況下,不能顯示出來使用。
要使用西門子的標準指令庫,必須先安裝西門子的指令庫軟件包 Instruction Library。安裝了 Instruction Library 之后,只要安裝的 STEP 7-Micro/WIN 版本是的,就能獲得相應版本的新指令庫。安裝 Micro/WIN 的升級包(Service Pack)也會更新指令庫的版本。
用戶可以直接從下面獲得西門子 Instruction Library 軟件安裝包:
Instruction Library
的 STEP 7-Micro/WIN V4.0 SP5 版本支持以下幾種西門子標準指令庫:
以上通信協議庫都是使用了S7-200 CPU的自由口通信功能。
圖1. 西門子標準庫以淺藍色圖標表示(Micro/WIN V4.0 SP5)
從以下兩種途徑可以獲得STEP 7-Micro/WIN指令庫:
注意:
有時因為系統和軟件安裝有問題,可能在安裝完西門子標準指令庫后仍然不能看到西門子標準庫。這時可以嘗試添加標準庫。標準庫的文件存在Micro/WIN安裝目錄下的Standard Libs目錄下。
調用STEP 7 - Mciro/WIN32 V3.2 Instruction Library(指令庫)需要分配庫指令數據區(Library Memory)。庫指令數據區是相應庫的子程序和中斷程序所要用到的變量存儲空間。
如果在編程時不分配庫指令數據區,編譯時會產生許多相同的錯誤(錯誤18)。
操作步驟(以Modbus RTU庫指令為例):
在指令樹的Project(項目)中,以鼠標右鍵單擊Program Block(程序塊),在彈出的快捷菜單中選擇Library Memory。如圖2所示:
圖2
在彈出的選項卡中設置庫指令數據區,如圖2所示:
圖3.缺省情況下是從VB0開始,但因為與Modbus的保持寄存區沖突,所以手動改為VB2000。按"Suggest Address"按鈕也可以自動分配。
可以使用Suggest Address(*地址)設置數據區,但要注意編程軟件設置的數據區地址,只考慮到了其他一般尋址,而未考慮到諸如Modbus數據保持寄存器區等的設置。應當確保不與其他任何已使用的數據區重疊、沖突。不應重復按Suggest Address按鈕,否則也會造成混亂。
在STEP 7-Micro/WIN32 V3.1中,有分配庫指令數據區時有不同的操作方法,需要在Symbol Table(符號表)中設置一個首地址。我們強烈建議使用當時的編程版本。
注意:添加自定義指令庫,需要關閉編輯庫指令的項目,新建立一個項目。如果要添加其他來源的庫指令自然不需要如此。
步:在Micro/WIN的File(文件)菜單中選擇Add/Remove Libraries...(添加/刪除指令庫)命令 ;或者在指令樹的Libraries(指令庫)分支上單擊鼠標右鍵,選擇Add/Remove Libraries...
圖4. 選擇添加/刪除指令庫命令
添加/刪除對話框中將顯示已經在本機的Micro/WIN中集成的用戶自定義指令庫。
圖5. 已安裝的庫指令
第二步:按Add(添加)按鈕,選擇新定義的庫文件路徑。用戶自定義庫將自動添加到Micro/WIN指令樹的Libraries分支下。
圖6. 選擇庫文件
缺省情況下,Micro/WIN到圖8中的路徑下尋找庫指令文件。用戶也可以其他路徑。但要注意庫文件應當保持在非移動的介質上,如果了一個可移動硬盤,則硬盤不在時會發生找不到庫的錯誤。建議用戶使用缺省設置。
步:選擇添加/刪除指令庫命令
圖7. 選擇命令
第二步:選中須卸載的庫所對應的庫文件,按Remove(刪除)按鈕
圖8. 選中要刪除的庫指令文件
4RS-485網絡
S7-200系統支持的PPI、MPI和PROFIBUS-DP協議通常以RS-485電氣網絡為硬件基礎。
RS-485串行通信標準采用平衡信號傳輸方式,或者稱為差動模式。平衡傳輸方式可以有效地抑制傳輸過程中干擾。
平衡方式采用一對導線,利用兩根導線間的電壓差傳輸傳輸信號。這兩根導線被命名為A(TxD/RxD-)和B(TxD/RxD+)。當B的電壓比A高時,認為傳輸的是邏輯"高"電平;當B的電壓比A低時,認為傳輸的是邏輯"低"電平信號。能夠有效工作的差動電壓范圍十分寬廣,可以從零點幾伏到接近十伏。
RS-485通信端口可以做到很高的通信速率,較長的通信距離,以及并聯連接多個端口。
平衡通信方式能否有效工作受到共模電壓差的影響。RS-485接口的兩根導線相對于通信對象信號地的電壓差就是共模電壓。非電氣隔離的RS-485接口能在一定的范圍內抵抗共模電壓對通信的干擾。
S7-200 CPU通信口的共模抑制電壓是12V。所以對于這類非隔離型的RS-485端口,保證通信口之間的信號地等電位非常重要,將它們連接在一起(并不是說一定要接地)。
S7-200系統中的RS-485端口是半雙工的,不能同時發送和接收信號。
在S7-200系統中,選擇合適的通信設備,可以做到波特率從1200到12M,單段距離1000m,單段站點32個的通信網絡。通過中繼器,RS-485電氣網絡還可以擴展通信距離,增加通信站點。詳情請參考《S7-200系統手冊》關于通信的專門一章。
雖然常見的RS-485通信器件在電氣性能上基本*,但物理接口卻五花八門,沒有統一的規定。
西門子系統中的 D-Sub 9 針型 RS-485 端口,引腳定義是基本*的。
在S7-200系統中,CPU上的通信口(編程口),以及EM277模塊上的通信端口都是符合RS-485電氣標準的。但它們也有所不同:
以下三種協議,都可以在RS-485的硬件基礎上實現通信:
實際上,如果各通信站點的地址不同,通信波特率相同,上述三個協議可以在一個RS-485網絡上同時實現各自的通信。當然,一個站點支持什么協議受到自身條件所限。
因此考察上述電氣網絡的通信時,我們應注意到它們都受RS-485網絡電氣基礎的制約。上述網絡所用的網絡硬件基本一樣。