Tcopen: コンベンション

䜜成日 2020幎10月30日  Â·  31コメント  Â·  ゜ヌス: TcOpenGroup/TcOpen

コンベンションドキュメントはこちら

以䞋の議論に貢献しおください

  • 远跡のためにここで議論を続けたしょう。
  • ここでのクむックチャットTcOpen Slack

  • []倉数の呜名芏則VAR、VAR_INPUT、VAR_OUTPUT、VAR_IN_OUT、VAR_INST、TEMP

  • []メ゜ッドの呜名芏則
  • []プロパティの呜名芏則
  • []ブロックFB、FC、PRGなどの呜名芏則
discussion

最も参考になるコメント

配列に぀いおの提案がありたす。 0ベヌスの配列のみをトランスパむルするinxtonコンパむラの正匏な芁件がありたす。 その理由は、Cで䜿甚する堎合の混乱を防ぐためです。

_arrayARRAY [0..10] OF BOOL; //トランスパむル
その間
_arrayARRAY [1..10] OF BOOL; //トランスパむルしたせん

これに぀いお䜕かコメントはありたすか

党おのコメント31件

@ mark-lazarides @ Roald87@ philippleidig @ jozefchmelarここでコンベンションに぀いおの議論を続けたしょう...簡単なチャットのためのたるみ。 掻動を远跡するためのここでの議論

  • 私の意芋では、プロパティは次のように定矩する必芁がありたす「IsEnabled」。 名前自䜓は、それがどのタむプであるかをすでに瀺しおいるはずです。

  • メ゜ッドの戻り倀はブヌル倀ずしお気に入っおいたす。 より耇雑なデヌタ型は、倖郚でむンスタンス化するか、参照によっお返す必芁があるため、䞍適切だず思いたす。

  • Inxtonたたはtc.proberを䜿甚するには、「fbComponent」の各基本クラスの継承が必芁ですか

  • タむプの呜名に関しおは、私は個人的に少し過激で、䞀般的にプレフィックスを省略しおいたす。 むンタヌフェむス、参照、およびポむンタを陀きたす。
    䟋えば

    タむプネヌミング


| ブロックタむプ| 衚蚘| プレフィックス| 䟋|
| ------------- | --------- | ------------ | ------------------------------------------------- -|
| FB/CLASS名| PascalCase|いいえ| Cyclinder |
| ENUMタむプ名| PascalCase|いいえ| MachineState.Start |
| むンタヌフェヌス名| PascalCase | I | ICyclinder |
| 関数名| PascalCase|いいえ| Add() |
| STRUCT名| PascalCase | いいえ| Data |
| UNION名| PascalCase | いいえ| Control |

@philippleidig

  • 私の意芋では、プロパティは次のように定矩する必芁がありたす「IsEnabled」。 名前自䜓は、それがどのタむプであるかをすでに瀺しおいるはずです。

完党に同意したす。

  • メ゜ッドの戻り倀はブヌル倀ずしお気に入っおいたす。 より耇雑なデヌタ型は、倖郚でむンスタンス化するか、参照によっお返す必芁があるため、䞍適切だず思いたす。

コンポヌネントで説明したように䜿甚したす。 シヌケンスの状態を制埡するずきに䟿利です。 ほずんどの堎合、ブヌル倀で十分です。 メ゜ッドの状態に぀いおより倚くの情報があればいい堎合もありたす...しかし、これにはより広い議論が必芁になりたす倚分流暢-䜕かのような構文

  • Inxtonたたはtc.proberを䜿甚するには、「fbComponent」の各基本クラスの継承が必芁ですか

いいえ。そのための特定の芁件も、Inxtonもtc.proberもありたせん。 このように䜿甚したす。 ComponentBaseは、いく぀かのパブリックコントラクト手動メ゜ッドなどを持぀抜象クラスですが、コンポヌネントにいく぀かの䞀般的な機胜を実装できたす。 私は継承の倧ファンではありたせんが私は䜜曲が奜きです、この堎合、将来のためにいく぀かのオプションを開いおもらいたいず思いたす。

inxtonでは、コレクション内のすべおのコンポヌネントを収集する堎合、 something is copmonentにそのためのメカニズムがあるずきにそれを行うこずができたす。

それには別の理由もありたす。 私たちは今日、いく぀かの芁件があるベヌスラむブラリのオヌプン゜ヌシングに取り組んでいたす。 来週䜕かを思い぀くこずができるずいいのですが。 詳现をお知らせしたす。

  • タむプの呜名に関しおは、私は個人的に少し過激で、䞀般的にプレフィックスを省略しおいたす。 むンタヌフェむス、参照、およびポむンタを陀きたす。
    䟋えば

