CodeSys#Function Block 만들기
Version
Function Block이란?
여기서 CodeSys의 온라인 헬프를 다시 봅시다.
A function block is a POU that yields one or more values when executed.
Function Block이 실행되면 많은 값이 생성됩니다.
The values of the output variables and the internal variables remain unchanged after execution until the next execution. This means that the function block does not necessarily return the same output values for multiple calls with the same input variables.
Function Block의 출력 변수, 내부 변수 값은 실행 후 다음 Cycle로 유지됩니다.펀션 블록을 여러 번 호출해도 입력 변수가 같아도 출력이 꼭 같지는 않다는 것이다.
You can access only input and output variables of a function block from outside the function block instance, not the internal variables.
Function Block에 액세스하는 변수만 가져오고 내보낼 수 있습니다.내부 변수에 접근하지 마십시오.
Access to a function block instance is restricted to the POU in which the instance is declared, unless you have declared the instance globally.
Function Block의 인스턴스는 호출된 POU에만 있습니다.전체 국면에 성명할 수도 있다.
호출 방법
instance : function block;MyFnction:FB1;
변수에 액세스하는 방법
instance . variableMyFunction.iInputs
Input·Output 할당 방법
Input:=
Output이면 =>FB1_1(in:=myInput,Out=>myOut);
이루어지다
Function Block 만들기
Application>Add Object>POU
Function Block의 이름을 결정하고 "Function Block"을 선택하면 OK.
Extends, Implements 등은 별도로 설명한다.
화면은 기본적으로 Program Function과 같습니다.
절차.
여기서 CodeSys의 온라인 헬프를 다시 봅시다.
A function block is a POU that yields one or more values when executed.
Function Block이 실행되면 많은 값이 생성됩니다.
The values of the output variables and the internal variables remain unchanged after execution until the next execution. This means that the function block does not necessarily return the same output values for multiple calls with the same input variables.
Function Block의 출력 변수, 내부 변수 값은 실행 후 다음 Cycle로 유지됩니다.펀션 블록을 여러 번 호출해도 입력 변수가 같아도 출력이 꼭 같지는 않다는 것이다.
You can access only input and output variables of a function block from outside the function block instance, not the internal variables.
Function Block에 액세스하는 변수만 가져오고 내보낼 수 있습니다.내부 변수에 접근하지 마십시오.
Access to a function block instance is restricted to the POU in which the instance is declared, unless you have declared the instance globally.
Function Block의 인스턴스는 호출된 POU에만 있습니다.전체 국면에 성명할 수도 있다.
호출 방법
instance : function block;
MyFnction:FB1;
변수에 액세스하는 방법
instance . variable
MyFunction.iInputs
Input·Output 할당 방법
Input:=
Output이면 =>
FB1_1(in:=myInput,Out=>myOut);
이루어지다
Function Block 만들기
Application>Add Object>POU
Function Block의 이름을 결정하고 "Function Block"을 선택하면 OK.
Extends, Implements 등은 별도로 설명한다.
화면은 기본적으로 Program Function과 같습니다.
절차.
NTW1:
R_TRIG는 체크가 시작되는 Function Block입니다.
Start 버튼을 누른 것이 감지되었습니다.
NTW2:
TON은 Delay On Timer입니다.1초 이상 ON으로 바뀔 때 리셋.
NTW3:
Count 버튼을 누르면 Counter+1 이 표시됩니다.
NTW4
리셋이면 0.
NTW5/6
현재 Count 수와 Count 상태만 내보냅니다.
호출
펀션 블록 설명 기억나세요?
Function Block의 출력 변수, 내부 변수 값은 실행 후 다음 Cycle로 유지됩니다.
이 값을 유지하려면 메모리 영역이 필요하다는 것이다.
그 메모리 영역은 실례다.
먼저 인스턴스를 생성합니다.
변수를 정의합니다.
그 변수는 Input/Output에 할당됩니다.
Function Block에 액세스하는 변수만 가져오고 내보낼 수 있습니다.
방법1
그 "Pin"에 변수를 직접 할당합니다.
방법2
다른 네트워크에서 Input, Output을 사용합니다.
를 참조하십시오.
내부 변수에 접근하지 마십시오.
만약 자신이 실례의 내부 변수를 직접 방문한다면 어떻게 될까요?
Siemens, Mels는 그런 접근을 원하면 되지만, CodeSys는 그것을 자동 변수로 입력할 곳이 없는 것 같습니다.(억지로 이름을 입력해도 컴파일링이 틀리지 않습니다.)
화면 제작
ADD 후 +1, Reset에서 0을 되돌려줍니다. 지금은 카운트가 표시되고 카운트 설정도 있습니다. 카운터가 설정보다 크면 불이 켜질 것 같습니다.
엔진 스위치
조사가 5분이나 걸렸는데..
Input configuration Tap의 Variable을 속성에 할당하려면 버튼을 선택합니다.
이루어지다
이렇게 된 느낌.
한마디
Function Block에서 Input·Output을 할당할 때 방법이 2로 표시됩니다.
이렇게 된 느낌.
한마디
Function Block에서 Input·Output을 할당할 때 방법이 2로 표시됩니다.
이렇게 보니까
만약 그 Function Block의 Trigger 조건 등이 그리 복잡하지 않다면 방법 1의 프로그램은 비교적 보기 쉽다.전부 뭘 넣었는지, 어떤 게 나오는지 단숨에 볼 수 있기 때문이다.
반대로 프로그램의 Trigger 조건이 상당히 복잡하면 방법2는 오히려 보기 쉽고 프로그램의 제작 방법도 하기 쉽다.
예를 들어 이와 같은 논리가 인풋의 리셋에서 채택되면 보기 어렵다.변수를 추가하여 이 논리의 결과를 Function Block의 입력으로 복원할 수 있습니다.그래도 좋아.
주제 밖의 말을 하다.
나는 레이더에 이런 논리를 만들 때 어떻게 조작해야 좋을지 약간 망설였다.
실제로는 이렇게 한 것이다.
Function·Function Block의 차이점
파이톤으로 볼 때 def와 Class의 차이점.그런데 많은 분이 손님에게만 해시태그를 걸어주시고 그동안 미쓰비시의 라다(가득 적혀 있고 해시태그 없는 주소 사용) 콘셉트로 걸어오셨기 때문에 원래 유지되지 않나요?만들다설명만 해도 시간이 오래 걸린다.
여기에 새로운 펀션과 펀션 블록을 만들었다.
내용이 똑같아요. INPUT가 True이면 +1.
FB1_1FUNCTION_BLOCK FB1_1
VAR_INPUT
iCount:BOOL;
END_VAR
VAR_OUTPUT
qCount:int;
END_VAR
VAR
Count:INT;
END_VAR
IF iCount THEN
Count:=Count+1;
END_IF
qCount:=Count;
FC1FUNCTION FC1:INT
VAR_INPUT
iPlus:BOOL;
END_VAR
VAR
count:INT;
END_VAR
IF iPlus THEN
count:=count+1;
END_IF
FC1:=count;
결과가 어떻게 나올까요?
FC는 항상 1이고 FB의 숫자는 계속 상승한다.
이것이 바로 Help의'FC의 연산 결과는 다음 주기가 되지 않는다'와'FB는 다음 사이클에서도 연산 결과가 있다'는 것이다.
지금까지 수고하셨습니다.
Reference
이 문제에 관하여(CodeSys#Function Block 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/soup01/items/9dc6cb193c4267ea0737
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
FUNCTION_BLOCK FB1_1
VAR_INPUT
iCount:BOOL;
END_VAR
VAR_OUTPUT
qCount:int;
END_VAR
VAR
Count:INT;
END_VAR
IF iCount THEN
Count:=Count+1;
END_IF
qCount:=Count;
FUNCTION FC1:INT
VAR_INPUT
iPlus:BOOL;
END_VAR
VAR
count:INT;
END_VAR
IF iPlus THEN
count:=count+1;
END_IF
FC1:=count;
Reference
이 문제에 관하여(CodeSys#Function Block 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/soup01/items/9dc6cb193c4267ea0737텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)