4차산업과 관련하여 제조공정에서 품질관리 목적으로 심심치 않게 등장하는 비전검사 설비는 제조공장의 공정설비의 끝단에서 공정설비의 사이 사이로 포지션을 변경하여, 전공정의 불합리를 검출하고 제조에 필요한 공정장비 파라미터를 최적하기 위하여 불량을 검출하고 데이터를 확보하기에 나서고 있다.

 

  AI와 관련하여 머신비전은 그러한 비전 검사설비에서 핵심이되는 컴포넌트로 불량검사의 역할을 톡톡히 하게되는데,

제조업체의 생산력과 직결되는 수율을 담당할 뿐만아니라, 공정의 생산량과 연결지어 실상은 제품이 빠르게 다음 공정으로 넘어가는 순간을 포착하여 빠른 속도로 검사를 완료해야한다.(비전검사 설비는 대체로 수백 마이크로 초의 검사 시간을 갖는다.)

 

 그러한 까닭에 머신비전 검사 장치는 룰베이스의 알고리즘을 최적화하여 C/C++의 언어로 작성하게되며, 광학기술에 따른 보정된 해상도를 가진다. 산업용 카메라와 고정된 영역에서 일정한 백라이트가 비추며, 검사간 제품의 위치와 배경이 일정하기에 이미지상 객체의 위치를 알아내는 알고리즘은 필요치 않으며 다만, 제품의 품질에 따라 제품의 이미지만 다르게 변하고 AI의 영역은 정말 필요한 상황(분류문제 등)에서만 사용하게 된다.

 

 어떻게 사용하고 구성하느냐에 따라 다르지만 기존의 룰베이스 방법론에서 AI를 사용하여 간소한 차이의 정확도를 얻는 과정에서 필요 이상으로 공정장비의 장점인 빠른 Cycle Time을 손해볼 이유가 없다면 굳이 사용할 필요가 없다고 생각된다.

 

 면접을 핑계로 업체를 돌아다니며 몇개의 불량샘플 사진을 확인했을 때에도 AI의 기술력 보다는 기존의 알고리즘 최적화하는 방법이나, 카메라 이외의 다른 컴포넌트(바코드기기) 등의 컴포넌트에 대한 학습량이 더 집중적으로 공부하는 편이 유용하다고 느낄 정도이다.

 

생산설비에 관련하여 이미지처리는 산업용 카메라로 얻어진 또는 X-ray, E-beam을 통해 얻어진 흑백이미지였다.

1. 객체 지향(OOP : Object-Oriented Programming)은 무엇일까.

위키백과에서는 객체 지향 프로그래밍은 컴퓨터 프로그래밍을 바라보는 견해나 사고를 규정하는 인식의 체계 중 하나로, 컴퓨터 프로그램을 명령 목록으로 보는 시각에서 벗어나 여려 독립된 단위로 서의 "객체*"의 모임으로 파악하고자 하는 것으로 정리하고 있다.

 

객체 지향이라는 페러다임이 가져온 의미에 대해 생각컨데, 컴퓨터처럼 생각하는 사람이 아니라.

컴퓨터가 사람처럼 생각하도록 프로그래밍 되어야한다는 의미로 생각된다.

 

객체* : 여기서 객체라 함은 사람의 말로 표현이 가능한 모든 것을 말한다.

2. 장점

객체 지향의 뚜렷한 장점은 재사용성 및 은닉화이다.

때문에 프로그램을 유연하고, 변경이 쉽도록 작성하여 대규모 소프트웨어 개발에 많이 사용된다.

또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 한다.

 

2.1. 장점의 근거.

소프트웨어 공항의 관점에서 볼 때에 S/W의 품질*을 향상시키기 위해 다음의 두 가지를 따라야할 필요가 있다.

가. 강한 응집력(Strong Cohesion)

  OOP의 경우 하나의 문제 해결을 위한 데이터를 클래스에 모아 놓아 응집력을 강화한다.

