From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

취소
다음에 대한 결과 표시 
다음에 대한 검색 
다음을 의미합니까? 

구분된 스프레드시트 파일에 쓰기 함수 에러 문의

해결 완료!
솔루션으로 이동

TCP를 통해 데이터를 받고 그 데이터를 스프레드시트열에 각 행과 열에 저장하고 싶습니다.

그래서 구분된 스프레드시트 파일에 쓰기 함수를 사용하였습니다.

단독vi에서 테스트 해본결과 문제가 발생하지 않았지만

프로젝트에 넣어 exe파일로 실행할 경우에만 사진처럼 에러가 발생하며 동작하지않습니다.

무엇이 문제인가요?

아니면 다른 방식을 알려주시면 감사합니다.

각 행과 열에 각각 저장하고싶습니다.

감사합니다.

0 포인트
1/9 메시지
2,420 조회수

그거 이상하네요. 내용만 봐서는 원인이 뭔지 모르겠네요. 

 

프로젝트 파일 압축해서 올려주시면 제가 한번 해볼게요. 

0 포인트
2/9 메시지
2,412 조회수

프로젝트 파일을 통해 내용을 보시면 되겠습니다.

subVITCP.vi 에 구분된 스프레드시트 파일에 쓰기 함수가 존재합니다.

감사합니다.

0 포인트
3/9 메시지
2,407 조회수
솔루션
주제 작성자 HoYa_rese이(가) 승인함

올려주신 코드를 보았습니다. 에러가 나는 이유는 vi를 런타임으로 호출하는 방식을 썼기 때문입니다. 즉 VI를 subVI 형태로 호출하는 것이 아니라 참조형태로 호출하고 있습니다. 

이렇게 되면 VI가 의존하는 라이브러리(여기서는 스프레드 시트 쓰기에 해당)가 exe 파일에 제대로 포함되지 못합니다. 이럴 경우 두 가지 방법이 있습니다.

 

1. 참조 형태가 아니라 subVI로써 VI를 호출합니다. (VI 참조 열기 사용 하지 않음) 

2. 의존하는 라이브러리를 강제로 main.vi에 포함시키는 겁니다. 첨부파일의 스크린샷처럼 빌드파일에 포함은 시키되 실행은 되지 않게 합니다.

 

1 번의 해결 방법에 가장 바람직하며 급할 경우 2번을 사용하셔도 무방합니다. 

4/9 메시지
2,404 조회수

추가로 발견한 해결책: 참조로 여는 VI를 모두 시작 VI로 두고 빌드하면 쉽게 문제가 해결됩니다. 위의 2번 보다 이 방법을 사용하세요. 

0 포인트
5/9 메시지
2,398 조회수

전부 시작vi로 한다는 것이 exe파일을 빌드할때 사진부분을 말하는 것인가요?

변경 후 실행해보니 한번에 모든 vi가 다 켜지닙니다..ㅠㅠ

 

0 포인트
6/9 메시지
2,394 조회수

그럼 위의 2번 방법으로 해 보세요.

0 포인트
7/9 메시지
2,390 조회수

2번 방법에 대하여 상세하게 설명좀 부탁드려도될까요?

0 포인트
8/9 메시지
2,377 조회수

문제가 되는 "스프레드시트 파일에 쓰기" 함수는 랩뷰 내부 라이브러리 함수입니다. exe 파일을 빌드할 때 이것이 포함이 되어야 제대로 프로그램 실행이 됩니다. 

일반적으로 랩뷰에서 exe 파일을 만들 때 이러한 의존성을 알아서 포함시켜줍니다. 예를 들어 다음과 같이 호출한다고 합시다. 

main.vi --> A.vi --> B.vi (랩뷰내부함수)

모두 subVI 형태로 호출하는 경우, exe 파일을 만들 때 랩뷰는 main.vi가 최종적으로 B.vi를 필요로 한다는 것을 알아 자동적으로 B.vi를 exe에 포함시킵니다. (A.vi의 실행버튼이 깨지면 main.vi의 실행버튼도 깨짐)

만일 위 호출방식을 참조형태로 하게 되면 main.vi는 A.vi 의 내용을 볼수가 없어 A.vi가 B.vi를 호출하는지 모릅니다. 따라서 B.vi를 자동적으로 포함시키지 못합니다. (A.vi가 실행버튼이 깨진 상태이어도 main.vi는 깨지지 않음)

이러한 이유때문에 .exe 실행 시 B.vi를 찾을 수 없다고 하는 겁니다. 

이를 해결하기 위해 B.vi를 main.vi에 강제적으로 포함시키는 겁니다. 이렇게하면 exe를 만들때 B.vi가 포함이 됩니다. 물론 실질직으로 A.vi가 B.vi를 호출하지만 어쨌든 B.vi가 exe 파일에 포함되어 있으므로 에러는 나지 않습니다. 

 

 

0 포인트
9/9 메시지
2,372 조회수