[C#] Pin Count 수명 개발

Jaemoon Lee·2023년 1월 3일
0

[C샾]

목록 보기
9/13

번외&응용의 이야기이다.
PinCheckSW라는 프로그램의 신규 기능으로...
특정 보드의 수명을 측정하기 위해 도입하는 프로토콜의 일종을 적어보고자 한다. (허접한 알고리즘이라면 알고리즘...)
/////////////////////////////////////////////////////////////////////////////////////////////
※ 시퀀스는 Server Program, PinCheckSW, Client OS, 장비, 보드 라는 용어를 사용한다.
① Server Program은 장비와 연결되어있고, 보드는 PinCheckSW와 연결되어있다.
② SW 통신은 Server Program ↔ PinCheckSW ↔ Client OS로 구성된다.
/////////////////////////////////////////////////////////////////////////////////////////////
원하는 기능은 아주 단순하다.
1. 우리의 보드는 수명이 존재하고, 장비가 UP/DOWN을 n회 수행할 때마다 내부 펌웨어의 COUNT를 n만큼 증가시킨다.
2. 현재 COUNT를 체크하는 프로토콜 통신을 통해 COUNT 횟수를 Rcv 받은 뒤, PinCheckSW 인터페이스에 출력한다.
/////////////////////////////////////////////////////////////////////////////////////////////
PinCheckSW의 User Friendly를 위해 살을 덧붙혀 시나리오를 완성하자면
/////////////////////////////////////////////////////////////////////////////////////////////
1. PinCheckSW를 킬 때 COUNT 횟수 레지스트리에서 읽기, 메인 인터페이스에 출력 → 장비 Down(UP/DOWN의 두가지 State가 존재한다.) 상태이면 장비 펌웨어에 프로토콜 통신이 되지 않으므로.
(레지스트리 기본 값은 00000000 으로 설정.)
개발 항목: COUNT 레지스트리 설정하기
개발 항목: 프로그램 킬 때 함수 안에 ID 읽을 때 레지스트리 값도 읽도록.

  1. 서버에서 <CTACT,PINCHECK>가 들어오면(→ 이것이 장비가 UP/DOWN을 수행했는지 알려주는 프로토콜이다.) 들어오는대로 레지스트리 0000000X 만큼 증가시키기
    개발 항목①: client → CTACT,PINCHECK 프로토콜을 처리하는 구문 찾기
    개발 항목②: 레지스트리 숫자를 증가시키는 함수 만들기
    개발 항목③: 안에 데이터 넘겨주기 직전에 레지스트리 숫자 증가시키는 함수 넣기

3-1. Client OS에서 <CTACT,PINCOUNT> 들어오면 장비 해제 상태라는 뜻이므로
3-2. 레지스트리 <EEP,WRITE,UP,0000000X> 를 보드에 전송하고 (이때, 응답 [EEP,WRTIE,UP,00000001] 확인하고 해당값 메인 인터페이스에 출력.)
3-3. Client OS에 [CTACT,PINCOUNT,0000000X] Rcv
3-4. 마지막으로 보드에 <EEP,READ,UP> Send
3-5. [EEP,READ,UP,00000001000000010000000100000001] 받으면 뒤 8자리X4 비교해서 값 맞으면 메인 인터페이스에 출력
개발 항목 ①: PinCheck SW 내 server와 <CTACT,PINCOUNT> 프로토콜을 처리하는 구문 찾기
개발 항목②: <EEP,WRITE,UP,레지스트리숫자> 보드에 Send
개발 항목③: [EEP,WRTIE,UP,00000001] 응답 오는거 뒷자리 8자리만 잘라서 메인 인터페이스에 출력 → PinCheckSW 내 시리얼 통신 클래스에 조건문으로 작성
개발 항목③: Client OS에 [CTACT,PINCOUNT,레지스트리숫자] Rcv
개발 항목④: <EEP,READ,UP> 보드에 Send
개발 항목⑤: [EEP,READ,UP,00000001000000010000000100000001] 응답 뒷자리 8자리X4 비교 뒤 맞으면 8자리만 메인 인터페이스 출력 → 보드 통신 시리얼 클래스 안에 조건문으로 작성
/////////////////////////////////////////////////////////////////////////////////////////////
기능 개발 중 한가지 특이점으로, 내 프로그램의 레지스트리는 당연히 String으로 저장되는데, 이것을 "더하기" 위해서 int로 변환하고, 더하기 완료한 값을 다시 String으로 변환해줘야 했다.
이때 더한 int → String 완료한 값을 보드와 재통신 하기 위해 8자리로 변환도 진행해야됐는데, 아무튼 관련 코드는 아래 첨부한다.

//1. string을 int로 변환
int reg_num_Count;
Int32.TryParse(reg_str_Count, out reg_num_Count);

//2. string을 8자리로 늘려줌
string str_Merge = sum.ToString("D8");
profile
초보개발세발자

0개의 댓글