有時你會發現你很難用LAD(梯形邏輯)或FBD(功能框圖)編寫PLC程序。特別是,如果你必須使用一些數學運算或大量運算。
在這些情況下,我們實際上可以很輕松的輕松使用SCL / ST(結構化控制語言/結構化文本)。
在SCL中編寫您的第一個TIA程序:
步驟1 –創建或打開TIA項目就像對LAD或FBD進行編程一樣,必須使用PLC創建或打開一個項目以進行編程。所有SIMATIC PLC(S7-300,S7-400,S7-1200和S7-1500)都支持SCL 。在此示例中,我將使用S7-1515-2 PN,但它也可與其他S7-1500或S7-1200 PLC一起使用。
第2步–添加FB / FC在打開項目并使用PLC之后,我們可以添加功能[FC]或功能塊[FB]。FC和FB之間的區別在于存儲能力。FB可以存儲在PLC循環之后仍然可用的數據。這次例子,我們只需要一個FC。雙擊“ PLC /程序塊”文件夾中的“添加新塊”。現在,“添加新塊”對話框打開。在這里,我們可以選擇要創建的塊類型,在本例中為FC。選擇塊類型后,我們必須選擇要編程的語言。下拉列表將顯示所選塊類型與PLC類型結合使用的所有可能的編程語言。當然,我們將使用“ SCL”。如果需要,還可以在“其他信息”部分的下面添加其他信息,例如作者,版本等。現在我們可以通過在對話框中單擊“確定”來創建塊。
步驟3 –修改塊接口創建塊后,我們可以修改FC的接口。在我們的例子中,我們將輸入類型為[Array [0..5]的INT]的輸入,類型為[INT]的輸出和兩個類型為[INT]的臨時變量。注意:在FB中,還顯示了一個靜態部分,該部分具有足夠的能力存儲數據,而不是實際的PLC周期。
步驟4 –輸入SCL代碼在下一步中,我們輸入代碼以確定數組元素的Zui大值。代碼將通過數組從索引0迭代到5,并比較實際值是否大于“ tempMax”值。Zui后,我們將獲得數組中包含的Zui大值。在第一行,我們將“ tempMax”設置為定義的值。在這種情況下為零。在第三行中,我們開始“ FOR”循環。這將使用“ tempCount”變量來存儲循環的實際索引。開始時將其設置為零,直到達到五為止一直運行。因此,我們將循環運行六次(0-> 1-> 2-> 3-> 4-> 5)。“ FOR”循環的代碼由第三行的“ FOR…”語句和“ END_FOR;”封裝。第七行的聲明。該代碼塊包含一個“ IF”塊,如果語句“ #In [#tempCount]> #tempMax”將返回“ TRUE”,則該塊將僅處理其內部代碼,因此實際的“ maxTemp”小于數組的值索引為#tempCount的元素。由于博途的智能識別功能,TIA門戶在輸入代碼時會提供建議。另外,就像其他語言的編輯器一樣,你在文本編輯器區域的頂部有一個喜歡的指令列表。在這里,你可以通過將其他說明從說明標簽中拖動來添加其他說明。
步驟5 –建立數據塊DB為了能夠為我們的程序提供一些值,我們必須創建一個全局數據塊[DB]來提供一些數據,就像我們為FC所做的那樣。我們還將輸入一些啟動數據,這些數據將在PLC啟動時提供給全局DB。
步驟6 –在OB1中調用FC要在我們的PLC中使用FC,我們可以在Main [OB1]中調用該塊,并為其提供來自“ dbGlobal”的值。添加調用之后,我們可以編譯程序代碼并將其加載到我們的PLC中或使用PLCsim對其進行仿真。
步驟7 –測試連接到設備后(通過選擇PLC并單擊“聯機”)并在塊中激活觀察模式,我們可以檢查程序的行為。
我們可以創建一個觀察表來觀察和修改值以測試我們的代碼。在“修改值”列中輸入要設置的新值,然后單擊工具欄中的“設置”按鈕。新值將被設置到變量中,并且代碼將使用新值進行處理。注意:請記住,由PLC程序設置的變量將在每個新周期覆蓋手動設置值。可以修改顯示格式,例如以十六進制或二進制表示形式顯示變量,例如 16#09或2#0000 1001。因此,更容易閱讀例如“狀態詞”。
步驟8 –更通用的方法在塊接口處,可以定義具有可變限制的輸入陣列,以便為具有不同長度的陣列的塊提供更好的可重用性。在這里,我們必須調整FC上的接口并添加代碼以確定數組的上下邊界。它也可以使用多維數組來做到這一點。注意:請記住,此功能僅在較新的PLC(1200/1500)中可用。
利弊
優點 | 缺點 |
易于編寫復雜的代碼 | 難以跟蹤信號序列(為什么不將其用于故障安全PLC編碼) |
適合大規模運營 | 邏輯上不正確的概述 |
開關盒易于編程 | 有時很難讀 |
注意:可以自由使用Zui適合我們需要的編程語言。在以前的課程中,我們看到了在FBD代碼中使用SCL網絡。例如,SCL塊中的程序復雜代碼和FBD塊中輸出的互鎖部分。