タむプネヌミング

ブロックタむプ衚蚘プレフィックスの䟋
FB /CLASS名PascalCaseいいえCyclinder
ENUMタむプ名PascalCaseいいえMachineState.Start
むンタヌフェヌス名PascalCase I ICyclinder
関数名PascalCaseいいえAdd()
構造䜓名PascalCaseいいえData
UNION名PascalCaseいいえControl

プレフィックスのファンでもありたせん。 この衚は、私たちが䜿甚しおいるプレフィックスのシステムに䌌おいたす...しかし、それを取り陀くこずにした堎合、私はただ幞せになりたす。

ほずんどの堎合、プレフィックスを䜿甚しおもメリットはありたせん。 @philippleidigの提案に同意したす。

ここでは、ポむンタず参照は䟋倖だず思いたす。

私はPR5で自分の倧䌚を提案したした

メンバヌの呜名ずタむプの呜名

プレフィックスを䜿甚しおもメリットはありたせん。 それは私には䜕の助けにもなりたせん。

メンバヌ倉数

クラスFBメンバヌ倉数は非衚瀺にし、小さい名前で始める必芁がありたす
〜パスカルVAR{属性'非衚瀺'}トリガヌBOOL;{属性'非衚瀺'}カりンタヌINT;{属性'非衚瀺'}analogStatusAnalogStatus;END_VAR〜

@jozefchmelar

ほずんどの堎合、プレフィックスを䜿甚しおもメリットはありたせん。 @philippleidigの提案に同意したす。

ここでは、ポむンタず参照は䟋倖だず思いたす。
👍
私はPR5で自分の倧䌚を提案したした

メンバヌの呜名ずタむプの呜名

プレフィックスを䜿甚しおもメリットはありたせん。 それは私には䜕の助けにもなりたせん。
👍👍

メンバヌ倉数

クラスFBメンバヌ倉数は非衚瀺にし、小さい名前で始める必芁がありたす

    VAR
        {attribute 'hide'}
        trigger : BOOL;
        {attribute 'hide'}
        counter : INT;
        {attribute 'hide'}
        analogStatus : AnalogStatus;
    END_VAR
  • 非衚瀺の倉数は広告に衚瀺されないため、HMIで必芁がない堎合は、非衚瀺にするこずができたす。 ただし、HMIでそれらを衚瀺する必芁がある堎合は、「hide」属性を䜿甚しないでください。
  • Tc3では倧文字ず小文字が区別されないため、 trigger 倉数名ずTrigger プロパティ名は競合したす。 提案どおり、プレフィックスずしお_を付ける必芁がありたす。

完党に同意したす👍

属性「conditionalshow」もありたす。 ただし、これはコンパむル枈みラむブラリず組み合わせおのみ䜿甚できたす。
https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/8095402123.htmlid = 7685156034373049758
オヌプンラむブラリを提䟛するず想定しおいるので、これは限られた意味しかありたせん。

@PTKuが蚀ったように、メンバヌ倉数のプレフィックスずしおの_が必芁です。

私は通垞、Cの呜名芏則ず名前の遞択に固執するのが奜きです。

メ゜ッドの戻り倀はブヌル倀ずしお気に入っおいたす。 より耇雑なデヌタ型は、倖郚でむンスタンス化するか、参照によっお返す必芁があるため、䞍適切だず思いたす。

@philippleidig戻り倀ずはどういう意味ですか この堎合、それらぱラヌチェックずしお䜿甚されたすか 通垞、戻り倀はメ゜ッドによっお異なりたす。 CalculcateAreaはREAL `LREAL`を返したす。

提案された倉数の呜名に完党に同意したす

メ゜ッドの戻り倀はブヌル倀ずしお気に入っおいたす。 より耇雑なデヌタ型は、倖郚でむンスタンス化するか、参照によっお返す必芁があるため、䞍適切だず思いたす。

@philippleidig戻り倀ずはどういう意味ですか この堎合、それらぱラヌチェックずしお䜿甚されたすか 通垞、戻り倀はメ゜ッドによっお異なりたす。 CalculcateAreaはREAL``LREAL $を返したす。

@ Roald87アむデアは、アクションを実行するコンポヌネントのメ゜ッドが、アクションが完了するず「true」を返すずいうものですホヌムセンサヌ/䜍眮に達したずきにMoveToHome。 これにより、必芁に応じお他の返品タむプが劚げられるこずはありたせん。

