博圖SCL基礎知識-表達式及賦值運算

S7-1200 從 V2.2 版本開始支持 SCL 語言

語言元素

SCL 除了包含 PLC 的典型元素(例如,輸入、輸出、定時器或存儲器位)外,還包含高級編程語言表達式、賦值運算和運算符

程序控制語句

SCL 提供了簡便的指令進行程序控制。例如,創建程序分支、循環或跳轉。

表達式

說明:表達式將在程序運行期間進行運算,然后返回一個值。一個表達式由操作數(如常數、變量或函數調用)和與之搭配的操作符(如 *、/、+ 或 -)組成。通過運算符可以將表達式連接在一起或相互嵌套。

運算順序

表達式將按照下面因素定義的特定順序進行運算:

  • 相關運算符的優先級,優先級數越小越優先
  • 同等優先級運算符的運算順序按照從左到右的順序
  • 賦值運算的計算按照從右到左的順序進行
  • 括號優先級最高

算數表達式

說明:算術表達式既可以是一個數字值,也可以是由帶有算術運算符的兩個值或表達式組合而成。

算術運算符可以處理當前 CPU 所支持的各種數據類型。如果在該運算中有 2 個操作數,那么可根據以下條件來確定結果的數據類型:

  • 如果這 2 個操作數均為有符號的整數,但長度不同,那么結果將采用長度較長的那個整數數據類型(例如,Int + DInt = DInt)。
  • 如果這 2 個操作數均為無符號整數,但長度不同,那么結果將采用長度較長的那個整數數據類型(例如,USInt + UDInt = UDInt)。
  • 如果一個操作數為有符號整數,另一個為無符號整數,那么結果將采用另一個長度較大的有符號數據類型(其包含此無符號整數)(例如,SInt + USInt = Int)
  • 如果一個操作數為整數,另一個為浮點數,那么結果將采用浮點數的數據類型(例如,Int + Real = Real)。
  • 如果 2 個操作數均為浮點數,但長度不同,結果將采用長度較長的那個浮點數的數據類型(例如,Real + LReal = LReal)。
  • 對于操作數為"Time"和"日期和時間"數據類型組,運算結果的數據類型請參見表1。

算術表達式的數據類型

表1列出了在算術表達式中可使用的數據類型:

運算運算符優先級第一個操作數第二個操作數結果
乘方**2整數/浮點數整數/浮點數浮點數
正號+3整數/浮點數-整數/浮點數
TimeTime
負號-整數/浮點數-整數/浮點數
TimeTime
乘法*4整數/浮點數整數/浮點數整數/浮點數
Time整數Time
除法/整數/浮點數整數/浮點數(≠0)整數/浮點數
Time整數Time
取模MOD整數整數整數
加法+5整數/浮點數整數/浮點數整數/浮點數
TimeTimeTime
TimeDIntTime
TODTimeTOD
TODDIntTOD
DateTODDTL
DTLTimeDTL
減法-整數/浮點數整數/浮點數整數/浮點數
TimeTimeTime
TimeDIntTime
TODTimeTOD
TODDIntTOD
TODTODTime
DateDateTime
DTLTimeDTL
DTLDTLTime

示例

以下為一些算術表達式的示例:

"MyTag1":= "MyTag2" * "MyTag3";

關系表達式

說明:關系表達式將兩個操作數的值或數據類型進行比較,然后得到一個布爾值。如果比較結果為真,則結果為 TRUE,否則為 FALSE。

關系運算符可以處理當前 CPU 所支持的各種數據類型。結果的數據類型始終為 Bool。

編寫關系表達式時,請注意以下規則:

  • 以下數據類型組中的所有變量都可以進行比較:
    • 整數/浮點數
    • 位、位序列
    • 字符串
  • 對于以下數據類型,只能比較相同類型的變量:
    • TIME
    • 日期和時間
    • UDT
    • Array
    • Struct
    • Variant
  • String 比較是對以 Windows 字符集編碼的字符進行比較;而 WSting比較則是對 UTF-16 編碼的字符進行比較。在比較過程中,將比較變量的長度及各字符對應的數值。
  • Array 比較需要數組維度、數組元素數據類型與數量完全相同
  • UDT、Array、Struct、Variant等進行的比較只能使用S7-1200 V4.2及其以上的版本。

關系表達式的數據類型

表2列出了在關系表達式中可使用的數據類型/數據類型組:

運算運算符優先級第一個操作數第二個操作數結果
小于、小于等于、大于、大于等于<、<=、>、>=6整數/浮點數整數/浮點數Bool
位序列位序列Bool
字符串字符串Bool
TimeTimeBool
日期和時間日期和時間Bool
等于、不等于=、<>7整數/浮點數整數/浮點數Bool
位序列位序列Bool
字符串字符串Bool
TimeTimeBool
日期和時間日期和時間Bool
Variant任意數據類型Bool
UDTUDTBool
ArrayArrayBool
StructStructBool

