PLC (Programmable Logic Controller, 프로그램 가능 로직 제어기)

산업 플랜트의 자동 제어 및 감시에 사용하기 위한 장치라고 합니다.

단독으로 쓰일 수도 있지만, SCADA 등의 시스템과 함께 사용되기도 한다고 하네요.

제어장치의 일종으로 초기 자동화시스템에서 회로도에따라 릴레이, 접점, 타이머, 카운터 등을 직접 접속하여 사용했는데 다품종 소량생산에 대응을 위해서 많은 시간과 비용이 요구되기 때문에 이를 유연하게 대처할 수 있는 방안으로 등장했다고도 합니다.

정말 쉽게는 그냥 각 고정 기기에서 연결된 수행 내용을 작성해서 저장해두면 각종 기계나 공정을 제어하게 해주는 PC같은거 라고 생각하면 될듯 합니다.

아두이노나…..라즈페리파이도 PLC같은거로 사용할 수 있을까요 ㅎㄷㄷ??(역활은 비슷한거같은데 ;)


생산전략 (MTS, MTO)

MTO : Make to Order - 주문 생산 방식

  • 고객주문 요청 시점부터 생산을 시작하는 방식이라고 합니다 , 요청의 수용범위는 낮으며 생산속도는 빠르다고 합니다, 원하는 것만 생산하기 때문에 낭비가 적고 다양한 요구가 증대되기에 신제품 출시 재고/비용 절감 등의 효과를 볼 수 있는 방식이라고 합니다.

MTS : Make to Stock - 계획 생산 방식

  • 그럼 MTO가 좋아 보이는데…이런 개념이 나왔을까 하긴 했었는데 상황에 따라서 사용되기도 한다고 합니다, 일단 확보된 재고를 다 판매하게 될지는 알수없는건 당연하겠지만 재고자체의 가치가 달라지는 상황에 따른 손익이 발생할 수 있으며 최악은 그저 재고로만 남게 되는 경우도 있을 수 있겠네요 이를 위해서 재고관리를 좀더 신경 써야 하는 방식이라고 합니다.

BOM(Bill Of Material, 자재명세서)

자재 명세서 (Bill of Materials, BOM)은 제품을 구성하는 모든 부품들에 대한 목록이다. 부품이 복잡한 요소들로 구성되어 있는 조립 품인 경우에는 계층적인 구조로 작성될 수 있다.

BOM, MMD, PLM 등의 단어를 엄청 들어보면서 먼저 BOM을 정리해봅니다..기준정보 라고 불리는 ERP를 포함한 도메인에서 관리하는 정보형태 같습니다.
BOM과 처방전을 화학에서는 같이 사용하던데 느낌상 BOM은 최초 발행된 조합 정보이며 처방전은 실제 생산하면서 배합 양 비율 등이 조정되는 업데이트 되는 정보라고 이해하고있습니다.

2019-02-14 추가
제조 방법에 따라 다르겠지만 보통 기준정보에서 최초 정의된 원료와 부원료의 목록과 배합비 장비의 운전컨디션정보(온도, 암페어 등)를 정의해둔 문서 혹은 DB화된 정보입니다.

BOM을 기준으로 실제는 수치변경을 미세하게 하는경우가 많으며 특히 화학공정은 수치와 결과물이 날씨,온도에 민감하게 변경되기에
처방전을 따로 관리하고 가장 최근의 처방을 최신 처방전으로 업데이트 해서 다음 배치의 처방전에서 참고하는 프로세스로 많이 사용하는 듯 합니다.

“봄” 이라고 발음대로 부르는 사람은 거의 없어보이며 “비오엠” 이라는 통용되는 발음으로 사용되고 있는 듯 합니다.
해당 BOM과 처방전은 LIMS에서 관리하느냐 MMD에서 관리하느냐의 OwnerShip이 조금 다른경우도 있으며 이는 해당 조직 구성과 정의된 R&R따라서 관리대상을 지정하면 됩니다.


Lot No, Batch No