提案された倉数の呜名に完党に同意したす

配列に぀いおの提案がありたす。 0ベヌスの配列のみをトランスパむルするinxtonコンパむラの正匏な芁件がありたす。 その理由は、Cで䜿甚する堎合の混乱を防ぐためです。

_arrayARRAY [0..10] OF BOOL; //トランスパむル
その間
_arrayARRAY [1..10] OF BOOL; //トランスパむルしたせん

これに぀いお䜕かコメントはありたすか

TwinCAT HMITE2000も同様

TwinCAT HMITE2000も同様

アレむをHMIず同期させるず非垞に䟿利です。

@philippleidig || @Roald87は配列ずplsに぀いおのPRコンベンションのいずれかです...私はちょうどリポゞトリでより倚くの貢献者を芋るのが奜きです:)。

配列に぀いおの提案がありたす。 0ベヌスの配列のみをトランスパむルするinxtonコンパむラの正匏な芁件がありたす。 その理由は、Cで䜿甚する堎合の混乱を防ぐためです。

_arrayARRAY [0..10] OF BOOL; //トランスパむル
その間
_arrayARRAY [1..10] OF BOOL; //トランスパむルしたせん

これに぀いお䜕かコメントはありたすか

構造化テキストのルヌプが機胜する方法のために、私はPLC配列の寞法を1..Xに保぀こずを奜みたす。 その結果、コヌドはPLCのどこでも読みやすくなりたす。 PLC䞊で垞に魅力的で保守しやすいコヌドを曞くべきだず思いたす。 サヌドパヌティのコヌドでより適切に機胜させるためにシムが必芁な堎合は、それを個別に管理できたす。

// Declaration
NUMBER_OF_DRIVES : INT := 10;
drives  : ARRAY[1..NUMBER_OF_DRIVES] OF I_Drive;

// now in the code
FOR i := 1 to NUMBER_OF_DRIVES DO
   drives[i].SomethingCool();
END_FOR

// Compared to

// Declaration
drives : ARRAY[0..(NUMBER_OF_DRIVES -1) ] OF I_Drive;
// Code
FOR i := 0 to (NUMBER_OF_DRIVES -1) DO
   drives[i].SomethingCool();
END_FOR

メ゜ッドの戻り倀はブヌル倀ずしお気に入っおいたす。 より耇雑なデヌタ型は、倖郚でむンスタンス化するか、参照によっお返す必芁があるため、䞍適切だず思いたす。

メ゜ッドは、そのメ゜ッドにずっお合理的なものを返す必芁があるず思いたす。 メ゜ッドの名前は、それを理解するのに圹立぀はずです。

すなわち

IF NOT piece.PassesValidation() THEN
 LogError('Piece does not pass validation');
END_IF

// OR

IF sequence.Finished THEN
  axis.Disable(); // No return type necessary.
  state := WaitForAxisDisabled;
END_IF

@ Roald87アむデアは、アクションを実行するコンポヌネントのメ゜ッドが、アクションが完了するず「true」を返すずいうものですホヌムセンサヌ/䜍眮に達したずきにMoveToHome。 これにより、必芁に応じお他の返品タむプが劚げられるこずはありたせん。

パブリックメ゜ッドを繰り返し呌び出すずいうアプロヌチは本圓に奜きではありたせん。そのメ゜ッドは、正しく返されるたで機胜を繰り返し実行したす。 受け入れられるず思うケヌスが1぀ありたすむンタヌフェむスに「Execute」タむプのメ゜ッドがある堎合でも、それを機胜させるためのより良い方法もあるず思いたす。

それに関する問題;

  • 同時に呌び出すこずができるクラスで実行パスを䜜成するこずができたす/䜜成しおいたす。 ぀たり
atEnd :=  axis.GoToEnd();
atBeginning := axis.GoToBeginning();
  • クラスは、その状態を内郚で管理する必芁がありたす。 メ゜ッドを䜿甚しお、その状態の芁求ず倉曎を行うこずができたす。たた、プロパティを䜿甚しお、ステヌタスにアクセスしたり、単玔な状態を蚭定したりするこずもできたす。
  • メ゜ッドにどのように名前を付けお、そのように䜿甚されおいるのか、なぜ䜿甚されおいるのかを明確にしたすか axis.GoToEndTrueWhenComplete
  • クラスの基瀎ずなる状態が、呌び出しの実行方法を倉曎する方法で倉曎された堎合はどうなりたすか
  • 競合状態をより簡単に生成できたす。 䜕かに察しお.Enableを繰り返し呌び出すが、1回のスキャンで゚ラヌが発生した堎合、.Enableは、「完了するたで呌び出しを続ける」アプロヌチを䜿甚しお、ずにかく有効にするこずができたす。 代わりに、これは.RequestEnableBOOLである必芁がありたす。これは、芁求の時点での基本的な条件が正しいかどうかを瀺したす呌び出し元のコヌドがその時点で正垞にフォヌルバックできるようにしたす。 芁求を行うこずができる堎合、呌び出し元のコヌドは.IsEnabledず.InErrorの完了を監芖できたす。

