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/클래슀 이름 | νŒŒμŠ€μΉΌμΌ€μ΄μŠ€ |μ•„λ‹ˆμš” | Cyclinder |
| ENUM μœ ν˜• 이름 | νŒŒμŠ€μΉΌμΌ€μ΄μŠ€ |μ•„λ‹ˆμš” | MachineState.Start |
| μΈν„°νŽ˜μ΄μŠ€ 이름 | νŒŒμŠ€μΉΌμΌ€μ΄μŠ€ | I | ICyclinder |
| κΈ°λŠ₯ 이름 | νŒŒμŠ€μΉΌμΌ€μ΄μŠ€ |μ•„λ‹ˆμš” | Add() |
| STRUCT 이름 | νŒŒμŠ€μΉΌμΌ€μ΄μŠ€ | μ•„λ‹ˆμ˜€ | Data |
| μœ λ‹ˆμ˜¨ 이름 | νŒŒμŠ€μΉΌμΌ€μ΄μŠ€ | μ•„λ‹ˆμ˜€ | Control |

@philippleidig

  • λ‚΄ 생각에 속성은 "IsEnabled"와 같이 μ •μ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 이름 μžμ²΄λŠ” 이미 μ–΄λ–€ μœ ν˜•μΈμ§€ ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ „μ μœΌλ‘œ λ™μ˜.

  • λΆ€μšΈλ‘œ λ©”μ„œλ“œμ˜ λ°˜ν™˜ 값을 μ’‹μ•„ν•©λ‹ˆλ‹€. 더 λ³΅μž‘ν•œ 데이터 μœ ν˜•μ€ μ™ΈλΆ€μ—μ„œ μΈμŠ€ν„΄μŠ€ν™”ν•˜κ±°λ‚˜ 참쑰둜 λ°˜ν™˜λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— λΆ€μ μ ˆν•©λ‹ˆλ‹€.

ꡬ성 μš”μ†Œμ— μ„€λͺ…λœ λŒ€λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. μ‹œν€€μŠ€μ˜ μƒνƒœλ₯Ό μ œμ–΄ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 bool이면 μΆ©λΆ„ν•©λ‹ˆλ‹€. λ•Œλ‘œλŠ” λ©”μ„œλ“œμ˜ μƒνƒœμ— λŒ€ν•΄ 더 λ§Žμ€ 정보λ₯Ό μ•Œκ³  싢을 λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€... κ·ΈλŸ¬λ‚˜ 이것은 더 넓은 λ…Όμ˜κ°€ ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€(somethig와 같은 μœ μ°½ν•œ ꡬ문일 수 있음)

  • Inxton λ˜λŠ” tc.proberλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ "fbComponent"의 각 κΈ°λ³Έ 클래슀의 상속이 ν•„μš”ν•©λ‹ˆκΉŒ?

μ•„λ‹ˆμš”. Inxtonμ΄λ‚˜ tc.prober에 λŒ€ν•œ νŠΉμ • μš”κ΅¬ 사항은 μ—†μŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” 이것을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. ComponentBase λŠ” 일뢀 곡개 계약(μˆ˜λ™ λ©”μ„œλ“œ λ“±)이 μžˆλŠ” 좔상 ν΄λž˜μŠ€μ΄μ§€λ§Œ ꡬ성 μš”μ†Œμ— λŒ€ν•œ λͺ‡ 가지 곡톡 κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 상속에 λŒ€ν•œ μ—΄λ ¬ν•œ νŒ¬μ€ μ•„λ‹ˆμ§€λ§Œ (λ‚˜λŠ” μž‘κ³‘μ„ μ„ ν˜Έν•©λ‹ˆλ‹€), 이 κ²½μš°μ—λŠ” 미래λ₯Ό μœ„ν•΄ λͺ‡ 가지 μ˜΅μ…˜μ„ μ—΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

inxtonμ—μ„œ μ»¬λ ‰μ…˜μ˜ λͺ¨λ“  ꡬ성 μš”μ†Œλ₯Ό μˆ˜μ§‘ν•˜λ €λ©΄ something is copmonent 에 λŒ€ν•œ λ©”μ»€λ‹ˆμ¦˜μ΄ μžˆμ„ λ•Œ κ·Έλ ‡κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

