순환 중복 체크
이 펑션은 파라미터 NumberOfBytes와 시작 어드레스 StartAddress로 지정된 n 바이트(8비트)를 사용하여 모든 PLC 형식의 CRC16 (순환 중복 체크)을 계산합니다.
입력
검사합 계산을 위한 시작 어드레스. F70_BCC 계산을 포함하는 CRC16 명령를 지원하지 않는 PLC(FP0, FP5, FP10)의 경우에는 시작 어드레스가 DT 또는 FL 영역에 있어야 합니다.
StartAddress 계산이 수행되고 CRC16로 시작되는 바이트 수(8비트).
출력
IsValid 플래그가 TRUE로 설정되는 경우에만 유효한 계산된 검사합.
계산된 검사합이 유효한지 여부를 나타내는 플래그.
F70_BCC 계산을 포함하는 CRC16 명령을 지원하지 않는 PLC(FP0, FP5, FP10)의 경우 CRC가 유효하지 않은 조건은 다음과 같습니다.
처음 8회 실행 스캔 도중 내부 테이블이 빌드되는 경우
StartAddress 변수의 어드레스 영역이 DT 또는 FL 영역에 없는 경우.
F70_BCC 계산을 포함하는 CRC16 명령을 지원하는 PLC의 경우에는 CRC가 항상 유효합니다.
F 명령을 사용하는 대신 해당 FP7 명령을 사용하는 것이 좋습니다.FP_CRC 순환 중복 체크
PLC 형식에 따라 다음 두 가지 펑션 구현 중 하나를 사용합니다.
F70_BCC을 계산하기 위해 파라미터 s1=10인 CRC16 명령을 지원하는 PLC(FP-e, FP-Sigma, FP2, FP2SH, FP10SH)는 F70_BCC를 직접 사용합니다.
다른 PLC(FP0, FP0R, FP3, FP5, FP10)의 경우에는 명시적 CRC16 계산을 수행하는 서브프로그램이 호출됩니다. 이 서브프로그램에는 다음과 같은 제한사항이 적용됩니다.
처음 8회 실행 스캔 도중 내부 테이블이 빌드됩니다. 이 시간에는 검사합을 계산하지 않으며 IsValid 출력은 FALSE로 유지됩니다. 이후 검사합을 계산하며 IsValid 출력은 TRUE로 설정됩니다.
StartAddress는 DT 또는 FL 영역에 어드레스가 필요합니다.
CRC16이 서브프로그램으로 사용되는 경우 단계 수가 최대 약 200까지 증가할 수 있습니다.
프로그래밍을 할 때 특히 데이터 볼륨이 큰 경우 내부 테이블을 빌드하고 검사합을 계산하는 데 일정 시간이 필요하다는 사실에 유의해야 합니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
Array1: ARRAY [0..10] OF INT:=[0,1,2,3,4,5,6,7,8,9,10];
ARRAY1_BYTES: INT:=22;
Array1Crc: WORD:=0;
CrcIsvalid: BOOL:=FALSE;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,CRC16!,Instance,10,0,21,4,,?DStartAddress?DNumberOfBytes?CCRC?CIsValid);
B(B_VARIN,,Array1,8,1,10,3,);
B(B_VARIN,,ARRAY1_BYTES,8,2,10,4,);
B(B_VAROUT,,Array1Crc,21,1,23,3,);
B(B_VAROUT,,CrcIsvalid,21,2,23,4,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
CRC16(StartAddress := Array1,
NumberOfBytes := ARRAY1_BYTES,
CRC => Array1Crc,
IsValid => CrcIsvalid);