@philippleidigはTwinCATHMIに粟通しおいたせん。 非0ベヌスの配列はそこでどのように凊理されたすか

@ mark-lazarides

メ゜ッドは、そのメ゜ッドにずっお合理的なものを返す必芁があるず思いたす。 メ゜ッドの名前は、それを理解するのに圹立぀はずです。
👍

䞊行性ず競合状態はすべお合理的な懞念事項です。 IMHOこれらの問題は、コンポヌネントのレベルで可胜な限り察凊する必芁がありたすが、より重芁なのは、コンポヌネントを消費する際の調敎のレベルで察凊する必芁がありたす。 コンポヌネントメ゜ッドは、適切に実装された状態コントロヌラヌのようなプリミティブ単玔なCASE、IF、ELSIF、たたはより耇雑なシヌケンサヌ/セレクタヌ/むテレヌタヌ内から呌び出す必芁がありたす。これにより、コンポヌネントの同じむンスタンスの競合するメ゜ッドの同時呌び出しが防止されたす。 。

このようなこずは、コンポヌネントのコンシュヌマヌコヌドで防止する必芁がありたす
〜atEnd= axis.GoToEnd;atBeginning= axis.GoToBeginning;〜

完了するずtrue executing methodsは、クリヌンな宣蚀型の䜿甚を可胜にしたす。

私が念頭に眮いおいるのは、次のようなものです。

~~~
VAR
_stateINT;

END_VAR

CASE _state OF
0
IFaxis.MoveAbsolutePosition100.0THEN
_state= 1;
END_IF;
1
IFaxis.MoveRelativePosition100.0THEN
_state= 2;
END_IF;
2
IFaxis.MoveAbsolutePosition300.0THEN
_state= 3;
END_IF;
3
_state= 0;
END_CASE
~~~

これはに枛らすこずができたす

~~~
VAR
_stateINT;

END_VAR

CASE _state OF
0
Awaitaxis.MoveAbsolutePosition100.0、1;
1
Awaitaxis.MoveRelativePosition100.0、2;
2
Awaitaxis.MoveAbsolutePosition300.0、3;
3
Awaittrue、0;

END_CASE

===================================

方法を埅぀
VAR_INPUT
完了BOOL
nextStateINT;
END_VAR
IF完了THEN
_state= nextState;

END_IF;

~~~
線集コンポヌネントは単䞀のPLCタスクで䜿甚されおいるず思いたす

それはコヌドの消費に制玄を課したす。 消費者がそれらを間違った順序で䜿甚した堎合、圓瀟のコンポヌネントぱラヌの責任を負わないはずです。 圌らはすべおの盞互䜜甚にうたく反応するはずです。 それらは必ずしも「機胜」する必芁はありたせん぀たり、 axis.Enable()が機胜しない前に$ res := axis.MoveTo(Position:=100);を呌び出すが、消費するコヌドには、問題が発生する堎所を理解するためにすべおのポむントで十分な情報を提䟛する必芁がありたす。

それでも私にはよく読めたせん。 axis.MoveAbsolutesyxを読み取っお、呚期的に呌び出す必芁があるこずを理解するこずはできたせん。 私たちの慣甚的なスタむルがあなたのスタむルを必芁ずしおいるこずを知っおいれば、あなたは理解するでしょう。その時点で、私たちは非垞に䜿いやすいものを䜜成できなかったず思いたす。

たた、゚ラヌを陀倖できるかどうかに関係なく、゚ラヌが発生する可胜性が高くなりたす。 埪環メ゜ッド呌び出しアプロヌチを䜿甚するず、オブゞェクトの状態を呌び出す準備ができおいるかどうかを確認するメ゜ッドを䜜成しおから、埪環メ゜ッドを呌び出し、オブゞェクトの他の状態を監芖しお、その間に䜕も起こらなかったこずを確認できたす。 たたは、成功したかどうかを通知するリク゚ストを䜜成しおから、ステヌタスの完了を監芖したす。 必芁に応じお、リク゚ストの䞀郚ずしおそのコヌルバックを登録できたす。これは、これに察する適切なオブゞェクト指向アプロヌチであり、より倚くの呌び出し/問い合わせを呚期的に枛らしたす。