또 λ‹€λ₯Έ μ΄μœ κ°€ μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” μš”μ¦˜ λͺ‡ 가지 μš”κ΅¬ 사항이 μžˆλŠ” κΈ°λ³Έ 라이브러리λ₯Ό κ³΅κ°œν•˜λŠ” μž‘μ—…μ„ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ£Όμ— λ­”κ°€ λ‚˜μ˜¬ 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ„ μ•Œλ €λ“œλ¦½λ‹ˆλ‹€.

  • μœ ν˜• 이름 지정과 κ΄€λ ¨ν•˜μ—¬ μ €λŠ” 개인적으둜 μ•½κ°„ 급진적이며 일반적으둜 접두사λ₯Ό μƒλž΅ν•©λ‹ˆλ‹€. μΈν„°νŽ˜μ΄μŠ€, μ°Έμ‘° 및 ν¬μΈν„°λŠ” μ œμ™Έν•©λ‹ˆλ‹€.
    예

μœ ν˜• λͺ…λͺ…

블둝 μœ ν˜• ν‘œκΈ°λ²• 접두사 예
FB/CLASS 이름 PascalCase No Cyclinder
ENUM μœ ν˜• 이름 PascalCase No MachineState.Start
μΈν„°νŽ˜μ΄μŠ€ 이름 PascalCase I ICyclinder
κΈ°λŠ₯ 이름 PascalCase No Add()
STRUCT 이름 PascalCase μ•„λ‹ˆμ˜€ Data
UNION 이름 PascalCase No Control

접두사도 μ’‹μ•„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν…Œμ΄λΈ”μ€ μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” 접두어 체계와 λΉ„μŠ·ν•˜μ§€λ§Œ... λ‹€μ‹œ μ œκ±°ν•˜κΈ°λ‘œ κ²°μ •ν•˜λ©΄ μ €λ₯Ό 기쁘게 ν•  κ²ƒμž…λ‹ˆλ‹€.

λŒ€λΆ€λΆ„μ˜ 경우 접두사λ₯Ό μ‚¬μš©ν•˜λ©΄ 이점이 μ—†μŠ΅λ‹ˆλ‹€. @philippleidig 의 μ œμ•ˆμ— λ™μ˜ν•©λ‹ˆλ‹€.

포인터와 μ°Έμ‘°λŠ” μ˜ˆμ™ΈλΌκ³  λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

PR #5μ—μ„œ λ‚΄ μ»¨λ²€μ…˜μ„ μ œμ•ˆν–ˆμŠ΅λ‹ˆλ‹€.

멀버 넀이밍 & νƒ€μž… 넀이밍

접두사λ₯Ό μ‚¬μš©ν•˜λ©΄ 이점이 μ—†μŠ΅λ‹ˆλ‹€. 그것은 μ–΄λ–€ 식 μœΌλ‘œλ“  λ‚˜μ—κ²Œ λ„μ›€μ΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

멀버 λ³€μˆ˜

클래슀(FB) 멀버 λ³€μˆ˜λŠ” μˆ¨κ²¨μ§€κ³  μž‘μ€ μ΄λ¦„μœΌλ‘œ μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.
~파슀칼VAR{속성 '숨기기'}트리거: BOOL;{속성 '숨기기'}μΉ΄μš΄ν„° : INT;{속성 '숨기기'}μ•„λ‚ λ‘œκ·Έ μƒνƒœ: μ•„λ‚ λ‘œκ·Έ μƒνƒœ;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 은 배열에 λŒ€ν•œ PR κ·œμΉ™ 쀑 ν•˜λ‚˜λΌλ©΄ pls... λ¦¬ν¬μ§€ν† λ¦¬μ—μ„œ 더 λ§Žμ€ κΈ°μ—¬μžλ₯Ό 보고 μ‹ΆμŠ΅λ‹ˆλ‹€. :).

