퇴근5분전

뭐라고 하는지는 잘 모르겠다.. 

아주 예전에... 아이폰 ui에 처음 봤던 거였고...

어쨌든 이번 플젝에서 현장 설비 터치모니터에서 가상키보드로 날짜 및 시간을 입력을 하고 있기에...

그땐 내가 POP개발자는 아니었으니... 개발자에게 현장 작업자들이 불편해 보인다. 정도 했지만.. 

그후로 6개월 정도 지났는데... 가보니 그대로 더라.. 

 이건 그때 만들었었는데... 이번에 바꿔줄까? 고민중이다.  

입력하는게 익숙해진 작업자들에게 이걸 적용해주면 편할까?

'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

Popup?  (0) 2025.03.16
[일자 & 시간] 컨트롤...  (0) 2024.08.04
뭐 좀 만들어볼까하다가....  (0) 2024.08.03
Flow Condition] 조건 오브젝트 뷰 만들기?  (0) 2018.04.29
바코드 폰트 사용하기...  (0) 2018.04.27

 이걸 뭐라 해야 하지... 

 

일단... 예전에 코드프로젝트에서 찾아서 쓰던 

http://www.codeproject.com/Articles/17502/Simple-Popup-Control

 

Simple Popup Control

How to create a custom pop-up control in C#.

www.codeproject.com

 

개인용 토이플젝 할때 쓰던거다... 

팝업을 띄워서 에디팅이 끝나거나 다른 부분들을 클릭하면 자동으로 닫히는 그런 팝업 컨트롤... 

콤보의 드롭박스 처럼... 필요할때 작게 나왔다 사라지는 그런거... 

라이센스가 LGPL 3이라... 현재 돈받고 하는 플젝에선 좀 찜찜해서..? 

 

 그래서 찾다보니...  원래는 C1ComponentOne에서 지원되는게 있나 뒤져보던 중에... 발견!

어제... 찾은건데... 문서가 다시 검색이 안되네. ㅠㅠ;

 

ToolStripDropDown popup = new ToolStripDropDown();

...

NumberPad pad = new NumberPad( ); // 내가 만든 키패드... 

 

ToolStripControlHost host = new ToolStripControlHost(  pad ) ;

popup.Closed += (ss, ee) => {

        pad?.Dispose();

        popup = null;

};

 

popup.Items.Add( host );

popup.Show( 대상 컨트롤, 대상컨트롤.Location );

 

 

이렇게 하면 팝업이 된다... 

 

찾았다.  👍

https://www.codeproject.com/Articles/17502/Simple-Popup-Control

 

## 테스트용으로... 키패드 띄움.. 

 

 

음.. 내일 다시 작년에 했던 PLC 모니터링 하는 프로젝트를 다시 나가게 되었다.  DAT...

전보다 빡신거 아니라니까... 쉬엄 쉬엄 하지뭐... 

 나이가 이제 40대 후반끝물이라 그런가. 프로젝트도 개발로는 잘 안들어오네... 

게다가 C#언어를 기본으로 하는 개발자라 더욱더 어려워지는가 보다.

크몽을 보면 윈폼 프로젝트가 보이긴 하던데... 크몽을 해볼까낭? 

 

 작년 추석전 프로젝트가 너무 힘들어서 연장이고 뭐고 도망치듯 종료하고 나왔는데, 

분가을 하게 되고, 또 계엄?이란걸 거치고... 지금까지... 거의 집돌이로 살았다. 

 

 처음엔 AI를 좀 볼까 싶었는데... 보면 볼 수록 어렵기도 하고... 

대부분 ai의 API로 뭔가 하는 것만 떠오르고... 

 

 정작 하고 싶은건 내 PC에 AI모듈이 돌아서 코딩이나.. 문서 검색 또는 생성 이런거... 

내 자료를 이용해서 뭔가 학습시키고 조수처럼 부려먹을 수 없나 싶었는데... 

 영어의 벽!!! 그리고 귀차니즘? 쩝!  라마나 알파카로 뭔가 되는 것 같긴한데... 

공부를 거의 안해서 어떻게 되는건지는 모르겠다. 

 

 계엄! 

 써겨리의 도발로 계엄(12.3)을 선포한날 밤샜다. 뉴스를 따라가면서 어떻게 되는건가 싶어서 보는데...

참 친위 쿠테타 정리가 정말 쉽지 않구나... 꼭 제대로 처벌하고 다시는 국민들을 향해 총겨누는 일이 없기를...

 