제조단위는 동일한 조건 아래에서 만들어진 균일한 특성 및 품질을 갖는 제품군이다. 로트(lot), 배치(batch)라고도 한다. 제조단위를 나타내는 번호를 제조단위번호라고 하며 제조번호, 로트번호(lot number), 배치번호(batch number)라고도 한다.

흠..제일 많이 듣는말 중에 하나인 듯하고 역시 lot tracking (로트 추적)에 관련된 대화 이슈들이 많이 들립니다.

lot number (로트 번호)가 같다 라는 개념을 1개의 공정에서 나온 결과물에 부여되는 일련번호 라고 이해하고있는 상황이며

AAA 라는 고유제품코드를 가진 제품이 있으며

이것이 3개의 라인(같은 공정)에서 생산되고있으면
1라인 : AAA-01
2라인 : AAA-02
3라인 : AAA-03
이런 식으로 구분한다 라는 정도로 이해하고 있습니다 ㅋㅋ 맞나 ㅠㅠ

lot 번호를 부여하는 방식은 기업마다 Rule을 정해서 부여하는듯 하며 이를 통합 Barcode시스템연동시 부여된 번호를 관리하는 포인트가 생기는듯 합니다.

lot 번호의 목적은 역으로 추적하기 위함이 가장 많은 듯 하다(현재 까지 종합해본 결론은…), 불량이 나거나 결과물에 문제 발생시

몇 날 몇일 몇시즈음에 어느 공정에서 문제가 생긴 건지 를 알기 위함이 가장 크게 적용되는듯 합니다…

Batch = 생산계획에 의해 한번 셋팅으로 생산하는 단위
Lot = 그 Batch에 이어 나오는 제품 단위를 의미

아직은 이렇게 이해하고 접근하고 있지만 마침 제가 담당하게 될 부분이 통합라벨관리(채번까지인지 ..ㅠ?)가 되어서 앞으로 도 확실히 정리해야 하겠습니다~


Barcode

바코드는 1948년 미국에서 발명했다고 합니다.

다양한 폭을 가진 Bar(검은 막대부분)와 Space(흰색막대?)의 배열 패턴입니다, 조합에 의해 영 숫자, 기호 등을 광학적으로 판독하기 쉽게 부호화 한 것 입니다.

2진 코드로 부호화 해서 Bar와 Space의 농도,굵기를 다르게 표함으로써 “0”, “1”을 나타내는 직렬신호의 조합으로 표현됩니다.

1970년대 초반 IBM 사는 음식 포장지에 스캐너로 가격과 음식 정보를 판독할 수 있는 코드를 디자인해 달라는 주문을 받았습니다. 당시 이 일을 맡았던 IBM사의 엔지니어 조지 로러(George Laurer) 씨는 1940년대에 조셉 우드랜드(Joseph Woodland) 씨가 개발한 황소의 눈동자 모양으로 생긴 원형의 스캔 코드를 기반으로 하라는 요청을 받았습니다. 하지만 그는 이 원형 코드에서 문제점을 발견했습니다. 고속 인쇄기로 원모양의 스캔 코드를 포장지에 인쇄할 경우 원의 모양 중 훼손되는 부분이 발생할 확률이 크고 스캐너가 이를 인식하지 못할 가능성이 커지는 겁니다. 따라서 그는 좁고 긴 막대 모양의 코드를 발명했습니다. 로러 씨가 발명한 새로운 코드는 바코드라고 더 잘 알려진 통일 상품코드(Universal Product Code)로 1973년 식료품점 컨소시엄이 채택한 이후 전 세계에서 이용되고 있습니다. 바코드를 개발하게 된 배경에 대해서 로러 씨는 자신의 실수 때문에 가격이 찍히지 않을까 두려워하는 식료품 점원들이 있었다고 말합니다. 예를 들어 냉동 식품을 다루는 사람들은 제품에 얼음이 붙어 있어 제품의 가격이 잘 찍히지 않을 경우 그것이 자신의 탓으로 여겨지는 것이 두려워 제품의 특성이나 환경에 관계 없이 가격을 확인할 수 있는 시스템을 원했고 이렇게 해서 바코드가 탄생하게 된 것입니다. 로러 씨는 사람들에게 자신이 바코드를 발명했다고 말하면 돈을 많이 벌었을 것이라고 가정하지만 실제로 그는 아무런 저작권료를 받지 않았습니다. IBM 역시 이를 특허로 신청하지 않았습니다.