배열에 λŒ€ν•œ μ œμ•ˆμ΄ μžˆμŠ΅λ‹ˆλ‹€. 0을 기반으둜 ν•˜λŠ” λ°°μ—΄λ§Œ 트랜슀-νŒŒμΌλ§ν•˜λŠ” inxton μ»΄νŒŒμΌλŸ¬μ— λŒ€ν•œ 곡식적인 μš”κ΅¬ 사항이 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” C#μ—μ„œ μ‚¬μš©ν•  λ•Œ ν˜Όλ™μ„ λ°©μ§€ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€.

_array : ARRAY[0..10] OF BOOL; // 트랜슀 파일
λ™μ•ˆ
_array : ARRAY[1..10] OF BOOL; // νŠΈλžœμŠ€νŒŒμΌμ„ ν•˜μ§€ μ•ŠλŠ”λ‹€

이에 λŒ€ν•œ 의견이 μžˆμœΌμ‹­λ‹ˆκΉŒ?

κ΅¬μ‘°ν™”λœ ν…μŠ€νŠΈ 루핑이 μž‘λ™ν•˜λŠ” 방식 λ•Œλ¬Έμ— μ €λŠ” PLC μ–΄λ ˆμ΄μ˜ 치수λ₯Ό 1..X둜 μœ μ§€ν•˜λŠ” 것을 μ„ ν˜Έν•©λ‹ˆλ‹€. 결과적으둜 μ½”λ“œλŠ” PLC의 λͺ¨λ“  κ³³μ—μ„œ 읽기 μ‰½μŠ΅λ‹ˆλ‹€. PLCμ—μ„œ 항상 맀λ ₯적이고 μœ μ§€ 관리 κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 타사 μ½”λ“œμ—μ„œ 더 잘 μž‘λ™ν•˜λ„λ‘ shim이 ν•„μš”ν•œ 경우 λ³„λ„λ‘œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

// 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()). 이것은 ν•„μš”ν•  λ•Œ λ‹€λ₯Έ λ°˜ν™˜ μœ ν˜•μ„ λ°©μ§€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” public λ©”μ†Œλ“œλ₯Ό 반볡적으둜 ν˜ΈμΆœν•˜λŠ” μ ‘κ·Ό 방식을 μ •λ§λ‘œ μ’‹μ•„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ λ©”μ†Œλ“œλŠ” μ˜¬λ°”λ₯Έ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•  λ•ŒκΉŒμ§€ κΈ°λŠ₯을 반볡적으둜 μ‹€ν–‰ν•©λ‹ˆλ‹€. λ‚΄κ°€ μƒκ°ν•˜κΈ°μ— 받아듀일 수 μžˆλŠ” ν•œ 가지 κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€(μΈν„°νŽ˜μ΄μŠ€μ— "μ‹€ν–‰" μœ ν˜• λ©”μ†Œλ“œκ°€ μžˆμ§€λ§Œ μž‘λ™ν•˜λŠ” 더 λ‚˜μ€ 방법도 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€).

κ·Έκ²ƒμ˜ 문제점;

  • λ™μ‹œμ— ν˜ΈμΆœν•  수 μžˆλŠ” ν΄λž˜μŠ€μ—μ„œ μ‹€ν–‰ 경둜λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 즉