사이비개독...

 이건 정말 '테러리스트' 로 규정하고 잡아 넣어야 하는거 아닌가? 이슬람 IS같은 놈들이 폭탄테러 하는 거랑

뭐가 다른가? 사이비 기독교단체가 정신 나가서 하는 짓들을 그냥 극우로 치부하고 마는건가? 

 내가 보기엔 '테러' 인데... 그럼 '테러리스트'로 IS 처럼 봐야 하는게 맞다고 생각하는데.. 

대구에 이슬람 사원 생기는 것도 불안했는데... 우리나라에 사이비 개독들로 테러단체가 이미 자리 잡고 있었어...

 

아무쪼록... 

오늘도 내일도 무사히...

'먹사니즘' '잘사니즘'  이재명 대표가 설계하는 세상이 되면 좋겠다. 

국가의 성장으로 세금 잘 거둬서 모두 잘 사는 나라가 되었으면 좋겠다. 

 

추가로 꼭 바라는 점은 조선 폐간시키기, 내란의 힘 정당해산! 

마지막으로 친일 매국노들 국가보안법으로 간첩으로 규정하기.

 

 

 

 

 늦은(?) 나이에 분가를 하게 되었다. 

 

프로젝트 끝나고 쉬는 중에 부모님의 분가요청으로... 나오게 되었다. 

 

그나마 본가에서 가까운 곳 오피스텔을 매매해서 자리를 잡았다. 

 

잔금 마치고 10일정도는 짐 실어나르면서 청소를 하였다. 

 

나름 짐 없이 산다했는데도 많이 들어 날렀다. 

 

벽한쪽에 TV놓는 자리처럼 휑한곳이 있길래... 컴퓨터를 놓기위해 

'고릴라랙'을 짜서 올려놓고 모니터 암을 달고 컴퓨터를 모니터 뒤에 두었다. 

보조 책상(ONA-804)으로 키보드 트레이( APL-KT65 )를 부착했다. 

 

# 컴퓨터 

 

 동향에 가까운 남동향이라 해가 아침부터 밝게 들어오고, 앞이 탁 트여서 답답하지도 않다. 

 

역앞이라 밤에 빛이 많이 들어와서 암막커튼도 했다.

 

층간소음은 그럭저럭... 조용한편인데, 발소리가 쿵쾅쿵쾅 들릴때가 있는데... 그래도 일찍 자는지 밤엔 조용하다. 

 

 

이제 혼자 생활하면서 어떻게 지내야 하는지 하나 하나 체크해보고 있는데... 

1. 식사시간? 밥을 차려서 먹고 치우고 하는데 대략 30~40분 가량 소요가 된다. 

   그래서 아침을 어떻게 먹을지?... 여러가지 시도중...

2. 세번정도 세탁기 돌려봤는데... 세탁기가 작아서 자주 돌려야 할 듯...

3. 음식쓰레기?... 

    아예 많이 나오면 자주 버리면 될 듯 하지만, 과일깍아먹으니 버리기도 애매하고 봉다리에 넣어놓았더니 곰팡이 피면서 썩더라... 3l짜리도 다 안찬거 버릴수밖에... 

4. 혼자 있는 시간에 익숙해져야 할듯 하다. 

   TV를 보는게 아니고... 본가에서는 귀로 듣기만 했는데... 너무 조용하니 이상하긴 하다.

 막 끝난 프로젝트에서 {설비 ---- mes서버}간에 데이타 통신을 ActiveMQ라는 것으로 구현이 되어 있었다.

메세지 전문을 만들면서 '보내는건 되어도 결과를 받을 순 없다.' 라는 답변을 받았다.

그런게 어딧냐고... 기간계 통신이 일방적으로 주기만 하는게 어디있느냐... 주고 받고 해야지... 라며 얘기를 했었다.

 

 프로젝트 끝나고 집에서 ActiveMQ관련해서 찾아보다 보니 RabbitMQ나 Kafka 같은 것들까지 나오길래...

구글링을 하면서 이게 뭔가 찾아봤더니 MSMQ같은 큐였다. 

 내 기억엔 MSMQ에서 양방향으로 비동기 통신을 했었던 걸로 기억하는데? 

이런것들은 한쪽에서 보내는 것만 된다고?

 

 몇 일을 고민도해보고 찾아보고 샘플도 만들어보고 테스트도 해보니... 내가 알던 방식이 맞다.

큐라는걸 사용할 뿐이지.. 주고 받고 해야지... 

