2017-12-08 19 views
0

메신저는 메인 프로젝트에 정의 된 전역 상수를 사용하는 일을하는 twincat 3 라이브러리를 구현하려고합니다. 그러한 상수 크기의 배열을 생성하고 저수실을 순환시키는 것과 같습니다. 그러나 나는 실패했고 나는 이것이 할 수 있는지 궁금해. 나는이 오류를 얻는다. "오류 4 테두리 '배열의 cPassedConstant'는 주 프로젝트를 빌드하려고 할 때 상수 값이 아니다." 이 오류는 라이브러리에 정의 된 배열에서 비롯됩니다.라이브러리에서 상수를 참조 할 때, twincat 3

나는 라이브러리에 같은 이름의 상수로 GVL을 만든 다음 "외부 구현"속성을 true로 설정하려고 시도했지만 도움이되지 않습니다.

여기 내 목표는 필터링 등으로 IO 관리 라이브러리를 만드는 것입니다. 그런 다음 주 프로젝트에 추가하고 "cDigitalIputsCount", "cAnalogInputCount"등과 같은 상수를 정의 할 수 있습니다.

+0

정말이 문제를 이해하지 못합니다. 상수가 라이브러리에 있어도 상수를 사용하는 배열은 가능합니다. 라이브러리에있는 내용과 다른 프로젝트에있는 내용을 명확히 구분하여 코드를 제공해 주실 수 있습니까? –

+0

나는 상수가 메인 프로젝트에서 정의되고 라이브러리에 의해 사용되도록 특별히하고 싶다. 예를 들어 10 개의 아날로그 I/O가있는 시스템을 만들고 싶습니다. –

+0

...그런 다음 주 프로젝트에 IO 라이브러리를 포함시키고 전역 상수를 정의합니다. CAINs : UINT : = 10; MAIN에서는 라이브러리에있는 PRG_IO POU를 호출 할 것입니다. PRG_IO에는 FOR 루프에서 실행될 FB_AnalogIn의 ARRAY [1..cainss]가 있습니다. 또한 라이브러리에는 F_GetAnalogIn 함수가있어 FB에 대한 필터링 된/크기 조정 된 AI 값을 가져옵니다. 몇 가지 상수를 정의하고 PRG_IO를 호출하여 라이브러리를 포함하는 것만으로 다양한 IO IO 시스템을 쉽게 만들 수 있다는 점을 지적하십시오. 너 이제 이해하니? –

답변

1

새로운 ARRAY [*] 기능을 사용할 수 있지만 여전히 제한적일 수 있습니다. 라이브러리에서 상수를 정의하는 것 외에 다른 방법은 없습니다.

라이브러리 개념은 다른 환경과 동일합니다. 라이브러리는 재사용 가능한 구성 요소를 제공합니다. 주요 프로젝트는 도서관에 달렸지 만 그 반대의 방식은 아닙니다. 따라서 귀하의 도서관은 그것이 사용되는 프로젝트에 관한 것을 알 수 없습니다.

TwinCat3의 혼란스러운 점은 프로그래밍 오류가있는 프로젝트를 성공적으로 구축 할 수 있다는 것입니다. TwinCat3 컴파일러는 호출되지 않는 한 프로젝트 내에서 깨어진 코드를 허용합니다. 따라서 라이브러리를 발송할 때는 항상 "모든 개체 확인"을 사용해야합니다.

0

아래의 링크 (및 Beckhoff/Infosys, DataTypes/Array 섹션)에서 설명한대로 가변 길이 ARRAY [*]를 사용하는 것이 좋습니다.

요점은 메인 프로그램에서 FB_AnalogIO의 ARRAY [1..cains]를 선언해야한다는 것입니다 (아날로그 라이브러리에서 FB_AnalogIO를 알고 있으며 일정한 크기로 선언 할 수 있음).

PRG_IO는 함수 또는 함수 블록으로 변경해야 정확한 크기를 모른 채 ARRAY [*]를 VAR_IN_OUT으로 사용할 수 있습니다. 당신은는 Beckhoff의 기능을 확인해야

https://stefanhenneken.wordpress.com/2016/09/27/iec-61131-3-arrays-with-variable-length/

+0

감사합니다. 나는 그런 특징을 알지 못했다. 그걸 들여다 봐. –

0

Parameter List을했다. 매개 변수 목록을 라이브러리 프로젝트에 추가하면 라이브러리를 사용하는 프로젝트에서 라이브러리 상수를 다시 정의 할 수 있습니다. 정의는 라이브러리 관리자에서 발생합니다. 는 Beckhoff의 사이트에서

이미지 : enter image description here

는 그게 그렇게한다고 생각합니다. 물론 다른 옵션은 ARRAY[*] 옵션을 사용하는 것입니다.이 옵션은 (PLC 프로그래밍 세계의 경우) 너무 좋습니다. 매개 변수 목록의 문제점은 그것이 프로젝트 전체의 재 정의라는 것입니다. ARRAY[*]을 사용하면 크기를 동적으로 변경할 수 있습니다.