<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      PLC結(jié)構(gòu)化文本(ST)——接口(Interface)

      PLC Structured Text Object Oriented Programming

      PLC結(jié)構(gòu)化文本(ST)——接口(Interface)

      接口定義

      接口定義了所有類繼承接口時應遵循的語法合同。接口定義了語法合同 "是什么" 部分,派生類定義了語法合同 "怎么做" 部分。
      接口定義了屬性、方法和事件,這些都是接口的成員。接口只包含了成員的聲明。成員的定義是派生類的責任。接口提供了派生類應遵循的標準結(jié)構(gòu)。---C# 接口(Interface)|菜鳥教程

      接口特點

      • 接口使得實現(xiàn)接口的類或結(jié)構(gòu)在形式上保持一致。---C# 接口(Interface)|菜鳥教程
      • 接口本身并不實現(xiàn)任何功能,它只是和聲明實現(xiàn)該接口的對象訂立一個必須實現(xiàn)哪些行為的契約。---C# 接口(Interface)|菜鳥教程
      • 接口可以繼承接口,一個接口可以繼承多個不同的接口。
      • 接口成員默認是Public,也必須是Public。
      • 接口變量可以接收實現(xiàn)該接口類型的類的對象。

      接口與抽象類區(qū)別

      • 抽象類在某種程度上與接口類似,但是,它們大多只是用在當只有少數(shù)方法由基類聲明由派生類實現(xiàn)時。---C# 接口(Interface)|菜鳥教程
      • 抽象類不能直接實例化,但允許派生出具體的,具有實際功能的類。---C# 接口(Interface)|菜鳥教程
      • 抽象類的成員不一定都是抽象的,但如果有一個類的成員是抽象的,那么這個類一定是抽象類。

      Tips : 以上關(guān)于接口抽象定義、特點和區(qū)別,在IEC61131-3 PLC編程標準中同樣適用。

      接口的實現(xiàn)

      // 定義一個接口
      INTERFACE I_StringBuilder EXTENDS __SYSTEM.IQueryInterface
      
      // 接口的方法 Append
      METHOD Append : I_StringBuilder
      VAR_INPUT
      	sText : STRING;
      END_VAR
      
      // 接口的方法 Clear
      METHOD Clear : I_StringBuilder
      VAR_INPUT
      END_VAR
      
      // 接口的方法 ToString
      METHOD ToString : STRING
      VAR_INPUT
      END_VAR
      
      // 功能塊 FB_StringBuilder 實現(xiàn) 接口 I_StringBuilder
      FUNCTION_BLOCK FB_StringBuilder IMPLEMENTS I_StringBuilder
      VAR
      	sContent : STRING; // Store temporary strings;
      END_VAR
      
      // 添加接口方法的實現(xiàn) Append
      METHOD Append : I_StringBuilder
      VAR_INPUT
      	sText : STRING;
      END_VAR
      --------
      sContent := CONCAT(STR1 := sContent, STR2 := sText);
      Append := THIS^;
      
      // 添加接口方法的實現(xiàn) Clear
      METHOD Clear : I_StringBuilder
      VAR_INPUT
      END_VAR
      --------
      sContent := '';
      Clear := THIS^;
      
      // 添加接口方法的實現(xiàn) ToString
      METHOD ToString : STRING
      VAR_INPUT
      END_VAR
      --------
      ToString := sContent; // return internal content
      

      定義一個接口I_StringBuilder包含三個方法:Append(作用:在字符串后面添加新字符)、Clear(作用:清空當前字符串)、ToString(作用:輸出字符串)。
      定義一個功能塊FB_StringBuilder實現(xiàn)接口I_StringBuilder并給方法添加具體實現(xiàn)細節(jié)。

      Tips : 示例接口 I_StringBuilder繼承了 __SYSTEM.IQueryInterface,其中 __SYSTEM.IQueryInterface 為系統(tǒng)內(nèi)置接口,無其它成員,主要作用是為了可以做接口與接口的轉(zhuǎn)換或者接口與指針的轉(zhuǎn)換,所以在PLC ST OOP中一般以它作為接口的基類(最小粒度)以此派生。關(guān)于 __SYSTEM.IQueryInterface 接口詳細用法可查閱官方資料。
      1.Codesys運算符__QUERYPOINTER
      2.倍福在線幫助系統(tǒng)

      使用接口實現(xiàn)Fluent

      Main(PRG)程序中聲明FB_StringBuilderI_StringBuilder兩個對象,然后聲明sResult1sResult2用來接收結(jié)果。

      PROGRAM MAIN
      VAR
      	// 字符拼接,輸出'Hello world'
      	fbStringBuilder : FB_StringBuilder;
      	iStringBuilder	: I_StringBuilder := fbStringBuilder;
      	sResult1 : STRING;
      	sResult2 : STRING;
      	bTest : BOOL;
      END_VAR
      

      接口對象iStringBuilder在初始化時傳入的是fbStringBuilder對象。

      • 1.使用對象實現(xiàn)Fluent
      IF bTest THEN
      	// Function Block Instance
      	sResult1 := fbStringBuilder.Clear()
      							.Append('H')
      							.Append('e')
      							.Append('l')
      							.Append('l')
      							.Append('o')
      							.Append(' ')
      							.Append('W')
      							.Append('o')
      							.Append('r')
      							.Append('l')
      							.Append('d')
      							.ToString();
      	bTest := FALSE;
      END_IF
      
      • 2.使用接口實現(xiàn)Fluent
      IF bTest THEN
      	// Interface 
      	sResult2 := iStringBuilder.Clear()
      							.Append('H')
      							.Append('e')
      							.Append('l')
      							.Append('l')
      							.Append('o')
      							.Append(' ')
      							.Append('W')
      							.Append('o')
      							.Append('r')
      							.Append('l')
      							.Append('d')
      							.ToString();
      	bTest := FALSE;
      END_IF
      

      方法Clear()Append()返回值是I_StringBuilder接口,因此可以使用“.”訪問接口內(nèi)部定義的成員。
      這種編程方式實現(xiàn)的方法不只這一種,還有其它方式也能實現(xiàn)這種效果,后續(xù)文章會有詳細介紹。

      Tips : 作者喜歡稱這種編程方式為流式編程鏈式編程,老外習慣的叫法為" Fluent "或者" Work Flow ",具體怎么形容看個人喜好吧。

      總結(jié)

      接口(Interface)是引用類型,與IEC61131-3定義的另一種類型(REFERENCE)相似,目前筆者想到的" 引用類型 "在IEC61131-3中只有兩個" 接口(INTERFACE "和" 引用(REFERENCE ",若還有其它的引用類型,歡迎大神留言討論。

      posted @ 2024-09-04 15:47  J_Sheng  閱讀(956)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 九九综合九色综合网站| 欧美牲交a欧美牲交aⅴ免费真| 亚洲日本中文字幕天天更新| 深夜精品免费在线观看| 国产精品中文字幕综合| 国产亚洲av日韩精品熟女| 秋霞鲁丝片成人无码| 高中女无套中出17p| 国产成人精品久久一区二区| 丰满岳妇乱一区二区三区 | 老熟妇国产一区二区三区| 午夜福利啪啪片| 日本一区二区三区四区黄色| 亚洲日韩一区二区| 亚洲国产成人精品无色码| 久久久亚洲欧洲日产国码农村| 999精品全免费观看视频| 无码日韩做暖暖大全免费不卡| 国产精品无遮挡猛进猛出| 国产精品天天看天天狠| 亚洲国内精品一区二区| av色国产色拍| 侯马市| 亚洲精品久久一区二区三区四区| 资源在线观看视频一区二区| 亚洲永久精品日韩成人av| 欧美乱妇狂野欧美在线视频| 亚洲高清国产成人精品久久| 国产资源精品中文字幕| 婷婷五月综合激情| 亚洲AV天天做在线观看| 日韩视频中文字幕精品偷拍| 国产高清在线精品一区不卡| 九九热精品在线免费视频| CAOPORN免费视频国产| 日韩乱码人妻无码系列中文字幕 | 国内精品免费久久久久电影院97 | 久久一本人碰碰人碰| 欧洲美熟女乱又伦免费视频| 国产成人精品一区二区| 精品人妻中文字幕有码在线|