기본 메세지 전송은 [프로듀서]라는게 [큐]에 등록(Send)하면 [컨슈머]가 꺼내서(Listner) 처리를 한다.

 

 Q. 서버.컨슈머가 메세지 처리 후 결과를 클라이언트에 돌려주는 방법이 있나?

 전 프로젝트 소스에서도 클라이언트.프로듀서가 전송 후 결과를 받는 것으로 처리 되어 있는 걸로 봐서는... 있지만?

서버쪽 소스는 내가 볼수 없었기에... 추측만 해볼 수 밖에...

 계기 ::

  설비에서 부자재 사용을 알릴때 서버에 요청하면 사용승인난 대기하던 부자재를 사용처리하면서 

 등록 ID를 설비에 돌려줘야 하는데... 이게 안되는게 아니고 안하는거였다? 왜? 귀찮아서 였을까??

 

간단하게 두가지 방법이 있었다. 

첫번째는 임시 큐를 사용하는 방법.

클라이언트.컨슈머 생성시 tempQueueDestination = session.CreateTemporaryQueue() 로 임시큐 사용

요청메세지에 NMSReplyTo = tempQueueDestination 을 할당하여 .Send

서버.컨슈머가 메세지를 수신하고 처리시 수신메세지.NMSReplyTo를 이용해서 서버.Producer를 만들고 Send하면

클라이언트.컨슈머에서 Receive 할 수 있다. - 테스트 결과 잘 된다.

mporaryQueue()

 

두번째 방법은 응답 컨슈머 생성시 selector를 지정

1. 클라이언트.컨슈머 생성시 selector를 res=producerID를 지정

2. 클라이언트.프로듀서의 요청메세지.Properties["req"] = null; 을 지정

3. 클라이언트.프로듀서의 요청메세지.Properties["pid"] = producerID; 을 지정

4. Send

 

1. 서버.컨슈머 생성시 selector를 req is null을 지정한다. 

2. 서버.컨슈머의 수신된 메세지 처리시

   서버.프로듀서의 응답메세지.Properties["res"] = 수신된메세지. Properties["pid"] 지정

3. Send

※ res, req를 등록하는 이유는 하나의 큐 JSFW.Queue에 등록하게되므로

자기가 올린 메세지를 자기가 수신하지 않도록 구분해주는 역할로 selector를 지정한다.

 

 클라이언트 프로그램을 여러개 띄워서 동시간에 동시 요청 가능하도록 만들고 테스트해보니 

원하던 동작을 잘 했다. ( 아래는 두개만 찍었지만.. 네개정도 띄우고 10초단위로 확인 해봤다. )

 

결론 : 잘 된다. 

 

예외 : 내 샘플 코드가 문제인지? 

서버.Consumer 프로그램을 수신을 멈춰놓고 긴시간 대기하면

클라이언트.프로듀서 프로그램은 10초마다 등록을 한다. 동기로 구현해놔서 Receive가 안되어 지정시간 동안 대기...

나중에 서버.Consumer 프로그램에서 다시 수신시작을 했을때 한번에 밀려들어오는데... 

 

클라이언트.프로듀서 프로그램에서 Thread로 10초마다 Send걸어놔서 그런지.. 

껐다 켰다 하면 같은 데이타로 Send가 여러번 일어나는 현상이??? 이건 샘플이 잘못된걸꺼야... _)_;;; 

1. ActiveMQ 

          -프로듀서:컨슈머=1:1, 1:n 

          -토픽, 큐

 

2. MSMQ (netMSMQBinding : two-way)

 

4. SQL MQ? 이런게 있어?

 

3. 코파일럿 AI로 ppt 생성해보기 

          -이전 프로젝트에서 만들었던 PPT내용을 ai로 재현이 되는지... 확인해보기.

         :: 맨날 말로만 된다고 하는 건 봤는데... 진짜 필요한 화면은 어떻게 만들수 있나?

 

5. 골프?...

 

--- 모르던게 생겼으니... 또 공부를 해야 다음 일도 하는거고... 

          

  DAT 프로그래밍을 하면서... 

챠트도 그리고, 각종 로그도 남기면서... 쓰레드 현재 실시간으로 값을 보는 컨트롤도 만들고...

또 프로그램 원격 재시작, 모니터링등... PLC 신호에 맞춰 대응하는 프로그래밍이 재미있긴 했다.

다만 그 신호가 원치 않을때도 왔었다는게....

 

 암튼 플젝하면서 일정관리, 소스정리, PLC연동기획서 현행화, 이슈관리 등... 

좀 할게 있었지만... 초반엔 현장 대응하느라 시간이 안나서... 못했던걸 마지막 달에 주말엔 집에서 문서정리하면서 보냈다. 

 

 연동기획서를 재정리 할때는 PPT 헬퍼가 Office2021에서 동작을 이상하게 하는 바람에... 제대로 못 써먹었다. 

 

이번에 office 2007버전과 office2021버전에서 모두 사용이 가능하도록 수정하였다. 

 

일정관리 툴은 Todo를 써야 하는데... 무슨 이유였을까? 소스의 MainForm.cs 제일 위 상단에 회의록 겸, 일정을 적으면서 사용했다. git에 올라가니 기록은 유지되었을 것이다. 

 

Visual Studio Extention 프로그램에 함수목록 보기 프로그램을 수정하여 사용했다. 

함수명만 보이니까 함수의 역할이나 기능에 대한 코멘트를 함수목록에서 보고 싶어서.... 

 음... 좀 아쉬운건 회의록 정리하는게... 부족했다?

아침 10시 반이면 회의를 1시간 반이나 하는데... 딱히 이렇다할 기록이 없으니. 

회의록 정리하는 걸 고민해봐야겠다. 

 

이후 후속 DAT개발자 분이 드디어 출근을 했다하니... 잊어버려도 될 듯....

 

 

  와우.. 드디어 지난 금요일에 프로젝트 계약기간이 끝나고 탈출?했다. 

계약기간은 3개월! 연장은 안했다. 1달짜리 단가가 그대로라.. 굳이 할 이유가 없더라.

업무는 제조 생산 설비에서 PLC 신호에 대응하여 데이타 생성 및 수집이었다. 

 

 5월에 이미 오픈한 프로젝트였지만, 6월 초에 들어갔더니 퍼질러 놓은 똥이 너무도 커서... 

소스를 싹 지우듯이 하면서 다시 코드를 작성했다. 가장 빠르게 해야 하는 것이 "발행", "인쇄", "배출" 신호를 잡아서 

처리해야 했다. 두달은 밤 늦게까지 또 주말에도 나가서 일하며, 1년 중 공장이 가장 바쁘게 돌아가는 기간에 

프로그램이 동작하도록 만들었고. 남은 한달은 남은 과제 23가지들을 처리를 했다. 

 설비는 88대로... 일일이 껐다 켰다 하면서 돌아 다녀야 하고... 두달 미친듯이 다니니 다리가 망가졌다.

집에 도착하면 어그적 어그적 걸어다닐 정도로... 발바닥과 왼쪽 무릎이 아프다.

 그래도 세달을 채워야 하니 그냥 최대한 설비를 안돌아다니면서 일을 했다.

그래도 배포를 하려면 설비를 끄고 켜고 하러 다녀야 했고...

한번 하면 두세번은 한듯 하다. 돌아오지 않은 내 다리.. ㅠㅠ

 

 좀 쉬면서 나를 좀 돌보고... 해야 하는데... 하~! 집은 또 집대로... 편하지 않네. 

 

 간만에 이 프로그램을 추가 수정...

SI플젝하면서 메소드에 옆에 설명문구를 넣고 싶은 생각이 들었는데... 

미루다가 이제 넣었다. 

 

 

색상 지정은 그대로고

F2 키를 누르면 힌트입력 컨트롤이 앞으로 나온다. 

위와 같이 

일자 및 시간을  보여주는 컨트롤을 만들었다. 

설비에서 데이타 입력하는 터치에서 화상키보드 열어서 년 월일을 입력하고 있는 걸 보고... 

와우... 이런 컨트롤이 있으면 그냥 넣을 수 있을 듯 해서... 잠깐 만들어봤다. 

UP, DN 버튼은 눌러도 되고, 화면을 밀어서 올리고 내리고...

 

설정할 수 있는 속성은 위와 같다. 

 

표시 갯수설정.

값이 계속 이어서 돌려서 보여줄지 말지

몇개씩 건너뛸지...

현재 선택된 값...

값 표시 포맷...

박스세로 간격...

'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

달력/시각 컨트롤...  (0) 2025.03.16
Popup?  (0) 2025.03.16
뭐 좀 만들어볼까하다가....  (0) 2024.08.03
Flow Condition] 조건 오브젝트 뷰 만들기?  (0) 2018.04.29
바코드 폰트 사용하기...  (0) 2018.04.27