示例

以下舉例說明了一個關系表達式:

IF a > b THEN c:= a;
IF A > 20 AND B < 20 THEN C:= TRUE;
IF A<>(B AND C) THEN C:= FALSE;

邏輯表達式

說明:邏輯表達式由兩個操作數和邏輯運算符(AND、OR 或 XOR)或取反操作數 (NOT) 組成。

邏輯運算符可以處理當前 CPU 所支持的各種數據類型。如果兩個操作數都是 Bool 數據類型,則邏輯表達式的結果也為 Bool數據類型。如果兩個操作數中至少有一個是位序列,則結果也為位序列而且結果是由最高操作數的類型決定。例如,當邏輯表達式的兩個操作數分別是 Byte 類型和 Word 類型時,結果為 Word類型。

邏輯表達式中一個操作數為 Bool類型而另一個為位序列時,必須先將 Bool類型的操作數顯式轉換為位序列類型。

邏輯表達式的數據類型

下表列出了邏輯表達式中可使用的數據類型:

運算運算符優先級第一個操作數第二個操作數結果
取反NOT3Bool-Bool
求反碼位序列-位序列
AND、&8BoolBoolBool
位序列位序列位序列
異或XOR9BoolBoolBool
位序列位序列位序列
OR10BoolBoolBool
位序列位序列位序列

示例

以下為一個邏輯表達式的示例:

IF "MyTag1" AND NOT "MyTag2" THEN c := a;
MyTag := A OR B;

賦值運算

定義:通過賦值運算,可以將一個表達式的值分配給一個變量。賦值表達式的左側為變量,右側為表達式的值。

函數名稱也可以作為表達式。賦值運算將調用該函數,并返回其函數值,賦給左側的變量。

賦值運算的數據類型取決于左邊變量的數據類型。右邊表達式的數據類型必須與該數據類型一致。

賦值運算的計算按照從右到左的順序進行。

可通過以下方式編程賦值運算:

  • 單賦值運算:執行單賦值運算時,僅將一個表達式或變量分配給單個變量:

示例:a := b;

  • 多賦值運算:執行多賦值運算時,一個指令中可執行多個賦值運算。

示例:a := b := c;

此時,將執行以下操作:

b := c;

a := b;

  • 組合賦值運算:執行組合賦值運算時,可在賦值運算中組合使用操作符"+"、"-"、"*"和"/":

示例:a += b;

此時,將執行以下操作:

a := a + b;

也可多次組合賦值運算:

a += b += c *= d;

此時,將按以下順序執行賦值運算:

c := c * d;

b := b + c;

a := a + b;

示例

下表舉例說明了單賦值運算的操作:

"MyTag1" := "MyTag2";(* 變量賦值 *)
"MyTag1" := "MyTag2" * "MyTag3";(* 表達式賦值 *)
"MyTag" := "MyFC"();(* 調用一個函數,并將函數值賦給 "MyTag" 變量 *)
#MyStruct.MyStructElement := "MyTag";(* 將一個變量賦值給一個結構元素 *)
#MyArray[2] := "MyTag";(* 將一個變量賦值給一個 ARRAY 元素 *)
"MyTag" := #MyArray[1,4];(* 將一個 ARRAY 元素賦值給一個變量 *)
#MyString[2] := #MyOtherString[5];(* 將一個 STRING 元素賦給另一個 STRING 元素 *)

下表舉例說明了多賦值運算的操作:

"MyTag1" := "MyTag2" := "MyTag3";(* 變量賦值 *)
"MyTag1" := "MyTag2" := "MyTag3" * "MyTag4";(* 表達式賦值 *)
"MyTag1" := "MyTag2" := "MyTag3 := "MyFC"();(* 調用一個函數,并將函數值賦值給變量 "MyTag1"、"MyTag1" 和 "MyTag1" *)
#MyStruct.MyStructElement1 := #MyStruct.MyStructElement2 := "MyTag";(* 將一個變量賦值給兩個結構元素 *)
#MyArray[2] := #MyArray[32] := "MyTag";(* 將一個變量賦值給兩個數組元素 *)
"MyTag1" := "MyTag2" := #MyArray[1,4];(* 將一個數組元素賦值給兩個變量 *)
#MyString[2] := #MyString[3]:= #MyOtherString[5];(* 將一個 STRING 元素賦值給兩個 STRING 元素 *)

下表舉例說明了組合賦值運算的操作:

"MyTag1" += "MyTag2";(* "MyTag1" 和 "MyTag2" 相加,并將相加的結果賦值給 "MyTag1"。*)
"MyTag1" -= "MyTag2" += "MyTag3";(* "MyTag2" 和 "MyTag3" 相加。將相加的結果賦值給操作數"MyTag2",再從 "MyTag1" 中減去"MyTag2",計算結果將賦值給 "MyTag1"。*)
#MyArray[2] += #MyArray[32] += "MyTag";(* 數組元素 "MyArray[32]" 加上 "MyTag"。計算結果將賦值給 "MyArray[32]"。之后這個數組元素 "MyArray[32]" 與數組中另一個元素"MyArray[2]"相加,然后將結果分配給數組元素 "MyArray[2]"。在該運算中,相應的數據類型必需兼容。*)
#MyStruct.MyStructElement1 /= #MyStruct.MyStructElement2 *= "MyTag";(* 結構化元素 "MyStructElement2" 乘以 "MyTag"。計算結果將賦值給 "MyStructElement2"。之后,將結構化元素 "MyStructElement1" 除以 "MyStructElement2",并將計算結果賦值給 "MyStructElement1"。在該運算中,相應的數據類型必需兼容。*)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82613.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

海思3519V200ARM Linux 下移植 Qt5.8.0

一、移植背景及意義 海思3519V200是一款基于ARM架構的嵌入式芯片,廣泛應用于智能安防、工業控制等領域。在這些應用場景中,對設備的圖形用戶界面(GUI)有著越來越高的要求。Qt5.8.0作為一個功能強大、跨平臺的GUI開發框架,能夠幫助開發者快速開發出美觀、高效的用戶界面。…

msql的樂觀鎖和冪等性問題解決方案

目錄 1、介紹 2、樂觀鎖 2.1、核心思想 2.2、實現方式 1. 使用 version 字段&#xff08;推薦&#xff09; 2. 使用 timestamp 字段 2.3、如何處理沖突 2.4、樂觀鎖局限性 3、冪等性 3.1、什么是冪等性 3.2、樂觀鎖與冪等性的關系 1. 樂觀鎖如何輔助冪等性&#xf…

成都鼎訊--通信信號模擬設備?

在現代電磁通信領域&#xff0c;精準模擬復雜多變的信號環境&#xff0c;是提升通信裝備性能與人員作戰能力的核心命題。成都鼎訊以技術創新為驅動&#xff0c;憑借深厚的研發實力&#xff0c;重磅推出通信信號模擬設備&#xff0c;以前所未有的強大功能與卓越性能&#xff0c;…

C# Windows Forms應用程序-003

目錄 項目結構 命名空間和類定義 主要控件 GroupBox 控件 Label 控件 TextBox 控件 Button 控件 OpenFileDialog 控件 方法說明 構造函數 Form1() Dispose(bool disposing) Main() InitializeComponent() button1_Click(object sender, System.EventArgs e) but…

【C/C++】死鎖的四大條件與預防策略詳解

文章目錄 死鎖的四大條件與預防策略詳解一、死鎖的產生條件&#xff08;四個必要條件&#xff09;二、代碼示例三、死鎖的預防手段&#xff08;以 C/C 為例&#xff09;1. 破壞“循環等待” —— 統一加鎖順序&#xff08;推薦&#xff09;2. 使用 std::lock 一次性加多個鎖3. …

Rust編程環境安裝

文章目錄 Rust編程環境安裝一、安裝準備二、安裝步驟對于Linux/macOS用戶對于Windows用戶 三、驗證安裝四、環境配置檢查五、工具鏈管理六、附加功能七、常見問題處理八、編輯器支持九、其他 Rust編程環境安裝 一、安裝準備 1. 支持系統&#xff1a;Windows/Linux/macOS 2. 所…

OpenHarmony平臺驅動使用(五),HDMI

OpenHarmony平臺驅動使用&#xff08;五&#xff09; HDMI 概述 功能簡介 HDMI&#xff08;High Definition Multimedia Interface&#xff09;&#xff0c;即高清多媒體接口&#xff0c;主要用于DVD、機頂盒等音視頻Source到TV、顯示器等Sink設備的傳輸。 HDMI以主從方式工…

【Git】Commit Hash vs Change-Id

文章目錄 1、Commit 號2、Change-Id 號3、區別與聯系4、實際場景示例5、為什么需要兩者&#xff1f;6、總結附錄——Gerrit 在 Git 和代碼審查工具&#xff08;如 Gerrit&#xff09;中&#xff0c;Commit 號&#xff08;Commit Hash&#xff09; 和 Change-Id 號 是兩個不同的…

leetcode hot100刷題日記——21.不同路徑

和20題一樣的思路link 題解&#xff1a; class Solution { public:int dfs(int i,int j,vector<vector<int>>&memo){//超過了邊界&#xff0c;return 0if(i<0||j<0){return 0;}//從&#xff08;0&#xff0c;0&#xff09;到&#xff08;0&#xff0c;0…

