2010-08-18 4 views
4

LabVIEW에서 VI 내에서 출력 터미널이 호출 VI에 연결되어 있는지 여부를 알 수 있습니까? 분명히 이것은 호출 VI에 달려 있지만 VI의 현재 호출에 대한 해답을 찾는 방법이있을 수 있습니다.LabVIEW VI에서 출력 터미널 중 하나가 배선되어 있는지 여부를 알 수 있습니까?

C에서는 출력 매개 변수를 저장할 위치를 가리키는 인수를 취하는 함수를 정의하는 것과 같지만 호출자가 해당 매개 변수에 관심이 없다면 NULL을 받아들입니다.

+0

이유를 묻고 싶습니다. 출력이 연결되지 않은 경우 SubVI에서 값 비싼 계산을 피하려고합니다. – eaolson

+0

물론 물어볼 수 있습니다. 그것이 VI를 디자인하는 것이 합리적인지 아닌지를 결정했기 때문에 그것이 사실상의 가설 이었지만 정확히 그 이유였습니다. – ptomato

답변

4

자연스럽게 이것을 수행 할 수는 없지만 데이터 값 참조를 사용하는 경우 해결 방법이 있습니다 (LV 2009 필요). 출력 인자에 NULL 포인터를주는 것은 같은 생각이다. 결과는 데이터 값 참조 (포인터)로 입력되어 표시되며 Not Subvel에 의해으로 확인됩니다. null의 경우, 아무것도 실시하지 않는다. 여기

는 SubVI로이다 (참 케이스는 물론 아무 것도하지 않는다) :

alt text

을 그리고 여기 VI 호출 할 수 있습니다 : 당신은 드래그 할 수 있도록

alt text

이미지 VI 조각은 다이어그램에 코드를 가져다 놓습니다.

+0

포인터를 전달하는 것과 비슷하지만 출력에 대해 실제로 알려주지는 않습니다. (오히려 영리하다.) –

1

일반적으로 아니오.

"스크립팅"기능을 사용하여 코드에 대한 정적 분석을 수행 할 수 있습니다. 이렇게하려면 호출 계층 구조를 가져와 와이어 참조를 추적해야합니다.

이 시험을 함께 수행하면 몇 가지 어려움이 있습니다. 동일한 다이어그램에있는 여러 개의 동일한 하위 vi는 구별하기 어렵습니다. 또한, 터미널 참조는 대부분 이름으로 접근 할 수있는 것으로 보이는데, 이는 다른 vi의 동일하게 명명 된 터미널과 충돌을 일으킬 수 있습니다.

NI는이 문제의 변형에 대해 약간의 작업을 수행했습니다. this을 확인하십시오.

1

Underflow처럼 기본 대답은 '아니오'입니다.

here을 사용하면 NI에서 제공하는 가장 공식적이고 자세한 답변을 얻을 수 있습니다.

비유를 확장하면 LV에 C가 수행하는 null 개념이 없다는 점을 제외하면 LV에서이를 수행 할 수 있습니다. 이 here의 예를 볼 수 있습니다.

제공된 언더 플로 링크의 코드는 EXE를 빌드 할 때 다이어그램이 기본적으로 제거되고 RTE가 여기에서 사용되는 일부 속성과 메서드를 지원하지 않기 때문에 실행 파일에서 작동하지 않습니다.


죄송합니다. 질문을 잘못 이해했습니다. 나는 당신이 의견을 묻고 있다고 생각했기 때문에 내가 제안한 아이디어는 적용되지 않는다. 내가 지적한 제한 사항이 적용됩니다.

왜이 작업을 수행 하시겠습니까? 또 다른 해결책이있을 수 있습니다.

+0

특정 응용 프로그램을 염두에 두지는 않겠지 만,'void get_size (int * height, int * width) '라는 서명이있는 C 함수를 생각해보십시오. 여기서'height' 또는'width'는'NULL' 일 수 있습니다. 하나의 차원 만 필요하지만 둘 다 필요하다면 두 코드를 별도로 계산하는 데 충분한 코드를 공유 할 수 있습니다. – ptomato

0

일반적으로 LV 컴파일러는 사용되지 않는 코드가 실행 파일에 내장되지 않도록 컴퓨터 코드를 최적화합니다.

이것은 실행 파일을 작성할 때 LV가 FP를 제거한 경우 수행 할 수 있지만 표시기의 값을 어떻게 사용하지 않을지 모르기 때문에 subVI에는 적용되지 않으며 가능하면 수행 할 수도 있습니다), SubVI에 적용 할 수있는 한 가지 방법이 있습니다. SubVI를 인라인하면 컴파일러가 출력이 사용되지 않는 것을 볼 수 있습니다. 서브 루틴에 우선 순위를 설정할 수도 있습니다. 서브 루틴도 마찬가지입니다.하지만 권장하지는 않습니다.

공식적으로 라이닝은 LV 2010에서만 사용할 수 있지만 이전 버전에서는 비공개 VI 속성에 액세스 할 수있는 방법이 있습니다. 그래도 추천하지는 않겠지 만, 2010 년에는이 영역에서 몇 가지 최적화가 이루어졌지만 이전 버전에서는 그렇지 않았을 가능성이 큽니다.

P. 일반적으로, 컴파일 과정의 세부 사항은 공개되지 않고 NI가 컴파일러를 수정하기 때문에 LV 버전마다 다릅니다. 전체 프로세스는 2010 년 LV에서 대대적 인 업그레이드가 예정되어 있으며 NI의 사이트에 일부 세부 사항이 포함 된 웹 캐스트가 있어야합니다.

2

나는이 잘못된 방향으로 가고 있다고 제안합니다. 컴파일러가 계산 자체를 피할만큼 똑똑하지 않은 경우이 VI의 두 가지 버전을 만드십시오. 값 비싼 계산을하는 사람, 그렇지 않은 사람. 그런 다음 이들 사이를 전환 할 수있는 다형성 VI를 만듭니다. 디자인 타임에 원하는 버전을 알고 있기 때문에 (출력 터미널을 연결했는지 여부를 알고 있기 때문에) 정확한 버전의 다형성 VI를 사용하십시오.

또는 값 비싼 계산 섹션에 대한 Case 문을 켜거나 끄는 변수를 전달하십시오.