PLCnext 데이터로거 데이터를 CSV로 내보내기: 단계별 가이드
산업 애플리케이션에서 값을 로깅하는 것은 많은 고객의 주요 특징이며, 일부 애플리케이션에서는 변수 수가 매우 많을 수 있으므로 이 데이터 로깅을 네이티브하고 쉽게 구성하는 방법이 필요합니다.
아래에서는 네이티브 데이터로깅 서비스 컴포넌트를 살펴보고 이 서비스에서 CSV 파일을 생성하는 방법을 알아보겠습니다.
데이터로거 서비스 컴포넌트에 대한 자세한 정보는 다음 링크에서 확인할 수 있습니다:
- 데이터로거 구성 및 OPC UA 기록 액세스로 사용하기
- 실시간 데이터로거 - PLCnext Info Center
데이터로깅 세션을 구성하면 모든 변수의 로그된 값이 포함된 *.db 파일이 생성됩니다. 이 *.db 파일은 데이터베이스 파일이지만, Sqlite3나 DB Browser 같은 도구 없이는 값을 탐색할 수 없습니다.
많은 고객이 *.csv 파일에 이미 익숙하므로 이 데이터베이스를 CSV 파일로 내보내는 방법을 살펴보겠습니다. 모든 PLCnext 컨트롤러에 있는 Sqlite3 도구가 이 내보내기에 필요한 모든 도구를 제공합니다.
데이터베이스가 생성될 때 원하는 이름을 설정할 수 있지만, 값을 포함하는 데이터베이스의 테이블 이름은 특정 이름으로 설정할 수 없습니다. 다행히 Sqlite3 도구는 "Sqlite3 <데이터베이스명> .tables" 명령어로 데이터베이스에 있는 테이블을 표시해 줍니다. 모든 특정 명령어는 Sqlite3 도움말 페이지나 이 페이지: Sqlite3에서 확인할 수 있습니다.
테이블 이름을 알면 이 테이블에서 모든 데이터를 선택하여 CSV 파일로 내보낼 수 있습니다.
프로세스를 조금 더 쉽게 하기 위해 데이터베이스에서 내보내기 위한 두 가지 스크립트를 링크해 드립니다. 물론 필요에 맞게 스크립트를 수정할 수 있습니다!
안타깝게도 *.sh 파일을 업로드할 수 없어 아래에 두 파일의 내용을 적어둡니다.
첫 번째, ISO8601 타임스탬프 형식용 파일:
ExportSQL2CSV_ISO.sh
#!/bin/bash
name_of_database="${1:?Missing database}"
name_of_database_no_ext=${name_of_database::-3}
# 테이블 이름 가져오기
name_of_table=$(sqlite3 $name_of_database .ta)
# 첫 번째 항목의 날짜시간을 가져와 출력 파일 이름에 사용
DateTime=$(sqlite3 $name_of_database "SELECT strftime('%Y_%m_%d_%H_%M_%S',Timestamp) from $name_of_table limit 1;")
# 파일 이름 생성
output_filename=${name_of_database_no_ext}_${DateTime}.csv
# CSV 파일로 내보내기
sqlite3 -header -csv -separator ";" $name_of_database "SELECT * from $name_of_table;"\
> $output_filename
두 번째, RAW 타임스탬프 형식용 파일:
ExportSQL2CSV_RAW.sh
#!/bin/bash
name_of_database="${1:?Missing database}"
name_of_database_no_ext=${name_of_database::-3}
# 테이블 이름 가져오기
name_of_table=$(sqlite3 $name_of_database .ta)
# 첫 번째 항목의 날짜시간을 가져와 출력 파일 이름에 사용 (RAW 타임스탬프 변환)
DateTime=$(sqlite3 $name_of_database "SELECT strftime('%Y_%m_%d_%H_%M_%S',(Timestamp - 4611686018427387904)/10000000 - 62135596800,'unixepoch') from $name_of_table limit 1;")
# 파일 이름 생성
output_filename=${name_of_database_no_ext}_${DateTime}.csv
# CSV 파일로 내보내기 (타임스탬프 변환 포함)
sqlite3 -header -csv -separator ";" $name_of_database "SELECT \
strftime('%Y-%m-%d %H:%M:%f',(Timestamp - 4611686018427387904)/10000000 - 62135596800,'unixepoch') AS Time,\
* from $name_of_table;"\
> $output_filename
이 파일들은 스크립트이므로 파일에 실행 플래그를 추가하는 것을 잊지 마세요:
chmod +x ExportSQL2CSV_*.sh
그런 다음 스크립트를 호출할 수 있습니다. 스크립트 호출 예시는 다음과 같습니다:
./ExportSQL2CSV_ISO.sh <데이터베이스경로>
스크립트가 완료되면 데이터베이스 이름과 데이터베이스의 첫 번째 항목 날짜시간을 포함한 이름으로 CSV 파일을 찾을 수 있습니다:
이제 네이티브 데이터로거 서비스 컴포넌트를 사용하여 기록한 모든 데이터가 포함된 CSV 파일을 갖게 되었습니다.
cron 도구를 사용하여 이 파일을 매시간 또는 매일 자동으로 생성하도록 더 발전시킬 수도 있습니다.
질문이나 의견이 있으시면 언제든 연락 주세요!