day2 MySQL表數據操作

一&#xff1a;數據操作 注&#xff1a;在編寫MySQL代碼時可以不用區分大小寫 1.查看表結構 desc 表名; -- 查看表中的字段類型&#xff0c;長度&#xff0c;約束。 2.字段的增加 AFTER table 表名 add 字段名 數據類型; -- 默認末尾添加 after table 表名 add 字段名 …

GitAny - 無需登入的 GitHub 最新倉庫檢索工具

地址&#xff1a;https://github.com/MartinxMax/gitany GitAny - 無需登入的 GitHub 專案搜尋工具 GitAny 是一款基於 Python 的工具&#xff0c;允許你在無需登入的情況下搜尋當天最新的 GitHub 專案。它支援模糊搜尋、條件篩選以及倉庫資料的視覺化分析。 安裝依賴 $ pip…

格恩朗金屬管浮子流量計 高精度測量的不二之選?

在流量測量的復雜領域&#xff0c;精度就是生命線&#xff0c;直接關乎生產的穩定性、產品的質量以及資源的合理利用。大連格恩朗品牌的金屬管浮子流量計&#xff0c;憑借其卓越的精度表現&#xff0c;成為各行業在流量測量時的最佳之選。? 格恩朗金屬管浮子流量計運用經典的可…

【R語言編程繪圖-箱線圖】

基本箱線圖繪制 使用ggplot2繪制箱線圖的核心函數是geom_boxplot()。以下是一個基礎示例&#xff0c;展示如何用iris數據集繪制不同物種&#xff08;Species&#xff09;的萼片長度&#xff08;Sepal.Length&#xff09;分布&#xff1a; library(ggplot2) ggplot(iris, aes(…

深度學習能取代機器學習嗎?

在人工智能領域&#xff0c;“機器學習”和“深度學習”這兩個詞經常被混為一談。很多新手甚至以為只要跟 AI 有關的任務&#xff0c;都該用深度學習。但其實&#xff0c;它們并不是誰強誰弱的關系&#xff0c;而是適合不同場景的工具。 這篇文章就來幫你理清楚&#xff1a; 機…

UPS的工作原理和UPS系統中旁路的作用

UPS&#xff08;不間斷電源&#xff09;根據工作原理和適用場景的不同&#xff0c;主要分為以下三種類型&#xff0c;每種類型的特點和適用場景如下&#xff1a; 1. 后備式UPS&#xff08;Offline/Standby UPS&#xff09; 工作原理&#xff1a; 正常供電時&#xff0c;負載直接…

一級菜單401問題

正常代碼生成的前后臺文件&#xff0c;菜單類型是一級標題&#xff0c; 菜單路徑和前端組件的地址都正常寫的:/projects/xxx/xxx/xxx/XxxList 其他生成的新列表都能點進去&#xff0c;只有這個點進去就是顯示空白的像首頁那個頁面一樣&#xff0c; 問題就出現在我第一次建這…

ROS2 robot控制學習(一)

controller_position.yaml使用說明 ROS 2 的 controller_manager 用途典型工作流程示例關鍵服務與話題擴展功能JointTrajectoryController 參數詳解基本參數軌跡參數插值參數前饋控制代碼示例動態參數調試參數ForwardCommandController 概述參數解釋`joints``interface``allow_…

LightGBM的python實現及參數優化

文章目錄 1. LightGBM模型參數介紹2. 核心優勢3. python實現LightGBM3.1 基礎實現3.1.1 Scikit-learn接口示例3.1.2 Python API示例 3.2 模型調優3.2.1 GridSearchCV簡介3.2.2 LightGBM超參調優3.2.3 GridSearchCV尋優結果 在之前的文章 Boosting算法【AdaBoost、GBDT 、XGBoo…

Map集合(雙列集合)

Map結合也稱為“鍵值對集合”&#xff0c;格式&#xff1a;{key1value1&#xff0c;key2value2....} Map集合的特點&#xff1a; 鍵唯一&#xff1a;在Map集合中&#xff0c;鍵&#xff08;key&#xff09;是唯一的&#xff0c;不能有重復的鍵。如果嘗試插入一個已經存在的鍵…

springBoot項目測試時瀏覽器返回406問題解決方案

1. 如果基于最新版本的SpringBoot官方骨架創建的SpringBoot項目&#xff0c;在勾選了lombok的依賴之后&#xff0c;會在pom.xml中引入如下兩個插件&#xff1a; 2. 由于第一個插件 maven-compiler-plugin 的引入導致了這個問題&#xff0c;解決這個問題的方案呢&#xff0c;就是…