atEnd :=  axis.GoToEnd();
atBeginning := axis.GoToBeginning();
  • ν΄λž˜μŠ€λŠ” λ‚΄λΆ€μ μœΌλ‘œ μƒνƒœλ₯Ό 관리해야 ν•©λ‹ˆλ‹€. λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή μƒνƒœλ₯Ό μš”μ²­ν•˜κ³  μˆ˜μ •ν•  수 있으며 속성을 μ‚¬μš©ν•˜μ—¬ μƒνƒœμ— μ•‘μ„ΈμŠ€ν•˜κ±°λ‚˜ κ°„λ‹¨ν•œ μƒνƒœλ₯Ό μ„€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • μ–΄λ–»κ²Œ 그리고 μ™œ 그런 μ‹μœΌλ‘œ μ‚¬μš©λ˜λŠ”μ§€ λͺ…ν™•ν•˜λ„λ‘ λ©”μ„œλ“œμ˜ 이름을 μ–΄λ–»κ²Œ μ§€μ •ν•©λ‹ˆκΉŒ? axis.GoToEndTrueWhenComplete()?
  • 호좜이 μ‹€ν–‰λ˜λŠ” 방식을 μˆ˜μ •ν•˜λŠ” λ°©μ‹μœΌλ‘œ 클래슀의 κΈ°λ³Έ μƒνƒœκ°€ λ³€κ²½λ˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?
  • 경쟁 쑰건을 더 μ‰½κ²Œ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 무언가에 λŒ€ν•΄ .Enable()을 반볡적으둜 ν˜ΈμΆœν•˜μ§€λ§Œ 단일 μŠ€μΊ”μ— λŒ€ν•΄ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ .Enable()은 "μ™„λ£Œλ  λ•ŒκΉŒμ§€ 계속 호좜" μ ‘κ·Ό 방식을 μ‚¬μš©ν•˜μ—¬ μ–΄μ¨Œλ“  ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€μ‹  .RequestEnable : BOOL이어야 ν•©λ‹ˆλ‹€. μ΄λŠ” μš”μ²­ μ§€μ μ˜ κΈ°λ³Έ 쑰건이 μ˜¬λ°”λ₯Έμ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€(호좜 μ½”λ“œκ°€ ν•΄λ‹Ή μ§€μ μ—μ„œ μ •μƒμ μœΌλ‘œ ν΄λ°±λ˜λ„λ‘ ν—ˆμš©). μš”μ²­μ΄ μ΄λ£¨μ–΄μ§ˆ 수 있으면 호좜 μ½”λ“œλŠ” μ™„λ£Œλ₯Ό μœ„ν•΄ .IsEnabled 및 .InErrorλ₯Ό λͺ¨λ‹ˆν„°λ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@philippleidig λŠ” TwinCAT HMI에 μ΅μˆ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 0이 μ•„λ‹Œ 기반 배열은 μ–΄λ–»κ²Œ μ²˜λ¦¬λ©λ‹ˆκΉŒ?

@mark-lazarides

λ©”μ„œλ“œλŠ” λ©”μ„œλ“œμ— λŒ€ν•΄ 합리적인 것을 λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ©”μ†Œλ“œμ˜ 이름은 이λ₯Ό μ΄ν•΄ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.
πŸ‘

λ™μ‹œμ„± 및 경쟁 쑰건은 λͺ¨λ‘ 합리적인 λ¬Έμ œμž…λ‹ˆλ‹€. IMHO μ΄λŸ¬ν•œ λ¬Έμ œλŠ” ꡬ성 μš”μ†Œ μˆ˜μ€€μ—μ„œ κ°€λŠ₯ν•œ ν•œ 많이 ν•΄κ²°λ˜μ–΄μ•Ό ν•˜μ§€λ§Œ ꡬ성 μš”μ†Œλ₯Ό μ†ŒλΉ„ν•  λ•Œ μ‘°μ • μˆ˜μ€€μ—μ„œ 더 μ€‘μš”ν•©λ‹ˆλ‹€. ꡬ성 μš”μ†Œ λ©”μ„œλ“œλŠ” ꡬ성 μš”μ†Œμ˜ λ™μΌν•œ μΈμŠ€ν„΄μŠ€μ—μ„œ μΆ©λŒν•˜λŠ” λ©”μ„œλ“œμ˜ λ™μ‹œ ν˜ΈμΆœμ„ λ°©μ§€ν•˜λŠ” μ μ ˆν•˜κ²Œ κ΅¬ν˜„λœ μƒνƒœ μ»¨νŠΈλ‘€λŸ¬μ™€ μœ μ‚¬ν•œ κΈ°λ³Έ μš”μ†Œ(λ‹¨μˆœν•œ CASE, IF, ELSIF λ˜λŠ” 더 λ³΅μž‘ν•œ μ‹œν€€μ„œ/선택기/반볡자) λ‚΄μ—μ„œ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. .

ꡬ성 μš”μ†Œμ˜ μ†ŒλΉ„μž μ½”λ“œμ—μ„œ 이와 같은 것을 방지해야 ν•©λ‹ˆλ‹€.
~atEnd := axis.GoToEnd();atBeginning := axis.GoToBeginning();~