사실 뭐가 맞는 말이던간에 Barcode에 대한 공부를 위한 기분 전환입니다 ㅋ..

결국 바코드는 컴퓨터가 2진수로 인식할 수 있게 만든 것입니다, 이를 스캐너를 통하여 읽을 수 있는데 검은 부분은 빛을 흡수해서 적은 양을 반사하고, 흰 부분은 많은 양의 빛을 반사합니다.

스캐너는 아날로그 - 디지털 변환기가 있어서 이를 통해 빛의 강약에 따라 전기신호로 변경되고 이 신호가 0,1 로 변환되어 다시 우리가 보는 문자 혹은 숫자로 나타나게 됩니다.

자세한 설명은 위의 링크에서 잘 설명되어 있습니다, 저도 참고하고 공부중 입니다.

바코드 표준
기본 원리는 그렇다 치고 이를 실제 사용하거나 주고 받기위해서는 역시나 표준이 필요합니다.

바코드 자체의 전체 길이도 어느정도는 표준화 하지 않고 서는 리더기 장비를 만드는 업체는 여러 사이즈의 기계를 만들어야 하는 기본적인 비합리 함이 발생되기 때문이기도 하고 표준을 정하지 않고 사용하면 입출력의 시간을 줄이고 편리하게 사용하고자 하는 취지역시 이상한 방향으로 돌아가게 되지 않았을까 싶습니다.

역시 뭐든 표준이 정해지는 건 중요하다고 생각합니다 . ㅎ_ㅎ
정말 표준이라고 해도 역시 많은 표준이 있는데…
1973년 미국음식연쇄조합에서 세계상품코드(UPC)를 도입한 게 처음이고 등등등 가다가!

1988년 EAN국제기구에 가입하면서 우리나라는 국가 번호코드 880을 부여 받아 한국상품번호를 사용하고 있습니다, 이후에는 통합통합 하더니 미국과 유럽이 통합된 국제 표준코드인 GS1체계가 2005년 출범하였다고 합니다.

이후에는 실제 각 표준에 대한 내용과 바코드를 만들기 위한 공부를 정리 예정입니다.

감사합니다.


MES(생산관리시스템, Manufacturing Execution System)

MES는 Manufacturing Execution System 의 약어라고 합니다.

생산관리시스템 / 제조실행시스템 으로 불리고 있더라고요 정확한 표현은 추후에 라도 업데이트 하겠습니다.

우선 저처럼 MES의 약어가 무엇인가 부터 찾으시는 분들을 위해 제가 먼저 검색해보고 잘 이해가 되었던 링크를 하나 공유해 드리겠습니다.

미라콤 이라는 회사 웹사이트에 가보면 다양한 정보가 있더라고요
특히 MES란 무엇인가? 라는 카툰으로 된 설명이 이해하기가 쉬웠습니다.
참고로 전 이 기업과 전혀 관계가 없습니다!

처음에는 공장자동화(Factory Automation)? 비스 무리한 개념으로 접근을 했었 습니다…
사실 관점에 따라 다르겠지만(저도 검색하다 보니 엄청 난감하고 아직도 정리가 안 끝나더라고요)

비슷하게 혼동이 가던 개념이 스마트팩토리(Smart Factory) 였습니다…
이걸 사무환경으로 그대로 옮겨서 이해를 하려고 노력을 해봤는데요…이렇습니다….

사무자동화(Office Automation)와 스마트오피스(Smart Office)? 가 있다고 가정을 하고 -_-;

회사에서 연/월차 등의 업무처리에 인쇄물 직접 서면보고 형식의 프로세스를 가지고있다 라고 가정을 해 봤습니다(요즘은 잘 없겠죠~?)…제가 이런 프로세스의 회사에서 초창기에 근무한적이 있었습니다…

누가 힘드냐!!!

가야할 사람 : 결제권자 만나기 겁나 힘들고 이거 들고가면 꼭 이상한 일정체크와 농담해서 사람 민망하게 합니다..
결제권자 : 허…이놈이 분명 내일까지 할일이 있는데…계속 찾아와서 좀 쉬자고 들이댑니다…
경리부 대리누나(그땐 막내였거든요 ㅎ) : 연말마다 연차보상비 계산하느라 며칠밤 집에도 못 가고 계산기 다 뚜드리고 정리 끝나서 갈려고 하면 “아 찾았어요 이러고 겁나들 몰려옵니다 - _-좀비WAR!!”
경리부 책임이사님 : 경리부 대리누나한테 이 아이는 왜 우리회사 지급일수보다 3일을 더 쉬었니? 라며 보상비를 받아오라 하십니다 ㅋㅋㅋㅋ
그냥 억울한 사람 : 분명 그날 제출도 하고 결제도 하고 다했는데….그날 급한업무 때문에 못 쉬었는데….그날이 몇일이었는지…(월요일날 출근해서 토요일 점심 먹고 집에 가고 이랬는데!!!) 기억이 안나 서 그냥 쉰 걸로 치고 마음을 비웠더니 경리부 책임이사님이 보상비 내노라고 버럭버럭 하십니다 ㅋㅋ
사장님 : 내 돈이….이것들 양심에 따라 지급되는 느낌이라 자선사업가가 된 느낌입니다 ;;
웃자고 쓴…..실화입니다 ㅡㅡ……..이직 후에는 그룹웨어가 잘(?) 되어있어서 이런 일들이 모두 전자결제를 통한 업무처리 프로세스가 도입되어 있었습니다.

이로써 위에 해프닝에서 일어난 누수라고 볼 수 있는 것들(시간/인력, 부정확한 정보로 인한 데이터 관리불가와 정보의 신뢰도 하락 등등등등등….)을 막을 수 있는 좋은 패러다임이 사무자동화의 한 축이었다고 생각할 수 있다..라고 저는 생각해 봅니다 이를 공장자동화로 매칭 을 시켜봤습니다..물론 많은 차이가 있고 전문분야도 아니기때문에 어설프게 이해한 상황일지도 모릅니다.

이번엔 정말 이해를 위한 억지 이해를 써야할 듯 해서 죄송스럽지만….적어보겠습니다

어떤 웹사이트 프로젝트가 기획/개발/디자인/퍼블리싱 구간 어디까지 진행되고있는지를 회의에서 물어 보시는 사장님의 기습공격을 받은 사람이 어……..그룹웨어에는 지금 투입인력 전체비용 프로젝트기간 외에는 그런 자세한 정보가 나와있지 않아서 나와있고 아는 부분만 답변을 하게 됩니다……당연히 알아야하는 PM역활 등의 사람들이야 숙지하고 있겠지만 외에 관련자/확인자 등은 확인하려면 역시나 해당 관련업무 숙지자를 만나야 정확한 상황을 파악 할 수 있습니다.

이는 역시 또다른 투입인력과 인력운영에 여러가지 누수가 생기게 됩니다(직원들이야 좋죠 ㅋㅋㅋㅋ…그런데 회사 망하면 힘들잖아요 ㅠㅠ), 이에 스마트 오피스라는 프로세스를 도입하기로 마음먹고 이에 각 직군 별 자세한 진행상황을 확인할 수 있게 됩니다..이는 투입인력이 과부하 상황에서 어려움을 겪는지 혹은 과 투입되어 비용이 낭비되고있는지 등의 확인이 수월해 질 수 있습니다.

이를 즉 스마트 오피스로 대입해서 이해한 상황입니다.

정말 말이 앞뒤도 안 맞고 이상하다고 저도 느끼지만…저는 아직 이정도 수준이라 ㅠㅠ

크흠…급 정색하지만

MES는 이러한 스마트오피스 와 완전 일치되는 개념은 아닌 듯 하지만 별개로

해당 공정을 정보화 하며 모니터링하고 문제(제품의 품질, 공정상 불량)를 추적 가능하게 하는 시스템에 속하는 하나의 작은 서브 시스템 이라고 이해하고 시작하기로 했습니다.

와서 진짜 깜짝 놀란건 모든 용어가 처음 듣고 용어들을 모르면 대화가 어렵다는 점 이었습니다, 지금은 다행이 PI기간이고 제가 적응할 시간이 있는 참이어서 디테일한 정보습득을 정말 부지런하게 메모하고있는 와중입니다, 아마 용어만 정리해도 엄청날 듯 합니다…QMS, WMA, ERP, Silo, 등등등..수도 없습니다..ㄷㄷㄷㄷㄷ

앞으로도 정리하면서 공부하겠지만 처음이니 만큼 사설이 반인 듯 했네요…….

많은 지적 부탁드리고 첫 기고 글에서 많은 변화가 있으리라 생각합니다(정확한 개념을 잡으면 수정하겠습니다).

읽어 주셔서 감사합니다.


Twilio SMS

Twillo를 사용해서 SMS를 공짜로 보내보자..(이제는 공짜가 아닙니다..) 가 취지였습니다.

Azure계정을 사용해서 가입합니다.




역시나 아무 의미없는 맘에도 없는 환영을 받습니다..ㅋㅋ

그럼 Twilio 콘솔에서 이것저것 처음사용자용 메뉴를 한참 보게끔 합니다..한번 둘러보시면 됩니다…
나중에 데시보드에서 Account SID, Auth Token을 받을 수 있습니다. 일단 여기까지만 받으시면 다음 개발로 넘어가겠습니다.

asp.net Console응용프로그램 프로젝트를 그냥 만드신 후에
위에 넣어드린 참고링크를 그대로 따라하시면 됩니다.
지금 Azure 가입자 대상 Twilio 가입을 받으면 10$를 넣어주는 공짜 서비스를(2017-05-30 현재 기준…나중에 원망 마세요) 행사중(?) 이네요 ㅎ

콘솔 응용프로그램에서의 코딩은 상당히 간단합니다..

Sample
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
namespace HelloTwilio
{
class Program
{
static void Main(string[] args)
{
// Find your Account Sid and Auth Token at twilio.com/console
const string accountSid = "본인 Sid";
const string authToken = "본인 토큰";
TwilioClient.Init(accountSid, authToken);
var to = new PhoneNumber("+821071706020");
try
{
var message = MessageResource.Create(
to,
from: new PhoneNumber("+12563054160"),
body: "Twilio 에서 보냅니다!!!!");
Console.WriteLine(message.Sid);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}

}
}
}

물론 Nuget에서 Twilio 당연히 추가 하셨어야 합니다.
제가 왜 Twilio 서비스에 관심을 가지게 되었냐면…. 어떤분이 비용도 비싸다고 하시는데

사실
참고링크
이부분 때문입니다……
이게 과연 기존 SMS전송방식(웹서버 혹은 분할전송에 매번 비용을 지불하면서 사용하는)서비스를 이용하지 않아도 Azure호스팅 혹은 AWS호스팅에서 1개의 서비스로서
활용도가 있을까를 앞으로 알아보려고 이렇게 삽질아닌 초간단 삽질을 해 보았습니다..ㅎㅎ

꼭 해보고 비용까지 비교한(저의 고객사 기준 사용 업체별!!) 내용까지 공유드릴 수 있도록 노력해보겠습니다.!!

혹시모르니 인증샷 ㅎ?


Life Cycle of TempData in ASP.Net MVC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public ActionResult ViewInfo(string memId, CommonModel param)
{
//파라미터가 없는 접근을 차단
if (!NoParamValueCheck(memId))
{
return RedirectToAction("NoParameterValue", "Home");
}

MemberView M = new MemberView
{
CommonParam = param
,
MemberInfo = _MemberService.MemberView(memId, MemberInfo.GetMemberGradeCode(), param)
};

//의도적인 예외처리
if (M.MemberInfo == null)
{
CustomLog4Net customLog = new CustomLog4Net();
customLog.ErrorToLog(this.ControllerContext);
return RedirectToAction("WrongParameterValue", "Home");
}

return View(M);
}

