엔지니어링 · 2024

건물 변위 계측 데이터 모니터링 프로그램

계측 DB에 쌓이는 변위 데이터로 건물의 기울기와 층간변형각을 판정하는 데스크톱 앱

계측 장비가 DB에 기록한 변위 데이터를 사람이 직접 꺼내 계산하던 작업을, 주기적으로 읽어 기울기와 층간변형각을 계산하고 기준에 따라 판정하는 상주형 프로그램으로 대체했습니다.

고객
조선대학교
분야
엔지니어링
계측점별 변위 표와 판정 결과 표, 기울기 기준선이 표시된 막대그래프가 함께 보이는 모니터링 화면

개요

건물에 설치된 계측 시스템은 각 계측점의 변위를 측정해 MS SQL Server 데이터베이스에 계속 기록합니다. 그러나 데이터베이스에 쌓이는 것은 계측점별 위치 변화량(dN, dE, dH)과 표고일 뿐이어서, 건물이 지금 어떤 상태인지를 알려면 이 값들을 꺼내 층과 열 단위로 묶고 구조 안전성 지표로 환산하는 과정이 따로 필요했습니다.

이 프로그램은 그 과정을 담당하는 Windows 데스크톱 앱입니다. 데이터베이스에 접속해 가장 최근 계측 사이클을 읽고, 계측점 이름에서 동·층·열을 해석해 기울기와 층간변형각을 계산한 뒤, 기준에 따라 등급을 매겨 표와 그래프로 보여 줍니다. 조선대학교 연구팀이 건물 계측 결과를 상시 확인하는 용도로 사용합니다.

창을 닫으면 트레이로 내려가 계속 동작하므로, 계측이 진행되는 동안 켜 두고 쓰는 상주형 프로그램입니다.

과제

계측 데이터베이스는 측정 결과를 저장하는 데 초점이 맞춰져 있어, 구조 안전성 판단에 필요한 형태와는 거리가 있었습니다.

  • 계측점의 변위와 표고가 서로 다른 세 개의 테이블에 나뉘어 있고, 세 테이블의 기록 시점이 동기화되어 있지 않습니다.
  • 한 번의 측정 사이클을 구분하는 기준이 테이블마다 다릅니다. 변위 테이블은 같은 사이클이 동일한 EventTime을 갖지만, 계측점 정보 테이블에는 사이클 구분이 없습니다.
  • 계측점의 위치는 이름 문자열에만 들어 있어, 어느 동 몇 층 몇 열인지 알려면 이름을 해석해야 합니다.
  • 기울기와 층간변형각은 한 계측점만으로는 구할 수 없고, 같은 동·열에서 아래층 또는 최저층 계측점과 짝을 지어야 계산됩니다.

결과적으로 데이터를 꺼내 엑셀로 정리하고 계산식을 적용하는 수작업이 매번 반복되었고, 그 사이의 변화는 사람이 확인하는 시점에만 드러났습니다.

해결 방법

데이터베이스 읽기부터 판정, 표시, 알림까지를 하나의 프로그램으로 묶었습니다.

  • 첫 화면에서 데이터베이스 이름과 세 테이블 이름을 입력해 접속합니다. 접속 시 테이블과 필수 컬럼의 존재를 먼저 검사하고, 없으면 무엇이 빠졌는지 알려 줍니다. 접속 정보는 저장되어 다음 실행 때 그대로 채워집니다.
  • 접속 후에는 주기적으로 최신 계측 사이클을 읽습니다. 직전에 읽은 시각과 같으면 화면을 갱신하지 않아, 새 데이터가 들어왔을 때만 반응합니다.
  • 계측점 이름을 동·층·열로 해석하고, 같은 동과 열에서 바로 아래 계측점을 찾아 층간변형각을, 최상층과 최저층을 짝지어 기울기를 계산합니다.
  • 계산된 값은 기준에 따라 등급으로 환산합니다. 층간변형각은 양호·보통·위험, 기울기는 우수·양호·보통·미흡·불량으로 나눕니다. 위험으로 판정된 행은 붉게 표시하고, 위험이나 주의에 해당하는 값이 나오면 알림 창을 띄웁니다.
  • 동과 기준을 골라 막대그래프로 볼 수 있습니다. 그래프에는 판정 기준선이 함께 그려져, 각 열의 값이 어느 구간에 있는지 바로 보입니다.
  • 표의 내용은 선택해 복사할 수 있고, 각 사이클의 계산 결과는 탭으로 구분된 텍스트 파일로 저장되어 이후에 다시 열어 볼 수 있습니다.
