SW/Python

파이썬 씨리얼 통신 / 챠트 그리기 Serial Chart / RS-232 UART 통신 / Python Serial

또난 2021. 9. 10. 17:21

시간 날때마다 Pyside 로 한번 만들어본 시리얼 통신 프로그램 

파이썬은 라이브러리가 잘 되어 있어 개발이 쉽고 편하다.

 

기본 시리얼 통신은 아래 소스로 참고했고

https://github.com/y252328/ATerm

 

GitHub - y252328/ATerm: A simple serial terminal implemented in Python

A simple serial terminal implemented in Python. Contribute to y252328/ATerm development by creating an account on GitHub.

github.com

챠트는 파이썬 유명한 matplot 사용함.

 

기본 화면

1번에 챠트 파싱할 조건 추가.

첫 글자는 파싱 하기위한 영문자 이후 숫자로 되어야 하고 , 로 구분함.

#chart, 1, 2, 3, 4, 5 

최대 10개 까지만 표시됨... 그 이상은 챠트 보기 어려워서..

 

파싱 첫 글자 #ch 추가 하면 아래 데이터가 별도로 추가되고, 챠트 버튼 누르면 하기 처럼 표시됨.

save 버튼 누르면 챠트 CSV 파일로 저장됨.

나머지 버튼은 matplot에서 제공하는 기능이고, 그냥 쓰다보면 알게 됨.

 

200ms 주기까지는 실시간으로 표시되나 그 이하는 챠트 그리는 기본 속도가 있어 수신 완료 후 표시됨.   

 

한개 exe 파일로 만들어서 초기 실행시 약간 지연 있음.

기본적인 설정들은 setting.yaml로 저장됨

 

Ver 0.0.4 

 - 키 up/ down 으로 송신 히스토리(최대10) 변경

 - 챠트 사이즈 800 -> 900 변경

 - 미사용 모듈 삭제.

 

Ver 0.0.5

 - 수신 안되는 부분 수정.

 

Ver 0.0.6.1

- 수신 null 처리추가.

- UI 사이즈 수정.

 

Ver 0.0.6.2

- 수신 시간 체크 박스 추가.

- UI 사이즈 수정.

- 아스키문자가 아닌 문자(hex) 예외 처리 추가.

Ver 0.0.6.3
 - 기본 실행 사이즈 수정. 포트 사이즈 고정
 - 전송 데이터 저장 갯수 20로 수정.
 
Ver 0.0.6.4 
   - 수신방식 수정, 설정파일에 수신 타이머(rcvTimer) 추가.
   - 기본 bps 추가.
   - 아스키 문자 범위 아닌경우, □ 표시  
 
Ver 0.0.6.5
   - 수신 타이밍 버그 수정.  기본 200 적용. (setting.yaml -> rcvTimer: 200)
 
Ver 0.0.6.6
   - CPU 부하 문제 수정.
 
Ver 0.0.6.7
   - 수신 시간차이 표시
   - 수신 타이밍 기본 50ms 적용.
 
Ver 0.0.6.9
  - 수신 시간 표시 수정. 분리한 개행문자 추가.
  - 파싱 데이터 색상 추가.
 
Ver 0.0.7.0
  - 수신데이터 중 2개 이상만 개행문자 추가
 
Ver 0.0.8.0
  - 텍스트 정렬 체크 박스 추가.
 
Ver 0.0.8.1
 - 챠트 X 축 자동 범위로 수정, 마지막 챠트 표시안되는 부분 수정.
 
 
버전 변경될때는 항상 기존 폴더의 setting.yaml 삭제 후 실행.
 
(바이러스 경고는 나올때있고 안올때있고 뭐지..??)

프로그램 다운 ver 0.0.8.1

 

Ver 0.0.8.2 (23.04.02)

 - 챠트 업데이트 시간 설정 추가... 수신시간 20ms, 챠트 갱신 시간 30 ms

-  setting.yaml 열어 해당값 편집 하고 다시 실행

chartUpdateTimer: 30   rcvTimer: 20

수신 데이터 50ms 주기는 실시간? 으로 표시되는 것 같다..

챠트 그리고 있는 중에 데이터 수신하면 수신 시간이 좀 밀려서 찍힌다..

Matplotlib 특성상 챠트 삭제 후 다시 그려야 해서 챠트 누적 데이터가 많을 수록 그리는 시간이 점점 늘어남

고정된 데이터 수만 그리는 방법도 있긴하는데 이건 좀 목적에 맞지 않는 것 같음..

https://learn.sparkfun.com/tutorials/graph-sensor-data-with-python-and-matplotlib/speeding-up-the-plot-animation

 

Graph Sensor Data with Python and Matplotlib - SparkFun Learn

Contributors: Shawn Hymel Favorited Favorite 14 Speeding Up the Plot Animation Clearing a graph and redrawing everything can be a time-consuming process (at least in terms of computer time). As a result, our Raspberry Pi can struggle keeping up with more a

learn.sparkfun.com

 프로그램 다운 ver 0.0.8.2

# 최신 파이썬 3.11 은 pyside2 가 설치 안된다..pyside6으로 설치는 되는데 UI 호환이 안되서 실행 안됨. ㅎ

 => 3.10 으로 설치해야 함

 

Ver 0.0.8.4 (23.04.16)

 1) 파이썬 3.11.4 에 pyside6으로 적용.

 2) 장시간 수신 데이터가 많아지면, 메모리가 증가하면서 멈추는 증상(응답없음)이 있다.

   - 파이썬 자체가 메모리 소모가 많음...

   - 기본 실행시만 70MB 넘고 수신데이터 추가 될수록 메모리 증가됨.

   

 3) 디버깅하려고 했는데 발생빈도도 낮고 시간이 없어서 수신데이터 파일 저장 후 삭제 처리 추가함.

   - setting.yaml 파일에 해당 기능 추가 

autoClearCnt: 1000000    => 수신갯수 1000000 넘을 경우 수신데이터 삭제(clear)..상황에 맞게 갯수 수정해서 적용.

 

clear 버튼 동작시 수신데이터 파일 저장 여부
autoSaveFt: 0                 => 하단 필터 데이터 저장 여부 (0은 저장안함)
autoSaveLog: 1               => 상단 전체 데이터 저장 여부 (1은 저장)

 

 

 프로그램 다운 ver 0.0.8.4