executing methods μ™„λ£Œ μ‹œ true $λ₯Ό λ°˜ν™˜ν•˜λ©΄ κΉ¨λ—ν•œ 선언적 μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ‚΄κ°€ 염두에 λ‘” 것은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

~~~
VAR
_μƒνƒœ : INT;

END_VAR

CASE _μƒνƒœ
0:
IF(axis.MoveAbsolute(μœ„μΉ˜: 100.0)) THEN
_μƒνƒœ := 1;
END_IF;
1:
IF(axis.MoveRelative(μœ„μΉ˜: 100.0)) THEN
_μƒνƒœ := 2;
END_IF;
2:
IF(axis.MoveAbsolute(μœ„μΉ˜: 300.0)) THEN
_μƒνƒœ := 3;
END_IF;
μ‚Ό:
_μƒνƒœ := 0;
END_CASE
~~~

이것은 λ‹€μŒμœΌλ‘œ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

~~~
VAR
_μƒνƒœ : INT;

END_VAR

CASE _μƒνƒœ
0:
Await(axis.MoveAbsolute(μœ„μΉ˜: 100.0),1);
1:
λŒ€κΈ°(axis.MoveRelative(μœ„μΉ˜: 100.0),2);
2:
Await(axis.MoveAbsolute(μœ„μΉ˜: 300.0),3);
μ‚Ό:
λŒ€κΈ°(μ°Έ, 0);

END_CASE

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

방법 λŒ€κΈ°
VAR_INPUT
μ™„λ£Œ : BOOL
λ‹€μŒ μƒνƒœ: INT;
END_VAR
IF (μ™„λ£Œ) THEN
_state := λ‹€μŒ μƒνƒœ;

END_IF;

~~~
νŽΈμ§‘: ꡬ성 μš”μ†Œκ°€ 단일 PLC μž‘μ—…μ—μ„œ μ‚¬μš©λœλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