나. 약한 결합력(Weak Coupling) 

  클래스 간에 독립적인 디자인을 함으로써 결합력을 약하게 한다.

 

S/W의 품질* : 소프트웨어 공학에서의 높은 품질의 소프트웨어란 다음과 같은 내용이 포함된다.

ⓐ 제품의 목적에 만족하는 정도.

ⓑ 주어진 기간에 부합하는 정도.

ⓒ 정해진 예산에 부합하는 정도.

IEEE의 소프트웨어 품질에 대한 정의에서도 다소 개념적인 수준.

2.2. 비판

지나친 프로그램의 객체화 경향은 실제 세게의 모습을 그대로 반영하지 못한다(?)

 

3. 객체 지향을  구성하는 요소.

객체 지향은 독립된 "객체"를 만들기 위한 하나의 자료 원형으로서 모델이 되는 "청사진" 역할을 한다.

객체 지향의 기본 구성요소는 다음 3가지라 할 수 있으며, 그 설명은 다음과 같다.

 

3.1. 클래스(Class)

  같은 종류(또는 문제 해결으리 위한)의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것으로 객체지향

  프로그램의 기본적인 사용자 정의 데이터형(User defined data type)이라고 할 수 있다.

  클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다.

  프로그래머는 아니지만 해결해야 할 문제가 속하는 영역에 종사하는 사람이라면 클래스를 사용할 수 있다.

 

3.2. 객체(Object)

  클래스의 인스턴스(실제로 메모리상에 할당된 것)이다. 객체는 자신 고유의 속성(attribute)을 가지며 클래스에서

  정의한 행위(behavior)를 수행할 수 있다. 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써

  메모리를 경제적으로 사용한다.

 

3.3. 메서드(Method), 메시지(Message)

  클래스로부터 생성된 객체를 사용하는 방법을서 객체에 명령을 내리는 메시지라 할 수 있다. 메서드는 한 객체의

  서브루틴(subroutine) 형태로 객체의 속성을 조작하는 데 사용된다. 또 객체 간의 통신은 메시지를 통해 이루어진다.

3.4. 관련 키워드

  Interface

4. 특징

4.1. 자료 추상화(캡슐화)

  불필요한 정보는 숨기고 중요한 정보만을 표현함으로서 간단히 만드는 것으로 접근 제어를 통해 정보를 은닉할 수 있다.

  일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체라하며, 추상 자료형에 정의된 연산을 메소드(함수),

  메소드의 호출을 생성자라고 한다.

  

4.2. 상속

  상속을 통해 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 한다.

4.3. 다중 상속

  클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능으로 클래스의 기능이 동시에 필요할 때 용이하나

  상속 관계에 혼란을 줄 수 있으므로 프로그래밍 언어에 따라 사용 가능 유무가 달라 주의가 필요하다.

4.4. 다형성 개념

  어떤 요소에 여러 개념을 넣어 놓은 것으로 오버라이딩(같은 이름의 메소드가 여러  클레스에서 다른 가능을 수행)이나 오버로딩(같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것)을 의미한다. 다형 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다.

4.5. 동적 바인딩

  동적 바인딩은 실행 기간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로 컴파일 시간에 완료되어 변화하지 않는 정적 바인딩과 대비되는 개념이다. 동적 바인딩은 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념을 실현한다.

 

5. 객체 지향 설계 원칙 (SOLID)

  로버트 마틴이 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것으로 프로그래머가 시간이 지나두 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다.

 

SRP(Single reponsibility principle 단일 책임 원칙) : 한 클레스는 하나의 책임만 가져아한다.

OCP(Open/closed Principle 개방-폐쇄 원칙) : 소프트웨어 요소는 확장에 열려 있으나 수정에는 닫혀 있어야 한다.

LSP(Liskov substitution principle 리스코프 치환 원칙) : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

