2019년 6월 19일 수요일

OPC란? OPC에 대해 쉽고 간단히 알아보자.

OPC(OLE for Process Control)는 공정을 제어하는 모든 장비들 사이의 통신을 원활히 하기 위해 생긴 국제 산업 표준 통신 규약입니다.

공정이 정밀하고 복잡해질수록 공정을 제어하는 장비들 사이에 데이터를 전송하는 제어 통신의 비중이 증가하는 반면, 통신 프로토콜은 장비 제조사마다 서로 달랐기 때문에 옛날에는 공정에 필요한 모든 장비를 같은 통신 프로토콜을 사용하는 동일 제조사의 제품으로 통일하거나, 메이저 제조사의 프로토콜들을 통합한 비싼 인터페이스 제품을 사용하는 방법으로 통신 문제를 해결했었습니다.


(공정에 필요한 모든 장비들을 같은 통신 프로토콜을 사용하는 동일 제조사의 제품으로 통일해버리기)

이 비싼 통신 인터페이스 프로그램들이 바로 인터치나 싸이먼, 싸이텍과 같은 HMI 프로그램들이죠. ^^

공정 제어 인터페이스 프로그램인 HMI 입장에선 장비 간 통신은 필수사항이었기 때문에 장비 제조사와 제휴를 통해 통신 프로토콜을 수집하는데 집중 투자하여 인터페이스 역량을 늘려 나갔고, 사용자는 공정 관리의 편의성과 통신의 부담을 줄이기 위해 비싸지만 HMI 프로그램을 구입하여 사용했습니다.


(HMI의 대두로 통신에 유연성이 증가 하였고, 공정 제어 기술도 발달)

이렇게 통신 문제를 해결해 왔지만

여전히 사용자는 HMI와 연계되는 메이저 제조사의 제품만 강요 당하거나, HMI가 필요 없는 환경에서도 통신을 위해 비싼 라이센스를 구매해야 한다는 문제점과
소규모나 후발 장비 제조사는 메이저 제조사와 HMI 업체에 의한 통신 진입 장벽의 문제로 인해 HMI가 아닌 범용성 높은 표준 통신 프로토콜의 필요성이 부각되었습니다.

이러한 수요는 결국 1996년 공정 제어 디바이스 간 통신 표준 탄생의 원인이 되었고, 이때 탄생한 통신 규약의 이름이 바로 OPC입니다.

OPC의 등장으로 이제 통신이 필요한 모든 장비들은 OPC 프로토콜만 지원하면 OPC를 지원하는 다른 모든 장비와의 통신이 보장되는 편리함을 가져다주었고, 이러한 변화는 기존의 메이저 제조사와 HMI 업체의 가세 후 더욱 빠르게 성장하여 이젠 전 세계를 지배하는 프로토콜이 되었습니다.


(OPC 안에서 모두가 평등해진 평화로운 세상 ^^)

OPC 프로토콜을 사용하는 통신 과정을 좀 더 자세히 알아보면



제어 장비들을 OPC 통신을 통해 서버와 연결한 다음, 통신이 필요한 장치 내부 태그를 서버에 등록하면 사용자는 원하는 제어나 데이터를 서버에 접속하여 사용하는형태 입니다.

유지와 보수 또한 태그들이 등록된 서버만 관리하면 되니 운영도 매우 간단해집니다. ^^

HMI 환경은


다른 장비와 동일한 OPC 클라이언트 구조로 되어 있지만 OPC 서버를 HMI이 관리하게 함으로 사용자에게 좀 더 편의성을 제공합니다.


OPC 서버는 지금 현재 라이센스 유무를 떠나 매우 다양한 제품군이 있으며 프로토콜의 강력함 만큼 제어 공정 전반에 널리 사용되고 있습니다.


(무수히 많은 Free OPC 서버 리스트 1)

산업 표준인 만큼 이를 활용한 제품이 많아 구글에 간단한 검색만으로도 테스트나 학습용 OPC 서버를 쉽게 구할 수 있습니다. ^^


(무수히 많은 Free OPC 서버 리스트 2)


(Free OPC 서버 리스트 3)

OPC에 대한 간단 설명을 끝으로 이번 편을 마치며 이제 본격적으로 C#을 활용한 OPC 서버와 클라이언트 구성, 관리에 대한 내용으로 돌아오겠습니다. ^^

긴 글 봐주셔서 감사합니다!
Share:

2019년 6월 18일 화요일