상세화면 -> 수정화면 -> 수정완료 -> 다시 상세화면 이라는 시나리오상에서 void형 EditProc Controller를 사용했지만 실제로 프로시저에서는 @returnValue 라는 int형 결과를 리턴 하는 상황입니다 Model에서 부터 out Parameter로 결과를 받는 변수를 받아왔으며 실제 EditProc Controller는

1
return RedirectToAction("ViewInfo", new { memId = dto.memId, viewParam = param });

를 리턴 합니다, 이때 ViewBag으로 결과값을 유지할 줄…알았습니다 이게 저에게는 애매한 부분 이었어서 TempData로 경했던 과정과 이유를 남겨놓습니다.
html bootstrap template 같은 거 찾아보면 1회 휘발성 notification box 등을 많이 제공하더라고요 PHP나 Classic ASP같은거로 작업한다고 하면 catch처리를 했던 기억이 있네요…왜 그렇게 무식하게 했었을까요….그게 더 공수가 들어갔거든요..
각설하고 View.cshtml에서
view.cshtml
1
resultNum TempData : @TempData["resultNum"]

이렇게 TempData를 호출하면 새로고침시 정보가 사라지는 현상을 볼 수 있습니다…

여기서 TempData의 구간은 Controller <-> Controller 이렇게 명시되어 있습니다, ViewBag, ViewData와는 확실히 용도가 분리되어 있습니다.
TempData.Keep 등으로 생명 주기를 연장도 가능합니다, 그런데..특별한 사유가 아니라면 사용할 일이 없어 보이네요.
사실 말이 거창합니다만..
아래와 같은 시나리오 입니다..


MSSQL-sp_send_dbmail(Transact-SQL)

MSSQL에서 자동메일을 특별한 양식없이 알림성으로 받기 좋은 방법이 있습니다, sp_send_dbmail 이라고 하는 놈인데요 이게 express버전에서는 메뉴가 없습니다, 정품을 사용하고 설치옵션에서 해당사항을 체크해야 보이더라고요

데이터베이스 메일 > 데이터베이스 메일구성 에서 없으면 등록하면 됩니다

설정은 끝입니다, POP3 설정이랑 비슷하죠? 당연히 SMTP설정은 되어있어야 합니다.
SQL Server 에이전트 설정을 해주시면 됩니다 이제

이후 Batch Job을 걸어서 호출하는 방식 입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sp_configure 'show advanced options', 1
sp_configure 'show advanced options', 1
go
reconfigure
go
sp_configure 'Database Mail XPs',1
go
reconfigure
go

use msdb
go

declare @body_str varchar(2000);

set @body_str = '메일이 ' + @@SERVERNAME + '로 부터 발송되었습니다.'
set @body_str = @body_str + ''
set @body_str = @body_str + '발송 시간 : ' + cast(getdate() as varchar(20)) + ''
set @body_str = @body_str + '발송 머신 : ' + HOST_NAME() + ''
set @body_str = @body_str + ''
set @body_str = @body_str + '감사합니다.'

exec msdb.dbo.sp_send_dbmail
@profile_name = 'UserEmailSender'
,@recipients = 'jklee@wylie.co.kr'
,@subject = '데이터베이스 메일 보내기 테스트'
,@body = @body_str
,@body_format = 'html';



----------결과조회

use msdb

select *
from sysmail_mailitems


select *
from sysmail_log

결국 메일에 따라서 스팸으로 가기도 하겠지만 양식 맞추는게 노가다성으로 보여지긴 합니다만 저는 이거 하나로 매일 받아야하는 알림을 약 2년여간 아주 잘 활용했었습니다.


MS Outlook Email 관리 AddIn - 4

크흛..
정말 별거 아니네요…그래도 좋은 공부였습…크흛..ㅠㅠ