ISP(Interface segregation principle 인터페이스 분리 원칙) : 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

DIP(Dependency inversion principle 의존관계 역전 원칙) : 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

 

6. 디자인 패턴

  객체 지향 프로그래밍 설계를 할 때 자주 발생하는 의사소통에 관련한 이슈를 피하기 위해 의사소통 수단의 일종으로

  서의 해결 방안으로서 이미 수 많은 사람들이 부딪힌 문제를 해결함에서 나타나는 설계에 나타나는 패턴에 대한

  방법론이라 할 수 있다.

 

  다만, 모든 상황의 해결책은 아니므로 디자인 패턴에 얽매이는 것 보다는 그 패턴이 왜 효율적인 방식인지를

  이해해야한다.

 

  그리고, 이러한 디자인 패턴 중 일부는 소프트웨어에의 설계에서만 국한되어 적용할 수 있는 내용들로 만 이루어진 것

  은 아니며, 전기/전자 다른 응용제어 분야에서도 그 개념을 적용할 수 있다. (예 : 상태 패턴에서의 유한 상태 머신은

  전자장치의 제어 또는, PLC 등 자동화분야에서도 활용이 가능하고 활용 할 수 있는 것이다.) 

6.1. 디자인 패턴의 구조

가. 콘텍스트(Context)

   문제가 발생하는 여러 상황을 기술한다. 즉, 패턴이 적용될 수 있는 상황 또는, 이미 적용 된 패턴이 유용하지 못한

   상황을 나타낸다.

 

나. 문제(Problem)

   패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 여러 제약 사항과 영향력을 고려하여 기술한다.

 

다. 해결(Solution)

  문제를 해결하다록 설계를 구성하는 요소들과 그 요소들 사이의 관계, 책임, 협력 관계를 기술한다.

  해결은 반드시 구체적인 구현 방법이나 언어에 의존적이지 않으며 다양한 상황에 적용할 수 있는 일종의 템플릿이다.

6.2. 디자인 패턴의 종류

가. 생성(Creational) 패턴(추상 객체 인스턴스화)

  객체 생성에 관련된 패턴, 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유현성을 제공한다.

 

  ⓐ 추상 팩토리(Abstract Factory)

  ⓑ 팩토리(Factory Method)

  ⓒ 빌더(Builder)

  ⓓ 프로토타입

  ⓔ 싱글톤(Singleton)

  

나. 구조(Structural) 패턴(객체 결합)

  클래스나 객체를 조합해 더 큰 구조를 만드는 패턴.

  예를 들어 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어

  새로운 기능을 제공하는 패턴이다.

 

  ⓐ 어댑터(Adapter), 리퍼(Wrapper), 변환기(Translator)

  ⓑ 브리지(Bridge)

  ⓒ 컴포지트(Composite)

  ⓓ 데코레이터(Decorator)

  ⓔ 파사드(Facade)

  ⓕ 플라이웨이트(Flyweight)

  ⓖ 프록시(Proxy)

 

다. 행위(Behavioral) 패턴(객체 간 커뮤니케이션)

  객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴

  한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의

  결합도를 최소화하는 것에 중점을 둔다.

 

  ⓐ 책임 체인(Chain of Responsibility)

  ⓑ 커맨드(Commend)

  ⓒ 인터프리터(Interpreter)

  ⓓ 반복자(Iterator)

  ⓔ 중재자(Mediator)

  ⓕ 메멘토(Memento)

  ⓖ 옵저버(Oberver)

  ⓗ 상태(state)

  ⓘ 전략(Strategy)

  ⓙ 템플릿 메소드(Template Method)

  ⓚ 방문자(Visitor)

일자 사유 수정 내용
22/2/13 똥글 방지, 본래 목적 유지. 목적, 범주, 업데이트 주기 업데이트.
카테고리 재설정, 카테고리별 범주 설정.
22/2/25 업무에 필요할지 모르는 프로그램 설계에 관련한 기초 지식 탐색으로 학습계획 커리큘럼에 포함되어야 하거나, 포함할 내용 사전 탐구. Study에서 객체 지향 개요 페이지 작성.
객체지향 및 장단점, 구성 및 SOLID 원칙, 디자인 패턴에 대한 내용들.
22/2/25 스마트팩토리와 머신비전 활용 장비에서의 AI기술에 관하여 드는 생각 정리. 머신비전에 관하여..
     
     

1. 개요

2. 구분 및 분류 및 차이점.

3. 개발 환경 선택에 고려해야할 사항들.

4. 개발 효율을 위한 기능들.

5. 생산성을 향상시키는 기능 사용 예제.

6. 라이브러리 파일이나 패키지 종류.

7. 개발환경에 라이브러리 파일이나 패키지 추가하는 방법들.

8. 사용 예제들. 

'SW 개발환경 > IDE' 카테고리의 다른 글

[IDE] IDE  (0) 2021.10.31

블로그??

 본래의 활용 목적

 - 나만의 도서관 또는 도구상자.

   ㄴ 1. 어떠한 개발 툴 또는 도구가 있더라.

   ㄴ 2. 개발 툴이나 도구는 어떤 기능이 있더라.

   ㄴ 3. 어떻게 쓰더라 또는 이런식으로 하더라.

   ㄴ 4. 차이점 또는 이렇게 응용할 수 있더라.

 

 현실

 - 아무도 궁금하지 않은 내 생각 따위의 똥글 싸지르는 웹페이지.

 

 ㄴ 내가 내 블로그에 들낙하거나 똥글을 싸지르는 과정.

   -> 검색 필요 -> 필요한 자료를 찾음 -> 나름 이해한다고 생각함 -> 누가 물어봄 -> 잊어버림

   -> 안다고 생각했지만 모른다는 걸 알게됨 -> 블로그에 정리 결심 -> 어느 카테고리에 써야하지?

   -> 카테고리 분류가 마음에 안듬 -> 분류를 어떻게하지 -> 관심 범위가 너무 넓음 -> 정리가 안됨 

   -> 그냥 찾아서 읽음 -> 고민 해결 -> 퇴장하거나 똥글 싸지름 -> 무언가 한거 같음 -> 뿌듯하고 대견함

   -> 기한 없는 방치.

 

 ㄴ 두 번째 프로세스

   -> 무언가 하루하루 성장하고 싶음 -> 들어옴 -> 공부는 안하고 똥글 싸지름 -> 무언가 한거 같음

   -> 뿌듯하고 대견함 -> 기한 없는 방치.

 

1. 블로그의 내용.

- 의식의 흐름따라 덕질하고 똥글 싸지르기.

 

2. 블로그 범주 분류 기준

- 일상

  의식의 흐름

 

- SW개발환경

  내용 : 프로젝트를 수행을 위한 개발환경 선택 및 차이점, 기능별로 패키지나 API 분류, 사용 예시.

  범주 : OS, IDE, FrameWork, SDK 이것 저것..

  업데이트 주기 : 무언가에 치여 지치거나 힘들어질 때.

 

- 장비SW

  내용 :프로그래밍 기법, 인터페이스 사용법, 사용하는 프로토콜.

  범주 : PLC, HMI, SCADA, 인터페이스, 프로토콜

  업데이트 주기 : 그냥 새로운 것들을 알게 될 때마다.

 

- 장비HW

  내용 : 개발 유틸 및 주요 기능 그리고 개발 프로세스.

  범주 : 전장, 기구, 보드, 유틸리티

  업데이트 주기 : 새로운 것들을 알게 될 때마다.

 

- 수학

  내용 : 필요하다고 생각 되는 것들 개념정리.

  범주 : 이것 저것 다.

  업데이트 주기 : 그냥 생각날 때 마다.

 

- 계측

  내용 : 계측 분석 방법, 이유 등등.

  범주 : 대중 없음. 전기, 음향, 광도 닿는 대로.

  업데이트 주기 : 필요할 때.

'Story' 카테고리의 다른 글

머신비전에 관하여..  (0) 2022.02.25
[블로그] 수정 일지.  (0) 2022.02.13
[Industry 4.0]Cyber-Physical Systems, Industry 4.0  (0) 2021.11.06
Licence.  (0) 2021.10.31
2019년 산업통상자원부 혁신과제_장비고도화  (0) 2021.07.27

https://visualstudiomagazine.com/articles/2021/11/09/xamarin-maui.aspx

 

With .NET MAUI Delayed, Xamarin.Forms Remains Mobile Dev Option in .NET 6 -- Visual Studio Magazine

With .NET MAUI -- the 'evolution of Xamarin.Forms' -- delayed, the latter remains a primary mobile dev option in .NET 6, just released this week.

visualstudiomagazine.com

 

4일전 나온 기사인데,

GUI, UX 등의 시각화에 대한 활용도가 높아지면서 Android, Desktop, iOS, iot 등 각각의 개발프레임 들을

통합하려는 시도로 Microsoft에서 개발하겠다고 엄포를 했던 .NET6과 Xamarin.Forms를 바탕으로한

하나의 통합프레임에 대해 2022년 릴리즈 될 것으로 계획 중이라는 소식이다. 

 

앞서 기존 개발자들은 .NET6 이 릴리즈 시기에 맞추어 .NET 6를 경험하고 있으며,  Xamarin을 사용하는 Wpf에

대한 수요도 높아지고 있다고 보여진다.

 

.NET MAUI가 어떤 변화를 가저올지.

 

https://devblogs.microsoft.com/xamarin/whats-new-in-xamarin-and-visual-studio-2022/

 

What's New in Xamarin and Visual Studio 2022

Xamarin has shipped support for the latest Android and iOS versions, and productivity features in Visual Studio 2022. What's next for Xamarin?

devblogs.microsoft.com

 

릴리즈 단계는 아니지만, 관계자는 위의 링크에서 앞으로 출시될 Maui를 경험해 볼 수 있도록 열어두었다.

https://danbi-ncsoft.github.io/study/2018/05/30/study-how_to_read_mathematical_expression.html

 

수식 읽는 법

 

danbi-ncsoft.github.io

 

꿈도 없고 공부에도 놀음에도 흥미가 없던 시절에 눈에 거들 떠도 보지 않던 대수학을 누군가 정리해 놓았기에

당장은 아니더라도 필요할까 링크를 남겨봄니다.

 

예전엔 몰랐지만 이따끔 이러한 수학 기호들을 우연히 보게 되는 계기가 있는데,

주변의 우려와는 달리 보고자 하면 보여지더랍니다.

가상물리 시스템은 실제 환경을 본따 만든 시스템을 통해 시뮬레이션을 수행해 적용 이전의 사고, 불합리, 비용 등의 시행착오를 줄이고자 만들어진 개념이다.

 

CPPS(Cyber Physical Production System)

가상물리시스템을 제품생산 시스템에 적용한다.

에세테크놀러지 등의 업체에서 S-Prodis의 프로그램을 통해 물류장비, 공정장비, 작업자. 창고 등에서 UPF(단위 시간당 제품생산량)에 영향을 주는  Pararmeter 등을 입력하고 시뮬레이션하여 Gantt Chart, 가동실적, 장비별 생산실적,

작업자 Gantt Chart, Lead Time, 실적 Lead Time, Line Balancing 등의 지표를 통해 UPF, Lead Time 등의 공장의 Loss 개선을 목적으로 전문컨설팅 또는 시뮬레이션 프로그램 사업을 하고있다.

 

CPS는 Digital Twin 외에도 Meteverse의 의미와도 같이 사용된다. 생산자동화의 불합리 외에도 더 넓은 의미를 가질 수 있다.

 

예로, GE은 Digital Twin을 이용하여 제품의 3D모델링, Physical System 을 통하여 항공 엔진을 개발하기에 앞서 모델 시뮬레이션을 수해하여 제품 불합리, 고장를 개선하여 효율을 높였다. 

 

GE이 제품 개발을 위한 시뮬레이션에는 3D 게임의 물리엔진이 사용되었다, 오늘날의 Unity 등이 그렇다.

 

OPC-UA,  MQTT RS-232, LAN, WAN 등의 M2M 프로토콜을 통해 통합관제시스템의 Client, HMI, PLC, DATAServer 등을 연결하고 Iot, Digital Twin 의 플랫폼으로 ERP, MES, CPS를 수행하게된다.

관제시스템에서 현장의 Data 읽고, 문제를 파악하고 CPS를 통해 제품 및 공정시스템을 개선하거나 생산장비의 고장을 예측하여 대응 하는 등, 예지보전 수행하기도 한다.

 

앞서 이야기한 M2M 프로토콜, Iot 등의 지원 플랫폼 없이 독립적으로 수행 할 수 없으며 ERP, MES 등과 함께 사용되어야 하기 때문에 중소기업에서 투자하기에는 문턱이 높은 편이다.

 

에세테크놀러지의 사장님과 S-Prodis에 대한 교육을 받을 기회가 있어 교육을 받았다.

다품종 소량생산을 하는 중소기업의 경우. 공장의 불합리 개선에 필요한 Parameter 등이 중소기업에서는 정리되어있지 않은 경우가 허다하여 UPF를 개선하기위한 가동실적, Gantt Chart 등을 신뢰하기 어렵고 실제로 적용하여도 눈에 보이는 개선이 아니기에 라인의 Layout 등 동선을 변경하는 방법 눈에 보이는 개선을 수행하는 경우가 많다고한다.

 

----여기서부터 내 생각 -----

Industry 4.0은 오래된 기술들을 한데 묶어 생산능력을 개선하는 것이고 이를 수행하기 위해 뒷바침해야할 

기술들을 소개하고 있다. 그리고 그러한 기술들을 사용하기 위해 필요한 Parameter, Data 가 필요하다.

 

정부에서 지원하는 교육을 받는 요즘.

4차 산업에 필요한 기술들을 교육 받는다라기보다는 4차 산업을 Taget으로 만들어진 제품들이나. 프로그램을 판매자들이 교육 강사로 투입되어, 자사의 제품 사용법을 교육 받음으로서 잠재적 고객을 양성하는 형태로 서의 기이한 형태의 교육을 경험하고 있다라는 생각을 지속적으로 하게된다.

 

짐작컨데, 중소기업은 그많은 기능들을 전부 사용할 수 없을 분더러 투자해야할 비용들을 감당하기에 어려움이 있으며,

투자하더라도 기대하는 정도의 효과를 보기에 어려움이 있다 라는 것이다.

 

개인적으로는 그러한 일들을 전문프로그래머 등의 인력이 업무지원을 통해 수행할 수 있는 부분이 아닐까 생각한다.

 

다른 견해로는 처음부터 그런 것들을 빌드해 나아가기엔 어려움이 있으니 제조업의 경우 자업에 집중하고 이미 규격화, 제품화된 프로그램을 이용하는 것이 낫다라는 이야기이다.

 

더 많은 돈을 벌기위해 더 많은 돈을 투자해야한다. 얼마나? 라는 생각을 하는 요즘이다.

'Story' 카테고리의 다른 글

머신비전에 관하여..  (0) 2022.02.25
[블로그] 수정 일지.  (0) 2022.02.13
블로그 운영 하며, 카테고리 분류 기준.  (0) 2022.02.13
Licence.  (0) 2021.10.31
2019년 산업통상자원부 혁신과제_장비고도화  (0) 2021.07.27

+ Recent posts