Log4J를 활용한 로그 관리 방법 (C#, Visual Studio환경, 텍스트 파일) - Log management method using Log4J In C#

로그는 프로그램 코딩부터 운영까지 반드시 필요한 부분이지만 로그를 분류하고, 별도의 텍스트 파일에 로그를 저장하거나 로그 파일들을 관리하는건 상당히 귀찮은 부분이기도 합니다. ^^;;

이럴 땐 시간을 내서 자신에게 맞는 로그 관리 유틸을 만들어 사용하는게 최고이긴 하지만 아직 이런 도구가 없으시다면 아주 쉽게 적용 가능한 범용적인 로그 관리 유틸리티인 Log4J를 소개합니다.

Log4J는 아파치 소프트웨어 제단에서 발표한 자바 기반의 로깅 유틸리티로서 처음엔 자바 디버깅에 사용되었다가 점점 심플하면서도 체계적인 로그 관리에 매료된 사용자가 늘어감에 따라 다른 프레임워크로 포팅이 되어 이제는 왠만한 메이저 언어에서도 쉽게 사용 할 수 있는 유틸리티로 발전 되었습니다.


(출처 - 위키백과 : https://ko.wikipedia.org/wiki/Log4j)

이번 포스팅 대상은 C#이니 닷넷 프레임워크에 대응하는 Log4net을 사용해 보겠습니다.


1. Visual Studio에서 작업을 할 프로젝트를 생성합니다.

프로젝트는 어떤거든 상관없으나 가장 많이 사용하는 윈폼으로 만들었습니다.


2. Log4net.dll를 직접 참조 시켜서 적용해도 괜찮지만 VS 환경에선 편리하게 너겟을 이용하여 설치도 가능합니다.

도구 - NuGet 패키지 관리자 - 솔루션용 NuGet 패키지 관리에 들어가서


3. Log4로 검색한 뒤, log4net을


4. 적용할 프로젝트에 체크한 뒤 설치를 합니다.


확인을 해주면


요렇게 간단히 Log4net 설치가 완료 되죠.


너겟은 이렇게 환경까지 다 맞춰주니 매우 편리합니다. ^^


5. 이제 로그 관리를 위해 xml 파일 하나를 만들어 줍니다.

프로그램이 읽을 수 있는 아무 위치에다 xml 파일을 하나 생성하는데 파일의 이름은 log4net.xml만 피하시면 됩니다.

저는 파일 이름을 logManager.xml로 했어요.


xml 파일이 생성되면 이렇게 텅 비어 있을껀데요.


6. 여기에 위 그림과 같이 로그 관리를 위한 태그를 추가합니다.

이 태그들은 log4J의 공통적인 명령어들로 이루어져 있는데요.

우선 #3 ~ #12까지는 로그 파일의 종류과 관리에 대한 내용이며
#14 ~ #17은 로그의 단계에 관한 내용입니다.

#3부터 설명을 하면

#03 : 로그 파일은 일정 크기를 넘으면 가장 오래된 내용을 삭제하는 방식으로 관리함
#04 : 로그 파일의 이름은 logTest.txt로 함
#05 : 로그 파일 유지
#06 : 일정 크기를 넘었을때 가장 오래된 내용이 파일이라도 삭제하겠음
#07 : 로그 파일 관리 단위는 파일 크기로 함
#08 : 최대로 백업할 로그 파일의 갯수 = 10개
#09 : 로그 파일 최대 크기 = 1MB
#10 : 로그 패턴
#11 : 로그가 작성될 시간 - 로그내용 NewLine
#15 : 로그 파일에 기록할 로그 범위 = 디버깅 수준까지

로 설명이 되어집니다.

따라서 이 프로젝트의 로그 파일들은 로그 앞에 로그가 생성된 시간도 함께 작성하면서 최대 1MB의 크기로 제한하고 만약 1MB를 넘길시엔 기본 파일은 백업 파일로 변경하고 새 로그 파일에 다시 작성한다.

그리고 백업 파일이 10개가 넘을 경우 가장 오래된 파일을 삭제하고 새 로그 파일을 작성하겠다는 뜻 입니다. ^^

번거롭지 않도록 해당 파일의 다운 링크를 제공할께요 => XML 파일 다운로드 링크



7. 로그 관리 파일을 프로그램이 읽을 수 있도록 복사 옵션도 추가해주면 편합니다. ^^

로그 관리가 다 되었으니 이제 소스로 가볼까요.


8. log4net관련 소스를 참조할 수 있도록 참조를 추가한 뒤


9. 로그를 로드할 위치에 위와 같은 소스 코드를 작성합니다.

저는 윈폼이고 폼 시작과 함께 로그를 로드하고 싶어서 이렇게 했습니다.

#24는 위에서 추가했던 로그 관리 파일을 로그 하기 위함이고
#25는 로그의 로드 위치를 지정하였습니다.

#26 ~ #29까지는 로그가 시작된 시점을 로그 파일에다 작성하고 싶어 만들었습니다.


10. 이제 본격적으로 원하는 곳에 로그를 남깁니다.

log4J의 로그는 총 6단계로 낮은 단계부터

FATAL - ERROR - WARN - INFO - DEBUG - TRACE 로 이루어져 있으며

로그 관리 파일에서 지정한 로그 등급 이상의 로그만 로그 파일에 저장합니다.

저는 로그 등급을 DEBUG로 했으니 TRACE를 제외한 모든 로그들이 파일에다 작성되겠죠 ^^

로그를 작성하는 방법은 ILog.Debug(로그내용); 으로 합니다.

FATAL 등급으로 남기고 싶으면 ILog.Fatal(), ERROR 등급은 ILog.Error() 이런식이죠.

위 소스에서는 프로그램 시작과 종료 이벤트 때 로그를 남기도록 했는데요.


11. 빌드를 하고 프로그램을 실행하면


지금쯤 로그가 작성되었겠죠? ^ㅡㅡ^

프로그램을 종료하고 실행 환경으로 가보면


12. 짜잔~ 따끈따끈한 로그 파일이 생성되었습니다. ㅎㅎ


로그내용도 지정했던 (시간 - 내용) 형식으로 되어 있고, 제가 작성했던 로그들 모두 잘 들어가 있네요.


그리고 자동으로 log4net.xml 파일도 생성되었는데 이 파일에서는


로그 관리 태그의 모든 명령어와 설명이 들어 있습니다.

제가 작성했던 내용도 여기 있는 태그 중 아주 일부만 가져온거죠.

보시면 단순히 텍스트 파일에 로그를 작성하는 기능 외에도 DB 연동을 위한 스키마 내용이나


연동 방법들이 있고

쭉 내려가 보면


제가 사용한 부분도 찾을 수 있습니다.

로그 작성은 해봤으니 이제 마지막으로 로그 파일의 백업이 어떻게 되는지 확인해 볼까요?


13. 일단 로그 파일의 용량을 늘려야 하니 타이머 하나를 생성해서


타이머 이벤트에


연속된 정수를 계속 찍도록 해봤습니다.


그리고 실행하면


이쁘게 작성되고 있네요 ^^.


요즘 재미붙인 움짤로 로그 쌓이는걸 만들어 봤습니다. ㅎㅎㅎㅎ

이렇게 로그가 쌓여서 제가 지정했던 용량 1MB를 넘어가면


14. 짜잔~ txt.1이란 확장자로 저장이 되었네요.


메모장으로 열어보니


시작과


끝 모두 이쁘게 잘 저장되어 있으며


새로운 로그 파일도 이어서 잘 저장된 모습을 확인 할 수 있습니다. ^^

이로써 C#에서 Log4J를 활용한 로그 유틸리티 적용 방법에 대한 설명을 마치겠습니다.

한 분이라도 도움이 되었으면 좋겠네요.

마지막으로 포스팅의 예제가 되었던 프로젝트도 공유할께요.

귀찮으시면 프로젝트를 그대로 사용하셔도 될꺼 같습니다.

샘플 프로젝트 다운로드 링크 = 다운로드

읽어 주셔서 감사합니다!
Share:

2019년 6월 15일 토요일

패스오브엑자일(Path of Exile) 플레이 리스트

제 블로그에서 게임별 포스트 리스트를 모두 보는 기능이 없어 추가중에 있습니다.

따라서 그동안 패스오브엑자일 플레이 포스트 페이지를 관리하는 포스트를 작성하여 운영중에 있으니 빠른 링크가 필요할 경우 이 페이지를 이용해주세요. ^^

패스오브엑자일 플레이 개요편
[0] 패스오브엑자일 플레이 보러가기 = 1편, 개요
[1] 패스오브엑자일 플레이 보러가기 = 2편, 개요
[2] 패스오브엑자일 플레이 보러가기 = 3편, 개요


➤ 패스오브엑자일 플레이 관련 포스트가 추가시 바로 수정 합니다.
Share:

2019년 6월 13일 목요일

[1] 패스오브엑자일(Path of Exile) 플레이 (개요 2편, 캐릭터, 시스템 설명)

저번편에선 POE의 장르에 대해 이야기 했었으니 이번에는 본격적으로 플레이를 보시는데 꼭 필요한 게임 시스템과 기본 팁에 대해 알아보겠습니다. ^^

이 게임은 아무래도 시작은 디아블로2의 모드였기 때문에 분위기를 비롯한 시스템도 상당히 비슷한게 많습니다.

예를 들면
캐릭터들의 소개를 각자의 개설에 맞춰 멋지게 표현한 캐릭터 선택 화면도

이렇게 비슷하게 구현되어 있죠 ㅎㅎ

디아블로2는 오리지널 5개, 확장팩 2개 총 7개의 캐릭터였듯 POE도 6개의 기본 캐릭터에 퀘스트로 해금하는 1개의 캐릭터, 총 7개의 캐릭터가 있는데요. 이 7개의 캐릭터는


타격과 마법 모두 능통한 템플러


민첩성과 마법을 섞어 빠른 암살을 노리는 쉐도우


힘과 체력에 주력한 머라우더


민첩과 원거리 타격에 능한 레인저


빠르면서도 강력한 전사인 듀얼리스트


상태가 너무 위험해 보이는 마법사 위치


힘과 민첩 지능 모두를 고르게 갖춘 벨런스형의 사이온이 있으며

이 캐릭터들은 이후 전직을 통해 좀 더 차별화 된 능력을 가지게 됩니다.


요렇게 날라 다니는 위치의 경우 상위 직업으로


총 세가지가 있으며


주로 소환 관련 스킬들을 강화 시켜주는 네크로맨서


카오스라는 속성과 저주 관련 스킬에 특화된 오컬티스트


화염, 냉기, 전기 3원소 관련 스킬들의 위력이 증가하는 엘리멘탈리스트 중 한가지로 승급을 거친 뒤 전직이 가능합니다.

위치 외에도


듀얼리스트


쉐도우


머라우더


레인저


템플러 모두 세 가지의 상위 직업을 가지고 있지만


마지막 사이온은 상위 직업이 어센던트 하나인 대신 위에 나열된 모든 상위 직업의 특성 중 몇 개를 가져올 수 있는 특이한 옵션을 가지고 있죠.

이러한 전직 시스템과 더불어 디아블로와 차별화 된 시스템이 바로 스킬인데요.

디아블로에선 스킬이 사용자로부터 입력 받아 직접 사용하는 액티브 스킬과


(디아블로2 소서리서의 액티브 스킬인 차지드 볼트)

사용자의 명령과 상관없이 항상 캐릭터에게 스킬 옵션이 적용되는 패시브 스킬 두가지로 나뉘며 캐릭터별로 스킬 트리가 정해져 있습니다.


(소서리스의 라이트닝 관련 스킬 트리. 위 스킬들은 소서리스만이 정해진 조건에 따라 사용 할 수 있다.)

스킬 트리 외의 스킬은 오직 아이템 옵션에 붙어 있는 스킬 보너스를 통해서만 가능하죠.


(소서리스가 아닌 다른 캐릭터들은 룬워드 아이템인 수수께끼에 붙어 있는 텔레포트 옵션을 통해서만 텔레포트를 사용 할 수 있습니다.)

하지만 POE는 액티브 스킬은 아이템에 착용하는 잼으로 얻으며


(폭발 덫이라는 잼이 갑옷에 있는 홈에 착용되면)


(해당 아이템을 착용시엔 폭발 덫 스킬을 사용할 수 있습니다.)

패시브 스킬 또한 잼을 통해 획득 할 수 있지만


(액티브 스킬의 관통력을 올려주는 패시브 스킬을 잼을 통해 획득)

대부분의 패시브 스킬과 스탯들은


이 방대한 스킬 트리를 통해 획득하게 됩니다.

이 스킬 트리에는 패시브 스킬 뿐만 아니라 스탯 또한 포함되어 있으며


지능형 스탯과 스킬들은 12시 위주로 분포 되어 있고, 힘은 8시, 민첩은 4시 방향으로 분포 되어 있고


각 캐릭터 별로 스킬 트리 시작 위치가 다르게 설정되어 있습니다.

12시 = 위치
02시 = 쉐도우
04시 = 레인저
06시 = 듀얼리스트
08시 = 머라우더
10시 = 템플러
중앙 흰색 = 사이온

의 시작 위치로 스킬잼과 마찬가지로 모든 스킬들은 필요 스킬 포인트의 차이만 있을뿐 캐릭터 클래스의 제한을 받지 않고 자유롭게 사용할 수 있다는 특징이 있습니다.

따라서 POE의 모든 캐릭터는 스킬잼 + 전직 + 패시브 스킬 트리의 조합을 통해 정말 다양한 개성을 가진 캐릭터로 육성하는 재미가 많은 장점을 가지고 있죠. ^^

아직 몇가지 설명을 하지도 않았는데 움짤들이 많으니 페이지 크기가 많이 커졌네요. ㅎㅎ

다음편에 계속 이어서 가겠습니다!

긴 글 봐주셔서 감사합니다!

페스오브엑자일 플레이 2편 보러가기
패스오브엑자일 플레이 관련 전체 리스트

(이전 시리즈들과는 이번 POE 시리즈부턴 좀 더 색다르게 움짤과 영상을 많이 넣어가며 작성하다보니 작성 시간은 훨씬 많이 걸리지만 만들고 난 뒤에 페이지를 보면 훨씬 만족도가 높아서 아직까진 너무 좋네요 ㅎㅎ)
Share: