버전 V2.3.56 이상부터 이전 프로젝트를 컴파일하면 다음과 같은 문제가 발생할 수 있습니다. 컴파일러에 의해 이전 버전의 유지 영역에 있는 타이머가 버전 V2.3.56으로 시작하는 비유지 영역에 할당됩니다.
그 이유는 버전 V2.3.56부터 펑션블럭 인스턴스를 유지 또는 비유지 영역에 할당할 수 있기 때문입니다. 따라서 컴파일러는 펑션블럭 'TM_xxxs_FB'의 각 VAR_RETAIN 인스턴스에 대해 시스템 타이머를 타이머 메모리 영역(시스템 레지스터 5 - 1)에서 유지 영역의 시작(시스템 레지스터 6)으로 할당합니다. 클래스 VAR의 각 인스턴스에 대해 컴파일러는 시스템 타이머를 비유지 영역 끝(시스템 레지스터 6 - 1의 값)에서 최대 0까지 할당합니다.
아래 예에서 시스템 레지스터 5와 6이 설정되면 설명된 효과가 발생합니다. 변경된 펑션블럭 인스턴스의 클래스에 따라 시스템 레지스터 5 또는 6을 조정해야 합니다.
버전 V2.3.56 이전에서 타이머는 유지 영역에 있는 2999번에 할당되었습니다. 버전 V2.3.56부터 컴파일러는 타이머를 비유지 영역에 할당하려 합니다. 컴파일러는 2499번에 할당됩니다.
해결책: 프로그램 헤더의 클래스를 유지 영역에 할당된 인스턴스를 가지도록 변경합니다.