
많은 PLC 브랜드가 있고, 각각의 회사는 program 을 하는 tool 들이 모두 다르고, 그 Language 도 또한 다 다르다.
ABB / Siemens / Schneider / Allen-Bradley
그래서 각각의 brand 들에서 오는 많은 confusion 과 difficulty 가 생긴다. 그래서 중요한 것은 표준 이라는 것이다.
IEC61131-3 이라는, 프로그램 Archtecture 와 프로그램들에 표준이라는 것이 있고, 이를 지키는 것이 중요하고 또한 user 들에 혼란을 덜 야기하고, 비슷한 면을 가지기도 한다.
IEC61131-3 은 세가지 fundamental aspect를 가진다.
- Programming Organization Units (POU)
- Variable
- Programing Language
1. Programming Organization Units (POU)
이들의 관계는 다음과 같다. (관계를 나타내는 그림 필요)

PLC 는 하나 또는 다양한 task 들을 가진다.
a_Programs (PRG)
Program (PRG)는 Task를 programming 을 하는 것. 각각의 program 은 PLC software 에서 보는 것처럼 (고유한 번호)를 가지는 것처럼 unique 하다.
각각의 program 은 다른 것들을 불러 올 수가 있다.

b_c Function Block (FB) 와 Functions (FC)
Function Block 은 사용에 있어서 어떤 파라미터들의 사용을 위해서 Memory 의 사용이 필요하다. 앞에 FB1 에서 보듯이 같은 Function Block 인데, 다른 메모리를 사용할 수도 있다. (예를 들면, 다른 파라미터 IO들을 이용해서 두개의 다른 모터를 제어한다 할 경우)
Function 도 역시 메모리는 필요로 한다. 예를 들면 x + y – 10 같은 것들. 이 계산이 끝나면, 어떤 파라미터도 저장할 필요가 없다.
2. Variables type
variable 은 container 라고 생각하면되고, PLC 내에 memory 에 존재 한다. All variable 들은 programming organizaiton units 에서 define 한다.
Variable 에서 가장 중요한 두가지는 아래와 같고, 새 variable 이 생기면 반듯이 두부분은 define 을 해 주어야 한다.
- Visibility
- Types
Visibility 는 VAR 지금의 POU에서의 변수 (LOCAL 변수), 지금의 POU 에서 수정 할 수는 없고, 입력값만 받는 VAR_INPUT, 지금의 POU에서만 결정 되는 VAR_OUTPUT, 어느 POU에서도 속해 있지 않은 VAR_GLOBAL 그러나 어느 POU 에서든 접근 가능하고 수정이 가능하다.

2. Variable Type
1bit = on / off 상태 또는 명령을 줄 수 있다.
1 word = 2 byte = 16 bit 즉 65536 상태값을 나타낼 수 있다. Int 로는, 숫자 범위 -32768 에서 32767, UInt 로는 0 에서 65535 의 범위.

3. Programming Languages
다양한 프로그래밍 Language 가 있고, 다음과 같은 종류가 IEC61131-3에 나오게 된다.
- ST (Structured Text)
- LD (Ladder Diagram)
- FBD (Function Block Diagram)
- SFC (Sequential Function Chart)
기준이 없다면, 다른 사람이 이해하기 어렵고, 난해한 프로그래밍으로 남아 상당히 부정적이게 된다. 그래서 반듯이 그 표준에 맞게끔 하는 것이 좋다.
산업 제어어에서 PLC 는 요소이고, 어떤 기준에 의해 만드는 것을 선호한다.
IEC 의 표준.
IEC 는 의 국제적인 기구 이다.
사용자 경험은 중요하다.
- 기구를 쓰시는 분
- 정말 필요한 부분일 때
- SFC 와 다른 언어 (ST / LD / FBD / CFC)는 완전히 다르다. SFC는 Group of Tasks 이고, 반듯이 Specific Order 로 되어야 하는 환경에서 적합하다. 다른 언어들은, 독립적인 independent 한 Task 들에서 적합하다. ** 한가지 확실히 다른점은, 매 scan Cycle 마다 오른쪽의 언어들의 Condition을 Check 를 한다. 그러나 어느 Language 라도 쓰일 수가 있다. 불가능은 없다. 다만 Willingness 와 Ability 에 따라서.

관리자 PowerShell에서 실행
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(‘https://community.chocolatey.org/install.ps1’))