μ½”λ“œ μ†ŒλΉ„μ— μ œμ•½μ„ κ°€ν•©λ‹ˆλ‹€. μ†ŒλΉ„μžκ°€ 잘λͺ»λœ μˆœμ„œλ‘œ ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 당사 ꡬ성 μš”μ†ŒλŠ” 였λ₯˜μ— λŒ€ν•œ μ±…μž„μ„ 지지 μ•ŠμŠ΅λ‹ˆλ‹€. 그듀은 λͺ¨λ“  μƒν˜Έ μž‘μš©μ— 잘 λ°˜μ‘ν•΄μ•Ό ν•©λ‹ˆλ‹€. 그것듀은 λ°˜λ“œμ‹œ "μž‘λ™"ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€(즉, $#$ axis.Enable() res := axis.MoveTo(Position:=100); λ₯Ό ν˜ΈμΆœν•˜λ©΄ μž‘λ™ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€). κ·ΈλŸ¬λ‚˜ μ†ŒλΉ„ν•˜λŠ” μ½”λ“œμ—λŠ” λ¬Έμ œκ°€ λ°œμƒν•œ μœ„μΉ˜λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄ λͺ¨λ“  μ§€μ μ—μ„œ μΆ©λΆ„ν•œ 정보가 μ œκ³΅λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ‚˜μ—κ²Œλ„ μ—¬μ „νžˆ 잘 μ½νžˆμ§€ μ•ŠλŠ”λ‹€. axis.MoveAbsolute(syx)λ₯Ό 읽을 수 μ—†μœΌλ©° 주기적으둜 ν˜ΈμΆœν•΄μ•Ό 함을 μ΄ν•΄ν•©λ‹ˆλ‹€. 우리의 κ΄€μš©μ  μŠ€νƒ€μΌμ΄ λ‹Ήμ‹ μ—κ²Œ ν•„μš”ν•˜λ‹€λŠ” 것을 μ•Œκ³  κ·Έ μ‹œμ μ—μ„œ μš°λ¦¬κ°€ 맀우 μœ μš©ν•œ 것을 λ§Œλ“œλŠ” 데 μ‹€νŒ¨ν–ˆλ‹€κ³  μƒκ°ν•˜λŠ” κ²½μš°μ—λ§Œ μ΄ν•΄ν•˜μ‹€ κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” λ˜ν•œ 였λ₯˜λ₯Ό μ œμ™Έν•  수 μžˆλŠ”μ§€ 여뢀에 관계없이 였λ₯˜κ°€ λ°œμƒν•  κ°€λŠ₯성이 더 λ†’λ‹€κ³  λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μˆœν™˜ λ©”μ„œλ“œ 호좜 μ ‘κ·Ό 방식을 μ‚¬μš©ν•˜λ©΄ 객체의 μƒνƒœλ₯Ό ν˜ΈμΆœν•  μ€€λΉ„κ°€ λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” λ©”μ„œλ“œλ₯Ό λ§Œλ“  λ‹€μŒ μˆœν™˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ λ‹€μŒ 객체의 λ‹€λ₯Έ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ 쀑간에 아무 일도 μΌμ–΄λ‚˜μ§€ μ•Šμ•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” 성곡 μ—¬λΆ€λ₯Ό μ•Œλ €μ£ΌλŠ” μš”μ²­μ„ λ§Œλ“  λ‹€μŒ μ™„λ£Œ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•©λ‹ˆλ‹€. μ›ν•˜λŠ” 경우 μš”μ²­μ˜ μΌλΆ€λ‘œ 이에 λŒ€ν•œ μ½œλ°±μ„ 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 이에 λŒ€ν•œ μ μ ˆν•œ OO μ ‘κ·Ό 방식이며 주기적으둜 더 λ§Žμ€ 호좜/μ§ˆλ¬Έμ„ μ€„μ΄λŠ” κ²ƒμž…λ‹ˆλ‹€.

@mark-lazarides λ§žμŠ΅λ‹ˆλ‹€! λ‚˜λŠ” execute methods (이런 μ‹μœΌλ‘œ λΆ€λ₯΄μž) μˆœν™˜ 논리λ₯Ό κ΅¬ν˜„ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. 이전에 λ…Όμ˜ν•œ λ‚΄μš©μ„ μˆœν™˜ λ°©μ‹μœΌλ‘œ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” ν•­λͺ©μ΄ FB의 λ³Έλ¬Έμ΄λ‚˜ Cyclic λ©”μ„œλ“œμ— λ°°μΉ˜λ˜λ„λ‘ 보μž₯ν•œλ‹€κ³  κ°€μ •ν–ˆμŠ΅λ‹ˆλ‹€. μ†ŒλΉ„μž ν”„λ‘œκ·Έλž¨μ˜ μ μ ˆν•œ μœ„μΉ˜μ—μ„œ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ’‹μ•„μš”. κ·Έλ ‡λ‹€λ©΄ μ™œ μš°λ¦¬λŠ” 주기적으둜 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• κΉŒμš”? λ‚˜λŠ” μ—¬μ „νžˆ μ›λž˜μ˜ μ£Όμž₯이 μœ νš¨ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ©”μ„œλ“œλŠ” ν•˜λ‚˜μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 무언가λ₯Ό μ‹œμž‘ν•˜κ±°λ‚˜(λ”°λΌμ„œ κ·Έ 성곡을 λ³΄κ³ ν•˜κ±°λ‚˜) 무언가λ₯Ό μ–»κ³  λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ’‹μ•„μš”. κ·Έλ ‡λ‹€λ©΄ μ™œ μš°λ¦¬λŠ” 주기적으둜 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• κΉŒμš”? λ‚˜λŠ” μ—¬μ „νžˆ μ›λž˜μ˜ μ£Όμž₯이 μœ νš¨ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ©”μ„œλ“œλŠ” ν•˜λ‚˜μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 무언가λ₯Ό μ‹œμž‘ν•˜κ±°λ‚˜(λ”°λΌμ„œ κ·Έ 성곡을 λ³΄κ³ ν•˜κ±°λ‚˜) 무언가λ₯Ό μ–»κ³  λ°˜ν™˜ν•©λ‹ˆλ‹€.

이의 μ—†μŒ 마크, μ‹€ν–‰ λ©”μ„œλ“œλ₯Ό 주기적으둜 ν˜ΈμΆœν•  ν•„μš”λŠ” μ—†μ§€λ§Œ κ·Έλ ‡κ²Œ ν•˜λ©΄ λ¬Έμ œκ°€ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ©”μ„œλ“œκ°€ μž‘μ—… κ²°κ³Όλ₯Ό λ°˜ν™˜ν•  수 μ—†λŠ” 이유λ₯Ό μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

μ’€ 더 λ³΅μž‘ν•œ ꡬ성 μš”μ†Œλ₯Ό 생각해내고 μ΄λŸ¬ν•œ μ•„μ΄λ””μ–΄μ˜ ν”„λ‘œν† νƒ€μž…μ„ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€(곡압 ν”ΌμŠ€ν†€μ€ 이 λ…Όμ˜μ—μ„œ μΆ©λΆ„νžˆ λ³΅μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). ꡬ동/μΆ•μœΌλ‘œ μ‹œμž‘ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ™μ˜ν•©λ‹ˆλ‹€, ν”Όν„°.

μŠ€λ ˆλ“œ 이름 λ•Œλ¬Έμ— 이것을 μ»¨λ²€μ…˜μœΌλ‘œ 노리고 μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€! μ œκ°€ 잘λͺ» μ΄ν•΄ν–ˆλ‹€λ©΄ μ‚¬κ³Όλ“œλ¦½λ‹ˆλ‹€.

ChrisλŠ” ν˜„μž¬ PR둜 κΈ°λ³Έ μΆ• 블둝을 가지고 μžˆμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•΄ μ–ΈκΈ‰ν–ˆμ§€λ§Œ 더 λ§Žμ€ 관심이 ν•„μš”ν•©λ‹ˆλ‹€.

@mark-lazarides 사과 ν•„μš”μ—†μ–΄μš” 마크, 자유둭게 ν† λ‘ ν•˜λŸ¬ μ™”μ–΄μš”, 내일 홍보 μ’€ ν• κ²Œμš”...

@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 μ†Œν’ˆ

μ•ˆλ…•ν•˜μ„Έμš”, @PeterZerlauth 와 κ°μ‚¬ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” PLC와 고전적인 μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄λ§μ˜ 쀑간 단계에 있기 λ•Œλ¬Έμ— κ·œμΉ™μ— λ™μ˜ν•˜λŠ” 것은 μ•½κ°„ νž˜λ“  μΌμž…λ‹ˆλ‹€.

ν† λ‘  μ΄ˆκΈ°μ— μ‹€μ‹œν•œ μ„€λ¬Έμ‘°μ‚¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

TcOpen.Survey.Result.pdf

κ·Έ 외에도 여기와 Slack μ±„λ„μ—μ„œ 토둠이 μžˆμ—ˆκ³  @dhullett08 TcOpen repo에도 λ­”κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

접두사가 μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ§€ μ•Šκ±°λ‚˜ ν˜„λŒ€ IDEκ°€ κ³Όκ±° μ ‘λ‘μ‚¬λ‘œ μ „λ‹¬ν–ˆλ˜ 정보λ₯Ό μ œκ³΅ν•˜λŠ” 경우 접두사λ₯Ό 포기해야 ν•œλ‹€λŠ” 일반적인 λŠλ‚Œμ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€(λ˜λŠ” 적어도 μ €λŠ” κ·Έλ ‡κ²Œ ν•΄μ„ν•©λ‹ˆλ‹€).

λ‚˜λŠ” 이것이 개인적인 μ·¨ν–₯에 κ΄€ν•œ 것이며 μ‹€μ œλ‘œ 옳고 κ·Έλ₯Έ 방법이 μ—†λ‹€λŠ” 것을 μ΄ν•΄ν•©λ‹ˆλ‹€. λ‹€λ§Œ μš°λ¦¬λŠ” 무언가에 λ™μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ—¬κΈ°μ—μ„œ 토둠을 마치며 μ—¬κΈ°μ—μ„œ κ³„μ†λ©λ‹ˆλ‹€: https://github.com/TcOpenGroup/TcOpen/discussions/11

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