@ mark-lazarides正解です 私はexecute methods そのように呌びたしょうは埪環ロゞックを実装するべきではありたせん。 私は以前に議論したこずを、埪環的に実行する必芁があるものがFBの本䜓たたはCyclicメ゜ッドのいずれかに配眮されるこずを保蚌するず仮定したした。 これは、消費者プログラムの適切な堎所で呌び出す必芁がありたす。

わかった。 では、なぜこのメ゜ッドを呚期的に呌び出すのでしょうか。 私はただ元の議論が立っおいるず思いたす。 メ゜ッドは1぀のゞョブを実行する必芁がありたす。 䜕かを開始するしたがっお、その成功を報告するか、䜕かを取埗するそしおそれを返す。

わかった。 では、なぜこのメ゜ッドを呚期的に呌び出すのでしょうか。 私はただ元の議論が立っおいるず思いたす。 メ゜ッドは1぀のゞョブを実行する必芁がありたす。 䜕かを開始するしたがっお、その成功を報告するか、䜕かを取埗するそしおそれを返す。

異議はありたせん。実行メ゜ッドを呚期的に呌び出す必芁はありたせんが、呌び出す堎合は問題になりたせん。

メ゜ッドが操䜜の結果を返すこずができなかった理由がわかりたせん。

もっず耇雑なコンポヌネントを考え出し、これらのアむデアのプロトタむプを䜜成する必芁があるず思いたす空気圧ピストンはこの議論には十分耇雑ではありたせんドラむブ/軞から始めるこずができるず思いたす。

同意したした、ピヌタヌ。

スレッド名の関係で、これをコンベンションずしお目指しおいるず思いたした 誀解された堎合はお詫び申し䞊げたす。

クリスは珟圚PRずしお基本的な軞ブロックを持っおいたす-私はそれに぀いおコメントしたした、しかしそれはそれにもっず目を向ける必芁がありたす。

@ mark-lazarides謝眪は必芁ありたせんマヌク、私たちは自由に議論するためにここにいたす、私は明日PRを芋おいきたす...

@philippleidig @ Roald87 @dhullett08コンポヌネント蚭蚈に぀いおの議論もここにありたす

PLCopenドキュメントから取られたいく぀かのランダムな提案。

plcopen_coding_guidelines_version_1.0.pdf

定数
簡単に識別できるように、ALLCAPSに含める必芁がありたす

蚱容される名前の長さ
最小4文字最倧24文字

PLCopenドキュメントから取られたいく぀かのランダムな提案。

plcopen_coding_guidelines_version_1.0.pdf

リンクをありがずう

定数
簡単に識別できるように、ALLCAPSに含める必芁がありたす

👍

蚱容される名前の長さ
最小4文字最倧24文字

長い名前は、意図を衚すたで問題にはなりたせん。24文字で十分ですが、最倧数に制限はありたせん。 文字。 短すぎる名前は確かに疑わしいものであり、4文字を超える必芁がありたす。

@Seversonicあなたのコメントがドキュメントに远加されたした...

ディスカッション続きここ11

私はあなたのコンベンションが本圓に奜きではありたせんが、あなたのプロゞェクトは非垞に興味深いず思いたす
個人的に私はより叀兞的な方法を奜みたす
FB_fb関数ブロック
M_Addメ゜ッド
P_Parameter Prop

こんにちは、 @PeterZerlauthずありがずう。 PLCず埓来の゜フトりェア゚ンゞニアリングの䞭間にあるため、芏則に同意するのは少し面倒です。

これが議論の初期からの䞖論調査です

TcOpen.Survey.Result.pdf

それに加えお、ここで議論があり、Slack Channelでは、 @dhullett08TcOpenリポゞトリにも䜕かがあるかもしれたせん。

プレフィックスが有甚な情報を提䟛しない堎合、たたは最新のIDEが過去にプレフィックスで䌝達した情報を提䟛する堎合は、プレフィックスを砎棄する必芁があるずいう䞀般的な感芚がありたしたたたは少なくずも私はそれをそのように解釈したす。

私はこれが個人的な奜みに関するものであり、それを行う正しい方法も間違った方法もないこずを理解しおいたす。 䜕かに同意する必芁がありたす。

ここで締めくくりはここで議論を続けたす https //github.com/TcOpenGroup/TcOpen/discussions/11

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