데이터베이스와 테이블 이름을 입력하는 접속 화면
접속 화면

시스템 구조

구성

  • reader: 데이터베이스 접속과 조회를 담당합니다. 최신 사이클을 읽어 계측점별로 정리된 구조를 돌려줍니다.
  • ui: 접속 화면과 모니터링 화면, 트레이 아이콘을 구성하고, 읽어 온 데이터를 후처리해 표와 그래프에 반영합니다.
  • config: 접속 정보를 JSON으로 저장하고, 사이클별 계산 결과를 텍스트 파일로 남깁니다.
  • log: 실행과 오류 기록을 회전 로그 파일에 남깁니다.

데이터 흐름

  • 변위 테이블에서 가장 최근 기록의 EventTime을 찾아, 같은 EventTime을 갖는 모든 계측점의 dN, dE, dH를 읽습니다.
  • 계측점 정보 테이블에서 계측점 번호와 이름의 대응을, 기준점 이력 테이블에서 계측점별 표고를 읽습니다.
  • 세 결과를 계측점 번호로 합치고, 이름을 동·층·열로 해석해 동과 층, 열 순서로 정렬합니다.
  • 이름 형식이 맞지 않거나 변위 또는 표고가 비어 있는 계측점은 계산에서 제외합니다.
  • 정렬된 계측점을 순회하며 층간변형각과 기울기를 계산하고, 기준과 비교해 등급을 매깁니다.
기울기 판정 결과와 기준선이 표시된 막대그래프
모니터링 화면

구현

계측 데이터베이스를 그대로 쓰면서 생기는 문제들을 읽기 단계에서 흡수했습니다.

  • 사이클 구분이 없는 테이블은 변위 테이블에서 확인한 계측점 수를 기준으로 필요한 만큼만 최신순으로 조회합니다. 시간 동기화가 되어 있지 않은 기준점 이력 테이블은 더 넓게 조회한 뒤, 계측점별로 가장 최근 값만 남깁니다.
  • 데이터베이스에서 읽은 한글 문자열이 깨져 들어오는 경우가 있어, 문자열 값은 읽는 시점에 인코딩을 되돌립니다.
  • 기록 시각은 화면에 표시하기 전에 현지 시각으로 보정합니다.
  • 데이터베이스 조회는 별도 스레드에서 수행해, 조회가 진행되는 동안에도 화면 조작이 막히지 않도록 했습니다. 화면 갱신은 한 번에 묶어 처리합니다.
  • 계산 중 아래층 계측점이 없거나 최상층이 아닌 경우처럼 값을 구할 수 없는 상황은 빈 값으로 표시하고, 조회나 후처리에서 발생한 오류는 메시지로 안내한 뒤 접속 화면으로 되돌립니다.
호별 층간변형각을 층 단위로 비교하는 막대그래프
층간변형각 그래프

결과

계측 결과를 확인하기 위해 데이터베이스에서 값을 꺼내 수작업으로 정리하던 과정이 없어졌습니다. 프로그램을 켜 두면 새 계측 사이클이 들어올 때마다 동·층·열별 판정이 갱신되고, 기준을 넘는 값이 나오면 화면에서 바로 드러납니다.

판정 기준이 프로그램 안에 고정되어 있어, 누가 확인하든 같은 식으로 계산된 결과를 봅니다. 사이클마다 계산 결과가 파일로 남기 때문에 특정 시점의 상태를 나중에 다시 확인할 수 있습니다.

사용 기술

  • Python
  • wxPython
  • matplotlib
  • NumPy
  • Microsoft SQL Server
  • pymssql

화면

진행하려는 프로젝트가 있으신가요?

해결하려는 문제와 지금 상황을 알려 주시면, 어떤 방식이 맞을지 함께 검토합니다.

프로젝트 문의하기