<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NTREXGO - 디바이스마트, 엔티렉스 컨텐츠 통합 사이트 &#187; 쇼케이스</title>
	<atom:link href="http://www.ntrexgo.com/archives/tag/%ec%87%bc%ec%bc%80%ec%9d%b4%ec%8a%a4/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ntrexgo.com</link>
	<description>엔티렉스, 디바이스마트 컨텐츠 통합 사이트</description>
	<lastBuildDate>Thu, 03 Mar 2022 06:47:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>[51호]PM2008 먼지센서 아두이노에 연결해 제어하기</title>
		<link>http://www.ntrexgo.com/archives/36398</link>
		<comments>http://www.ntrexgo.com/archives/36398#comments</comments>
		<pubDate>Mon, 24 Dec 2018 00:00:45 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[특집]]></category>
		<category><![CDATA[51호]]></category>
		<category><![CDATA[showcase]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[레몬랩스]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[먼지센서]]></category>
		<category><![CDATA[쇼케이스]]></category>
		<category><![CDATA[아두이노]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=36398</guid>
		<description><![CDATA[디바이스마트매거진 51호 &#124; 큐빅의 PM2008 미세먼지 센서는 3M, 샤오미와 같은 글로벌 업체의 공기청정기나 공기질 측정기에 많이 사용되고 있습니다. 이 글에서는 작은 크기에 사용하기도 쉬운 큐빅의 미세먼지 센서를 아두이노에 연결해 사용하는 방법에 대해 소개합니다.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-1.png" rel="lightbox[36398]"><img class="alignnone size-large wp-image-36402" alt="51 showcase pm2008 (1)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-1-620x192.png" width="620" height="192" /></a></p>
<p><span style="background-color: #333300;color: #ffffff"><strong>미세먼지 농도를 알려주는 센서 PM2008</strong></span></p>
<p><span style="font-size: x-large"><strong>PM2008 먼지센서 아두이노에 연결해 제어하기</strong></span></p>
<p>&nbsp;</p>
<p style="text-align: right">글 | 레몬랩스 정봉진</p>
<p>&nbsp;</p>
<p>큐빅의 PM2008 미세먼지 센서는 3M, 샤오미와 같은 글로벌 업체의 공기청정기나 공기질 측정기에 많이 사용되고 있습니다. 이 글에서는 작은 크기에 사용하기도 쉬운 큐빅의 미세먼지 센서를 아두이노에 연결해 사용하는 방법에 대해 소개합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-2.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36403" alt="51 showcase pm2008 (2)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-2.png" width="601" height="299" /></a></p>
<p>PM2008은 광 산란 방식의 미세먼지 센서입니다. 원래 미세먼지는 총량을 재야하기 때문에 상당히 큰 장치가 필요합니다. 물론 그와 같은 장치의 가격 또한 수억대에 달합니다. PM2008은 미세먼지를 산업에서 쉽게 측정 가능하고 제품화시킬 수 있는 충분한 가격에 만들 수 있게 하기 위해 광 산란 방식을 사용합니다. 실제 총량 방식의 계측 값과의 오차가 중요한데, PM2008은 총량 방식과 오차 범위 10% 내외로 상당히 정확한 측정이 가능합니다. PM2008은 UART와 I2C 통신을 지원하며, PM1.0, PM2.5, PM10을 전부 측정이 가능합니다. 참고로 여기서는 I2C로만 PM2008 센서 제어하는 것을 해봅니다.<br />
디바이스마트에서 파는 PM2008의 경우 센서와 함께 PM2008용 아두이노 쉴드도 함께 판매합니다. 다른 아두이노 쉴드와 마찬가지로 위, 아래 모두 핀헤더가 달려있어 점퍼 와이어를 별도로 연결하거나 추가 쉴드를 사용할 수도 있습니다. 또한 각 핀에 대한 번호가 적혀있어 헷갈리지 않고 쉽게 와이어를 연결할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-3.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36404" alt="51 showcase pm2008 (3)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-3.png" width="256" height="238" /></a></p>
<p>PM2008에는 공기를 빨아들이는 부분 (빨간색)과 공기를 내보내는 부분 (주황색)이 있습니다. 이 두 부분의 근처에는 큰 먼지나 수분이 닿지 않도록 하는 것이 좋습니다. 또한 PM2008 쉴드 위쪽으로 다른 쉴드를 꽂지 않는 것이 좋습니다. 공기의 흐름이 원활하지 못해 부정확한 값이 나올 수 있기 때문입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-1.jpg" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36401" alt="51 showcase pm2008 (1)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-1.jpg" width="592" height="271" /></a></p>
<p>한번 PM2008 센서를 아두이노에 연결해 사용해보겠습니다. 우선 PM2008 센서를 아두이노 쉴드에 끼워 아두이노에 꽂아줍니다. 센서를 쉴드에 고정시킬 때는 왼쪽 그림과 같이 양면테이프를 사용해 센서가 움직이지 않게 고정하는 것이 좋습니다.<br />
센서를 아두이노에 연결했다면, 하드웨어 준비는 끝난 겁니다. 이제 컴퓨터로 넘어가 아두이노 IDE를 열어줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-4.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36405" alt="51 showcase pm2008 (4)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-4.png" width="601" height="205" /></a></p>
<p>PM2008 쉴드를 이용하려면 PM2008 I2C 라이브러리가 필요합니다. PM2008 I2C 라이브러리는 라이브러리 매니저를 이용해 쉽게 설치 가능합니다. 메뉴에서 [스케치] &#8211; [라이브러리 포함하기] &#8211; [라이브러리 관리...]를 선택합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-5.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36406" alt="51 showcase pm2008 (5)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-5.png" width="604" height="163" /></a></p>
<p>메뉴 선택 후 라이브러리 매니저가 뜨면 검색창에 “PM2008”을 입력합니다. 검색하면 그림과 같이 PM2008 I2C 라이브러리를 확인할 수 있습니다. PM2008 I2C 라이브러리를 설치해줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-6.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36407" alt="51 showcase pm2008 (6)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-6.png" width="605" height="179" /></a></p>
<p>메뉴에서 [파일] &#8211; [예제] &#8211; [PM2008 I2C] &#8211; [PM2008_I2C_test]를 선택합니다. 선택하면 PM2008 센서의 모든 값을 확인할 수 있는 예제가 열립니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-7.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36408" alt="51 showcase pm2008 (7)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-7.png" width="602" height="485" /></a></p>
<p>코드를 수정할 필요없이 곧바로 업로드를 눌러줍니다. 업로드가 완료되면 시리얼 모니터를 엽니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-8.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36409" alt="51 showcase pm2008 (8)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-8.png" width="603" height="357" /></a></p>
<p>시리얼 모니터를 열면 그림과 같이 PM2008 센서에서 얻을 수 있는 모든 값을 확인할 수 있습니다. GRIMM 계측기 기준으로 환산된 값, TSI 계측기 기준으로 환산된 값 그리고 파티클 개수를 카운트 한 Raw 데이터 값이 출력됩니다.<br />
다음으로 LED를 사용해 눈으로 곧바로 확인 가능한 간단한 미세먼지 센서 모니터를 만들어 보겠습니다. 다음과 같은 부품이 필요합니다.<br />
· 5 mm LED 4개<br />
· 330옴 저항 (220 옴도 가능)<br />
· 수수 점퍼와이어 9개<br />
· 브레드보드</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-9.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36410" alt="51 showcase pm2008 (9)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-9.png" width="599" height="284" /></a></p>
<p>미세먼지 상태를 4단계로 나누어 각 단계에 맞춰 LED가 켜지도록 해보겠습니다. 물론 LED를 4개의 색깔로 나누어 설치하거나 3색 LED를 사용하여 응용하는것도 가능합니다. 아래 회로와 같이 저항과 LED를 아두이노에 연결해줍니다. 연결할 때는 PM2008 센서와 쉴드를 꽂은 상태에서 연결하면 됩니다.</p>
<div class="symple-box gray none" style="text-align:left; width:100%;"> 
<p>#include &lt;pm2008_i2c.h&gt;</p>
<p>PM2008_I2C pm2008_i2c;</p>
<p>void setup() {<br />
pm2008_i2c.begin();<br />
Serial.begin(9600);<br />
pm2008_i2c.command();<br />
delay(1000);</p>
<p>pinMode ( 3, OUTPUT);<br />
pinMode ( 4, OUTPUT);<br />
pinMode ( 5, OUTPUT);<br />
pinMode ( 6, OUTPUT);<br />
}</p>
<p>void loop() {<br />
uint8_t ret = pm2008_i2c.read();</p>
<p>uint8_t pm1p0_grade = 0;<br />
uint8_t pm2p5_grade = 0;<br />
uint8_t pm10p_grade = 0;<br />
uint8_t total_grade = 0;</p>
<p>if (ret == 0) {<br />
// PM 1.0<br />
if (pm2008_i2c.pm1p0_grimm &lt; 16) {<br />
pm1p0_grade = 1;<br />
} else if (pm2008_i2c.pm1p0_grimm &lt; 51) {<br />
pm1p0_grade = 2;<br />
} else if (pm2008_i2c.pm1p0_grimm &lt; 101) {<br />
pm1p0_grade = 3;<br />
} else {<br />
pm1p0_grade = 4;<br />
}</p>
<p>// PM 2.5<br />
if (pm2008_i2c.pm2p5_grimm &lt; 16) {<br />
pm2p5_grade = 1;<br />
} else if (pm2008_i2c.pm2p5_grimm &lt; 51) {<br />
pm2p5_grade = 2;<br />
} else if (pm2008_i2c.pm2p5_grimm &lt; 101) {<br />
pm2p5_grade = 3;<br />
} else {<br />
pm2p5_grade = 4;<br />
}</p>
<p>// PM 10<br />
if (pm2008_i2c.pm10_grimm &lt; 31) {<br />
pm10p_grade = 1;<br />
} else if (pm2008_i2c.pm10_grimm &lt; 81) {<br />
pm10p_grade = 2;<br />
} else if (pm2008_i2c.pm10_grimm &lt; 151) {<br />
pm10p_grade = 3;<br />
} else {<br />
pm10p_grade = 4;<br />
}</p>
<p>// Get worst grade<br />
total_grade = max(pm1p0_grade, pm2p5_grade);<br />
total_grade = max(total_grade, pm10p_grade);</p>
<p>digitalWrite( 3, LOW );<br />
digitalWrite( 4, LOW );<br />
digitalWrite( 5, LOW );<br />
digitalWrite( 6, LOW );</p>
<p>switch (total_grade) {<br />
case 1: {<br />
Serial.println(&#8220;Good!&#8221;);<br />
digitalWrite( 3, HIGH );<br />
break;<br />
}<br />
case 2: {<br />
Serial.println(&#8220;Normal!&#8221;);<br />
digitalWrite( 4, HIGH );<br />
break;<br />
}<br />
case 3: {<br />
Serial.println(&#8220;Bad!&#8221;);<br />
digitalWrite( 5, HIGH );<br />
break;<br />
}<br />
case 4: {<br />
Serial.println(&#8220;Worst!&#8221;);<br />
digitalWrite( 6, HIGH );<br />
break;<br />
}<br />
default:<br />
break;<br />
}<br />
}<br />
delay(2000);<br />
}</p>
</div>
위와 같이 코드를 작성합니다. Gist 페이지(bit.ly/2G43ZtR)를 들어가면 코드를 쉽게 복사할 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-10.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36411" alt="51 showcase pm2008 (10)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-10.png" width="602" height="454" /></a><br />
코드를 작성한 뒤 곧바로 업로드를 합니다. 업로드가 완료되면 시리얼 모니터를 실행해줍니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-11.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36412" alt="51 showcase pm2008 (11)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-11.png" width="602" height="284" /></a></p>
<p>시리얼 모니터를 열면 현재 미세먼지 상태를 Good, Normal, Bad, Worst 이렇게 4단계로 나누어 표시해주는 것을 볼 수 있습니다. 예제 중에 [파일] &#8211; [예제] &#8211; [PM2008 I2C] &#8211; [simple_monitor]를 실행했을 때도 위와 똑같은 결과를 볼 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-12.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36413" alt="51 showcase pm2008 (12)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-12.png" width="601" height="337" /></a> <a href="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-13.png" rel="lightbox[36398]"><img class="alignnone size-full wp-image-36414" alt="51 showcase pm2008 (13)" src="http://www.ntrexgo.com/wp-content/uploads/2018/12/51-showcase-pm2008-13.png" width="602" height="338" /></a><br />
하드웨어 같은 경우에도 그림과 같이 미세먼지 단계를 LED를 통해 확인할 수 있습니다. 이와 같이 PM2008 센서와 쉴드를 사용하면, 기존 적외선 방식의 센서보다 간단하고 쉽게 작품을 만들 수 있습니다.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/36398/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[33호]방사능에 대처하는 현명한 자세는?</title>
		<link>http://www.ntrexgo.com/archives/29862</link>
		<comments>http://www.ntrexgo.com/archives/29862#comments</comments>
		<pubDate>Sun, 15 Nov 2015 00:20:10 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[33호]]></category>
		<category><![CDATA[showcase]]></category>
		<category><![CDATA[디바이스마트]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[방사능]]></category>
		<category><![CDATA[쇼케이스]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=29862</guid>
		<description><![CDATA[디바이스마트 매거진 33호 &#124; 방사능에 대한 일반인들의 관심도 점점 높아져서 방사능 측정기를 구매하는 소비자들도 꾸준히 늘어나고 있는 추세입니다. ]]></description>
				<content:encoded><![CDATA[<p><img alt="33 쇼케이스 001" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-001.jpg" width="371" height="363" /></p>
<p><span style="font-size: large"><strong>Showcase</strong></span></p>
<p><strong><span style="font-size: x-large">방사능에 대처하는 현명한 자세는?</span></strong></p>
<p style="text-align: right">글 | 아나로그리서치시스템</p>
<p>&nbsp;</p>
<p>2011년 후쿠시마 원전 사고가 난 이후, 4년의 시간이 흘렀습니다. 그때의 충격은 점차 사라지고 있지만, 현재까지도 사고의 수습은 완료되지 않았습니다. 후쿠시마 원전에서는 매일 400톤의 오염수가 생성되고 있고, 800억 베크렐의 오염물질이 바다로 흘러들어가고 있습니다. 이미 2012년 우리나라 토양에서도 후쿠시마발 세슘이 검출되었습니다.<br />
후쿠시마 원전 사고 전까지 방사능 측정기는 관련업계 종사자들이나 전문가들만의 영역이었습니다. 그러나 사고 이후, 방사능에 대한 일반인들의 관심도 점점 높아져서 방사능 측정기를 구매하는 소비자들도 꾸준히 늘어나고 있는 추세입니다. 그러나 구매한 방사능 측정기를 효과적으로 활용하고 있는지는 의문이 남습니다.</p>
<p><span style="font-size: medium;color: #ff0000"><strong>방사능 감지 센서의 종류</strong></span></p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center"><img alt="Figure 1 시중에 판매되고 있는  휴대용 방사능 측정기" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-01.jpg" width="335" height="310" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 1 시중에 판매되고 있는 휴대용 방사능 측정기</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>시중에는 다양한 종류의 방사능 측정기가 출시되어 있습니다. 그에 따라 센서의 종류도 다양합니다. 휴대용 방사능 측정기에서 일반적으로 사용하는 센서에는 다음과 같은 종류가 있습니다.</p>
<p><strong>GM-tube (Geiger-müller tube)</strong><br />
일반적으로 많이 사용하는 센서입니다. GM-Tube 방식은 가스가 들어있는 관에 고전압(500V 이상)을 인가하고, 방사선에 의해 발생하는 전자를 측정하는 원리입니다. 비교적 큰 신호가 발생하여, 기기제작이 어렵지 않아 많은 측정기에 도입되고 있는 센서 방식입니다.<br />
그러나 고전압에 의한 표면의 산화로 인해 수명이 3년 이하이고, 감도가 변화되어 6개월마다 교정이 필요합니다.</p>
<p><strong>반도체센서</strong><br />
외부로부터의 신호를 전기적인 신호로 바꾸어 나타내는 센서입니다. GM-tube에 비해 저전압(50V 이하)을 사용하여, 수명이 길고 감도의 변화가 거의 없습니다. 그러나 감도가 낮은 편이고, 방사능 의외의 외부 자극(전자파, 진동)에도 반응한다는 단점이 있습니다.</p>
<p><strong>신틸레이터(Scintillator)</strong><br />
신틸레이터는 방사선(감마 또는 X-ray)을 받으면 가시광선으로 변환시켜주는 무기 또는 유기물을 말합니다. 이를 이용한 센서를 섬광(신틸레이터)센서라고 합니다. 섬광(신틸레이터)센서는 방사선을 받으면 빛을 방출하는 특성을 이용, 신틸레이터와 고감도 광센서를 결합시켜서 방사선을 검출하는 센서입니다.<br />
섬광(신틸레이터)센서는 다른 센서에 비해 아직 가격이 높지만 감도가 높고, 수명이 길며, 외부자극(전자파, 진동)에도 반응하지 않아 높은 신뢰성을 가집니다.</p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center"> <img alt="Figure 2 신틸레이터" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-02-286x300.jpg" width="286" height="300" /></td>
</tr>
<tr>
<td style="text-align: center"> Figure 2 신틸레이터</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><span style="font-size: medium;color: #ff0000"><strong>불편한 진실, 이 사실을 아시나요?</strong></span></p>
<p>일반인들이 자신을 보호하기 위해서 구입하는 방사능 측정기는 활용도가 매우 떨어집니다. 일반인들이 손쉽게 구매하는 일반 휴대용 방사능 측정기로는 건강상의 가장 큰 위협이 되고 있는, 식품 방사능 측정이 불가능하기 때문입니다.</p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td><img class="alignnone  wp-image-29919" alt="33 쇼케이스 03" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-03-300x216.jpg" width="240" height="173" /></td>
<td><img class="alignnone size-medium wp-image-29920" alt="33 쇼케이스 04" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-04-300x169.jpg" width="300" height="169" /></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong>방사능과 방사선의 차이</strong><br />
방사능을 향수에 비유하자면 방사선은 향수에서 나오는 향기와 같습니다. 방사능은 방사선을 방출할 수 있는 원소, 원자(세슘, 우라늄, 플로토늄 등)을 말하고, 방사선이란 전자파와 같이 에너지를 가진 광선과 같은 것을 말합니다.</p>
<p><strong>식품 방사능 측정의 중요성</strong><br />
신체가 방사선에 노출 되는 경우, 방사선은 노출된 세포를 파괴하고 지나갑니다. 이는 일회성 손상에 그칩니다. 그러나 만약 방사능 물질(원소)을 섭취한다면, 지속적으로 방사선이 나와 세포를 파괴하므로, 백혈병, 암 등 각종 질병을 일으킬 위험이 매우 큽니다. 따라서 식품 방사능의 측정이 매우 중요합니다.</p>
<p><strong>휴대용 방사능 측정기로는 식품 방사능 측정이 불가능한 이유</strong><br />
식품 방사능 측정이란 국가의 법적 식품방사능 기준치 100Bq/Kg의 방사능을 측정할 수 있는지를 기준으로 합니다. Bq(베크렐)이란 1초당 일어나는 핵분열 횟수를 의미하는 단위로, Bq/Kg은 1Kg의 식품에서 1초간 일어나는 핵분열 횟수를 나타냅니다. 100 Bq/kg이란 1kg의 식품이 1초에 100번의 핵분열을 일으키고, 이때 방사선을 방출합니다. 1번의 핵분열로 1개의 방사선을 방출하는 핵종(세슘 Cs-137,요오드 I-131)도 있고 여러 개의 방사선을 방출하는 핵종(코발트 Co-60)도 있습니다.</p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center"><img alt="Figure 3 자연 방사능" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-05-300x168.jpg" width="300" height="168" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 3 자연 방사능</td>
</tr>
</tbody>
</table>
<p>일반적인 환경에서는 우주나 토양으로부터 오는 자연방사능이 항상 존재합니다. 자연방사선의 세기는 식품 방사능 기준치 100Bq/Kg보다 50~100배나 높은 수치입니다. 일반적인 환경에서 일반 휴대용 측정기로 식품을 측정하면 대부분 자연방사선량을 측정하게 됩니다. 식품이 심하게 오염되어 자연방사선 수치보다 높은 방사선을 방출하면 당연히 휴대용 측정기로도 측정이 가능하지만 100Bq/Kg으로 오염된 식품은 자연방사선 세기의 1/100 정도의 방사선을 방출하므로 그 차이를 휴대용 측정기로 측정하는 것은 불가능합니다.</p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><img class="aligncenter" alt="Figure 4 내부 피폭의 위험성, 방사능과의 거리에 따른 피폭량" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-06-300x213.jpg" width="300" height="213" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 4 내부 피폭의 위험성, 방사능과의 거리에 따른 피폭량</td>
</tr>
</tbody>
</table>
<p>그러면 왜 식품방사능 기준치가 우리가 생활하는 환경에 항상 존재하는 자연방사능 수치보다 1/100 낮게 정해져 있을까요? 이는 앞에서 설명 드린 ‘방사선’을 먹는 것이 아니라 ‘방사능’을 먹기 때문입니다.</p>
<p>방사선도 전자기파의 일종으로 발생원으로부터 거리의 제곱에 비례하여 세기가 약해집니다. 방사선을 방출하는 원소(예-세슘, Cs-137), 100 Bq/kg으로 오염된 식품을 5cm 거리에서 휴대용 측정기로 측정하면 감지가 불가능합니다. 하지만 인체에 들어오면 세슘과 세포와의 거리가 1 ~100micro m 이내에 존재하게 되고, 그 세포들이 받는 방사선량은 원자폭탄이 터질 당시의 방사선량과 맞먹게 됩니다. 소수의 세포가 그러한 피폭을 당한다 해도 일부 세포가 암세포로 돌연변이를 일으키고 이것이 계속 증식한다면 심각한 암이 될 수 있습니다. (참고: 일반적인 휴대용 측정기는 Sv/h(시버트/시간)라는 단위를 사용합니다. 이는 절대적인 물체의 방사능의 세기를 나타내는 것이 아니라 현재의 측정되고 있는 방사선의 세기, 즉 피폭량의 단위입니다. 식품방사능을 나타내는 Bq(베크렐)은 물체가 가지고 있는 절대적인 방사능의 세기입니다. Bq(베크렐)은 반감기로 인해 세기가 시간에 따라 줄어들 뿐 다른 물리, 화학적인 변화에 의해서도 변화하지 않습니다. 하지만 Sv/h(시버트/시간)은 방사능 원소로부터 거리가 멀어지면 줄어드는 양이고, 납이나 금 등 밀도가 높은 물질로 차폐하면 줄어드는 양입니다. 두 단위를 바로 비교하는 것은 불가능하며 두 단위를 변화시키려면 거리, 핵종, 측정면적 등 추가적인 정보가 있어야만 가능합니다.)</p>
<p><strong>새로운 모델 고감도 휴대용 측정기 QSF104</strong><br />
아나로그리서치시스템에서 출시한 새로운 모델 QSF104는 2000 CPM/uSv/h 의 감도를 가집니다. 이는 시중에 500만원대에 판매되는 제품과 동급의 성능입니다. (QSF104-40만원대) 이와 동시에, 90g의 초경량 측정기입니다.</p>
<table style="width: 620px" border="0">
<tbody>
<tr>
<td style="text-align: center"><img class="aligncenter" alt="Figure 5 가격대비 성능비가 매우 뛰어난 QSF104" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-07-253x300.jpg" width="253" height="300" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 5 가격대비 성능비가 매우 뛰어난 QSF104</td>
</tr>
</tbody>
</table>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td style="text-align: center"><img class=" wp-image-29934 aligncenter" alt="33 쇼케이스081" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스081-300x168.jpg" width="300" height="168" /></td>
</tr>
<tr>
<td style="text-align: center"><img class="size-medium wp-image-29936" alt="33 쇼케이스082" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스0821-300x164.jpg" width="300" height="164" /></td>
</tr>
<tr>
<td style="text-align: center"><img class="size-medium wp-image-29933" alt="33 쇼케이스08" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스08-300x169.jpg" width="300" height="169" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 6 대리석, 대기 중,세면대 등 다양한 측정이 가능한 QSF104</td>
</tr>
</tbody>
</table>
<p>고감도 신틸레이션 센서를 사용한 제품으로 측정 에너지 범위도 50 keV ~ 6 MeV 까지 가능합니다. 요즘 우려되고 있는 방사능 시멘트 등, 모든 물체 및 대기중 방사능을 측정을 간단하고 정확하게 할 수 있습니다.<br />
측정시 방사능 오염 지역을 탐지하기 위한 빠른 반응시간이 필요한 경우 “F” 모드를 사용, 6초의 반응시간으로 탐지가 가능하며, 일반적인 측정 “N” 모드는 21초 반응시간, 정밀한 측정을 위한 “P”모드는 120초 반응시간으로 변경하여 광범위한 분야에 적용이 가능합니다.</p>
<p><strong>식품 방사능 측정</strong><br />
식약처 기준 식품방사능을 측정하는 방식은 다음과 같습니다. 납 차폐함 안에 음식물을 넣어서 자연방사선을 낮춘 환경에서 어떤 원소에 의한 방사선인지 구별이 가능한 감마스펙트럼을 분석하여 핵종을 파악합니다. 감마 스펙트럼은 그림 7로 표현됩니다.</p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center"><img class="alignnone  wp-image-29937" alt="33 쇼케이스 5555" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-5555-300x157.jpg" width="400" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 7 감마 스펙트럼, Cs137과 K40에 봉우리가 생겼으므로 두 핵종이 존재함</td>
</tr>
</tbody>
</table>
<p>각 에너지 범위에 봉우리가 생긴다면, 해당하는 핵종이 검출되었다는 의미입니다. 검출된 방사능이 어떤 핵종인지 파악할 수 있는 방법입니다. 감마스펙트럼 분석을 하는 이유는 음식물 속에 포함된 자연방사능 때문입니다. 대부분의 음식은 자연방사선 원소인 칼륨(K-40)을 포함하고 있는데, 칼륨은 인체에 필요한 원소이지만 기본적으로 방사선을 방출하며 반감기가 지구 나이만큼 길기 때문에 인위적으로 제거하기가 어렵고, 때문에 방사능 물질이지만 칼륨이 포함되어 있다고 해서 방사능 오염으로 분류하지 않습니다. 칼륨을 다량 포함하고 있는 다시마나 미역, 바나나 같은 경우에는 칼륨에 의해 방사능 수치가 올라 갈 수 있기 때문에 이를 구분하기 위해서 감마 스펙트럼 분석을 해야 합니다. 또한 음식물을 측정용기 안에 넣은 후, 두꺼운 납 차폐물 안에 넣어서 측정을 합니다. 이는 자연방사선을 낮추기 위한 방법입니다. 미량의 방사능을 검출하기 위해서는 자연방사선을 낮추는 것이 유리합니다. 그러나 이러한 방사능 측정기는 수천에서 수억 원대에 이르고, 유지 관리 또한 매우 어렵기 때문에 일반인들이 사용하기에는 매우 어렵습니다.</p>
<p><strong>식품 방사능 간이 측정이 가능한 QSF104</strong><br />
QSF104는 핵종분석 기능이 없습니다. 그러나 핵종분석 기능이 없다고 해서, 식품방사능 측정이 불가능한 것은 아닙니다. QSF104는 다른 휴대용 측정기의 10~1000배에 이르는 고감도 센서를 장착한 측정기이기 때문에 100Bq/Kg 식품기준치의 측정이 가능합니다.</p>
<p><strong>섬광(신틸레이터)센서를 장착한 QSF104</strong><br />
QSF104는 섬광(신틸레이터)센서를 장착한 고감도 방사능 측정기입니다. 선량률 측정, 누적 선량률, 알람 설정, 펄스 측정, 조명 설정, 소리 설정, 제품 정보 등의 8개의 모드가 있는데, 이중 주목할 만한 모드는 펄스 측정 모드입니다.</p>
<p><strong>강력한 펄스 측정(Total Pulse)모드</strong><br />
펄스 측정 모드란, 측정된 감마선의 총 펄스 수를 보여주는 모드입니다. 선량률 측정 모드보다 정밀하게 측정할 경우 사용합니다.<br />
주목할 점은, 펄스 측정 모드를 이용하여 식품방사능의 측정이 가능하다는 점입니다. QSF104는 핵종분석기능이 없습니다. 그러므로 칼륨과 세슘을 구분할 수는 없습니다. 그러나 칼륨(K-40)과 같은 자연방사선이라고 해서 몸에 해롭지 않은 것은 아닙니다. 오히려 칼륨의 에너지는 높기 때문에 세포분열이 활발한 어린아이와 임신부에 치명적일 수 있습니다. 그러므로, 핵종 구분을 하지 않고 방사능의 ‘총량’을 측정하는 것도 의미가 있습니다. 고감도 QSF104의 펄스측정 모드를 이용하여 방사능의 총량을 측정하는 방식으로 식품방사능 측정을 할 수 있습니다.</p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td><img class="alignnone size-medium wp-image-29925" alt="33 쇼케이스 10" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-10-300x216.jpg" width="300" height="216" /></td>
<td><img class="alignnone size-medium wp-image-29926" alt="33 쇼케이스 11" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-11-300x209.jpg" width="300" height="209" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 8 QSF104측정</td>
<td style="text-align: center">Figure 9 QSF104 식품측정용기</td>
</tr>
</tbody>
</table>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td style="text-align: center"><img class="alignnone  wp-image-29938" alt="33 쇼케이스 666" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-666.png" width="477" height="178" /></td>
</tr>
<tr>
<td style="text-align: center">일반 환경 (납 차폐물을 이욯하지 않을 경우)</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong> 식품 측정의 방법</strong><br />
식품 측정은 빈 측정용기를 이용하여 배경 측정 후 식품을 넣고 측정된 펄스 수를 비교하여 이루어집니다. 배경 및 식품 측정시간을 길게 할수록 검출 한계는 낮아집니다. 측정 시간에 따른 QSF104의 검출 한계는 다음과 같습니다.<br />
납 차폐물을 이용하지 않고 일반 환경에서 측정할 경우 60분 배경과 식품을 측정하면 식품기준치인 100Bq/kg 수준의 측정이 가능하며 24시간 측정시 17Bq/kg까지 측정이 가능합니다.<br />
납 차폐함을 사용한다면, 측정 한계를 더욱 낮출 수 있습니다.</p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center"><img class="alignnone size-thumbnail wp-image-29927" alt="33 쇼케이스 12" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-12-150x150.jpg" width="150" height="150" /></td>
<td style="text-align: center"><img class="alignnone size-thumbnail wp-image-29928" alt="33 쇼케이스 13" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-13-150x150.jpg" width="150" height="150" /></td>
<td style="text-align: center"><img class="alignnone size-thumbnail wp-image-29929" alt="33 쇼케이스 14" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-14-150x150.jpg" width="150" height="150" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 10 QSF104 납 차폐함</td>
<td style="text-align: center">Figure 11 QSF104 납 차폐함과 측정 용기</td>
<td style="text-align: center">Figure 12 QSF104 납 차폐 측정</td>
</tr>
</tbody>
</table>
<table style="width: 620px" border="0" cellspacing="2" cellpadding="2">
<tbody>
<tr>
<td style="text-align: center"><img class="size-full wp-image-29939 aligncenter" alt="33 쇼케이스 666666" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-666666.png" width="442" height="166" /></td>
</tr>
<tr>
<td style="text-align: center">납 차폐함 이용시</td>
</tr>
</tbody>
</table>
<p>납 차폐함이란, 납으로 만든 차폐함으로, 자연방사선을 낮추어 측정 한계를 낮출 수 있습니다.<br />
현재의 납 차폐함은 기본 10mm의 두 께를 가지고 있어 더 나은 측정이 가능하도록 30mm 두께의 납 차폐함도 준비중입니다. 납 차폐함과 측정 용기는 QSF104의 옵션 사항으로 구매하실 수 있습니다.</p>
<p><strong>측정결과의 해석</strong><br />
배경의 방사선 수와 샘플의 방사선 수를 비교해서 ‘샘플의 방사선 수가 더 많이 나왔으므로 식품이 방사능에 오염되었다’라고 바로 판단할 수는 없습니다. 방사선 측정은 하이젠베르크의 불확정성의 원리를 따르고 통계적인 방법을 통해서 해석이 가능합니다.<br />
첫 번째 측정에서는 배경보다 샘플이 더 높은 측정값을 가졌다고 해도, 다음번 측정에서는 더 낮은 측정값을 가질 수도 있습니다.<br />
측정 시간과 측정값을 이용하여 이산분포 곡선을 그릴 수 있고, 일반적으로 95%의 정확도, 2 sigma 영역에서 배경 측정과 샘플 측정의 그래프가 겹치지 않으면 방사능이 더 많이 포함되어 있다고 해석합니다.</p>
<p><img class="alignnone  wp-image-29940" alt="33 쇼케이스 888888" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-888888.jpg" width="472" height="442" /></p>
<p>배경 측정값과 샘플 측정값의 결과를 그래프로 그려서 겹치는 구간이 있다면, 배경 측정과 샘플 측정값의 차이가 없다는 것이고, 샘플의 측정값이 더 높더라도 방사능이 포함되어 있다고 판단하지 않습니다.<br />
관련된 더 자세한 내용은 홈페이지(qsafe.co.kr)를 참고해주세요.</p>
<p><strong>합리적인 식품방사능 측정이 가능한 QSF104</strong><br />
기존 식품방사능 측정기는 수천만~수억 원까지 하는 높은 금액과, 조작의 어려움, 유지 관리의 어려움으로 인해 전문기관이 아닌 일반인들이 접근하기에는 현실적으로 불가능했습니다. 그래서 방사능으로 인한 막연한 두려움이 증폭되는 현상까지도 가져왔습니다.<br />
새로 출시된 QSF104는 시멘트 및 환경의 방사능 측정 및 일반인들도 손쉽게 식품 방사능 측정이 가능하도록 제작된 제품으로 방사능의 두려움으로부터 능동적으로 벗어날 수 있게 해 줄 것입니다.</p>
<p><strong>출시 예정인 QSF105</strong></p>
<table style="width: 620px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><img class="wp-image-29932 aligncenter" alt="33 쇼케이스 17" src="http://www.ntrexgo.com/wp-content/uploads/2015/11/33-쇼케이스-17.jpg" width="496" height="237" /></td>
</tr>
<tr>
<td style="text-align: center">Figure 15 QSF105 핵종분석기능-감마스펙트럼 LCD　화면</td>
</tr>
</tbody>
</table>
<p>식약처에서 수행하는 식품방사능 측정법인 감마스팩트럼 기능을 탑재한 QSF105가 출시 예정입니다. QSF104와 동일한 크기와 무게를 가지고 있습니다.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/29862/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[11호]이벤트방식으로 구현하는 시퀀스 자동화 제어시스템</title>
		<link>http://www.ntrexgo.com/archives/5349</link>
		<comments>http://www.ntrexgo.com/archives/5349#comments</comments>
		<pubDate>Tue, 28 Feb 2012 06:56:59 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[11호]]></category>
		<category><![CDATA[매거진]]></category>
		<category><![CDATA[쇼케이스]]></category>
		<category><![CDATA[시퀀스]]></category>
		<category><![CDATA[자동화]]></category>
		<category><![CDATA[제어시스템]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=5349</guid>
		<description><![CDATA[디바이스마트 매거진 11호 &#124; 본고에서는 제어시스템의 프로그래밍에 대한 여러가지 방식을 비교하고, 실제 생산라인에서 사용될 수 있는 자동 부품분류용 시퀀스 제어시스템을 구성하는 예제를 통하여 이벤트방식으로 제어프로그램을 작성하는 편리함을 살펴보겠습니다.]]></description>
				<content:encoded><![CDATA[<h2><a style="font-size: 1.5em;" href="http://www.ntrexgo.com/wp-content/uploads/2012/02/11Showeasy22.jpg" rel="lightbox[5349]"><img class="alignleft" alt="" src="http://www.ntrexgo.com/wp-content/uploads/2012/02/11Showeasy22.jpg" width="163" height="137" /></a></h2>
<h2><strong><span style="color: #666699;">이벤트방식으로 구현하는 </span></strong></h2>
<h2><span style="color: #666699;"><strong>시퀀스 자동화 제어시스템</strong><a href="http://www.ntrexgo.com/wp-content/uploads/2012/02/11Showeasy22.jpg" rel="lightbox[5349]"><br />
</a></span></h2>
<p style="padding-left: 390px;">글 : 이지컨트롤 이중우 대표</p>
<p>&nbsp;</p>
<p><strong><span style="color: #800080;">■ 시작하면서&#8230;</span></strong></p>
<p>하나의 자동화 시스템을 구현하는 것은 생각보다 쉽지 않습니다. 일단 자동화 시스템을 구성하는 기계시스템에 대한 이해가 필요하고 기계시스템을 지능적으로 구동하기 위하여 전자적 제어시스템을 구성하여야 합니다. 그러나, 현대의 제어시스템은 기능적 가격적 장점으로 인하여 마이컴이 내장된 프로그램 가능한 제어시스템을 사용하는 경우가 대부분입니다. 현장 엔지니어들이 매우 어려워 하는 부분중 하나는 제어시스템을 동작하기 위한 제어용 프로그램을 작성하는 부분일 것입니다. 본고에서는 제어시스템의 프로그래밍에 대한 여러가지 방식을 비교하고, 실제 생산라인에서 사용될 수 있는 자동 부품분류용 시퀀스 제어시스템을 구성하는 예제를 통하여 이벤트방식으로 제어프로그램을 작성하는 편리함을 살펴보겠습니다.</p>
<p><strong style="font-size: 13px; line-height: 19px;"><span style="color: #800080;">■ 시퀀스 제어시스템</span></strong></p>
<p>아마도 현장에서 가장 많이 사용되고 있는 시퀀스 제어용 컨트롤러는 PLC일 것입니다. 그래서 자동화에 관련된 실무위주 교육을 하고 있는 이공계학과 중 상당수가 PLC를 사용하여 학생들에게 시퀀스제어를 실습하고 있습니다. 릴레이를 사용한 시퀀스 제어반을 대체하기 위하여 GM사에서 시작된 PLC는 단위기능을 가진 모듈들을 연결하여 큰 시스템을 구성할 수 있는 시스템 빌드업이 가능하고, 그래픽 심볼을 사용한 프로그래밍 방식인 래더다이어그램도 많은 단점에도 불구하고 간편한 사용법으로 인하여 널리 사용되고 있습니다.</p>
<table style="border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy004.png" rel="lightbox[5349]"><img class="alignnone size-full wp-image-5360" alt="11Showeasy004" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy004.png" width="156" height="140" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy005.png" rel="lightbox[5349]"><img class="alignnone size-medium wp-image-5361" alt="11Showeasy005" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy005-300x189.png" width="300" height="189" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy006.png" rel="lightbox[5349]"><img class="alignnone size-thumbnail wp-image-5362" alt="11Showeasy006" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy006-150x150.png" width="150" height="150" /></a></td>
</tr>
<tr>
<td style="text-align: center;">릴레이 제어반</td>
<td style="text-align: center;">PLC</td>
<td style="text-align: center;">래더다이어그램</td>
</tr>
</tbody>
</table>
<p>또한 우리나라에서는 보급이 느리지만 필드버스도 세계적으로는 많이 사용되고 있습니다. 대표적인 제품으로는 Profibus, ControlNet, WorldFip, P-Net, InterBus, Ethernet-IP, DeviceNet, CAN Open, CAN Kingdom, ADS-Net, FL-Net 등이 있습니다. 필드버스는 특히 CAN, RS-485, Ethernet 과 같은 통신을 이용하여 수Km의 장거리까지 모듈을 연결할 수 있어 생산현장 전체를 묶을 수 있는 장점이 있습니다.</p>
<p><strong><span style="color: #800080;">■ 실시간 OS, RTOS</span></strong></p>
<p>이러한 우수한 제어시스템들이 있음에도 불구하고 많은 엔지니어들은 마이컴이 장착된 보드에 커넥터를 연결하고 C언어로 프로그램을 작성하는 어려움(?)을 마다하지 않습니다. 그 이유는 아마도 PLC나 필드버스와 같은 제어시스템이 만족시킬 수 없는 가격과 성능 및 확장의 문제 등에서 찾아볼 수 있을 것입니다. 스위치 3개와 릴레이 2개를 동작시키기 위하여 PLC의 전원모듈, CPU모듈, 입력모듈, 릴레이모듈, 베이스모듈을 구입하는 것은 현실적이지 않기 때문입니다. 실제 PLC 응용의 80%는 이런 단순한 시퀀스제어를 위하여 사용된다고 하니 엄청난 손실이 아닐 수 없습니다. 그렇다고 기성품을 사용하는 대신 직접 실제로 마이컴에 프로그램을 작성하기 위하여는 여러가지 어려움을 감수해야만 합니다. 단순히 스위치와 릴레이의 온오프라면 그리 어렵지 않겠지만, 스위치가 온이 된 시간을 측정하기 위하여 타이머를 사용하고, 전압을 측정하기 위하여 A/D 변환을 하는 등의 문제는 개발자에게는 문제되지 않겠지만, 현장에서 즉시 적용해야하는 어플리케이션 엔지니어의 입장에서는 결코 간단한 문제가 아닙니다. 더욱이, 여러개의 작업을 동시에 구동해야 한다든가, 유지보수의 편의성도 갖추어야 한다면 단순히 C언어로 프로그램을 작성하는 수준을 벗어난 복잡한 작업이 될 수 있습니다. 그래서 엔지니어는 구현하고자 하는 문제를 단순화 시켜주고 유지보수도 간편하게 할 수 있을 것으로 기대하면서 RTOS(Real Time OS, 실시간OS)를 적용하는 것을 검토하기 시작합니다. 여기서는 필자가 경험한 내용을 위주로 기술하겠습니다. 매우 주관적인 판단일 수 있습니다. 누구나 그러하듯이 필자도 처음에는 C언어 만을 사용하여 프로그램을 작성하였습니다. 처음에는 그리 어려움이 없었습니다만, 프로그램이 복잡해 지면서 각 기능들 사이에 상호간섭이 발생하기 시작하면서 복잡도가 기하급수적으로 증가하여 한계에 달하였습니다. 그래서 RTOS의 적용을 검토하기 시작하였습니다. 실제 RTOS를 사용하면서 느낀점을 솔직하게 기술하면 다음과 같습니다.</p>
<p style="padding-left: 90px;">● 복잡한 작업을 여러 개의 단순한 태스크(Task, 실행단위)로 나누어 작성할 수 있어 구현의 복잡도가 줄어들어 편리했다. 태스크간의 전환속도가 빨라서 추가적 지연시간에 신경쓰지 않아도 된다.</p>
<p style="padding-left: 90px;">● 실시간OS란 하나의 태스크가 실행중에도 우선순위가 더 높은 태스크가 가로채어 실행할 수 있는 것이 가장 큰 특징이다. 그런데, 실제 응용에서 이런 실시간이 매우 중요한 경우는 그리 많지 않았다.</p>
<p style="padding-left: 90px;">● 세마포어, 동기화, 파이프, 이벤트, 시그널, 조건변수, 메시지큐, 뮤텍스 등등. 공부할 게 너무 많았다.</p>
<p style="padding-left: 90px;">● 우선순위 역전, 데드락 문제등은 언제 발생할지 예측하기도 어려웠다.</p>
<p style="padding-left: 90px;">● 사용하는 마이컴에 포팅해야 한다. 처음에는 애를 많이 먹는다.</p>
<p style="padding-left: 90px;">● 무엇보다도 PC에서 프로그래밍하는 이벤트방식과 달라서 새로 공부해야 한다.</p>
<p>물론 위와 같은 어려움에도 불구하고 핸드폰과 같은 복잡한 응용에서는 RTOS를 사용해야 하겠지만, 시퀀스제어를 하는 엔지니어에게 RTOS보다 간편한 방법은 없을까 고민을 하게 되었습니다.</p>
<p>&nbsp;</p>
<p><strong><span style="color: #800080;">■ 유한상태기계, FSM</span></strong></p>
<p>이후 필자는 UML 방법론에도 포함되어 있는 유한상태도(FSM, Finite State Machine)를 사용하여 임베디드 프로그램을 작성하는 방법론에 푹 빠져 몇년을 보냈습니다. (<a href="http://www.state-machine.com" target="_blank">http://www.state-machine.com</a> 참고)</p>
<table style="border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy007.png" rel="lightbox[5349]"><img class="alignnone size-large wp-image-5363" alt="11Showeasy007" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy007-620x242.png" width="620" height="242" /></a></td>
</tr>
<tr>
<td style="text-align: center;">시한폭탄의 상태도</td>
</tr>
</tbody>
</table>
<p>프로그램의 구조를 사각형으로 표현되는 상태(State)와 화살표로 표현되는 천이(Transition)라는 그림으로 나타낼 수 있다는 점이 너무나 매혹적이었습니다. 이것은 프로그램의 동작에 오류가 있는지를 검증하는 좋은 수단이 될 뿐만아니라 가장 좋은 문서화 수단이기도 하기 때문에 임베디드 프로그램을 작성하기에 매우 좋은 수단으로 생각되었습니다. 그래서 실제로 유한상태도를 동작시키는 OS를 직접 설계하고 구현하기도 하였습니다만 지금은 사용하지 않고 영구보관(?)중에 있습니다.</p>
<p style="padding-left: 90px;">● 프로그램을 상태로 나누므로 단순화 되고, 읽기 좋은 문서화 수단이 되었다.</p>
<p style="padding-left: 90px;">● 상태는 RTOS의 태스크와 비슷(?)한데, RTOS에서 태스크 간의 전환은 빠르게 이루어 지지만, FSM에서 상태간의 천이는 트리탐색의 문제가 되어 시간이 꽤 소요되었다.</p>
<p style="padding-left: 90px;">● 무엇보다 어려운 점은 구현하고자 하는 알고리즘을 상태도로 표현해야 하는데, 상태도를 해석하기는 매우 쉽지만, 작성하기는 결코 쉽지 않았다.</p>
<p><strong><span style="color: #800080;">■ 이벤트방식, Event Driven Programming</span></strong></p>
<p>위에서 언급한 바와 같은 여러 과정을 거쳐 현재 필자가 사용하는 방식은 이벤트 기반(Event Driven) 프로그래밍 방식을 사용하고 있습니다. PC에서 프로그램을 작성해 보신 분들은 누구나 이방식을 사용하여 아래와 같은 이벤트핸들러(이벤트 발생시 실행할 내용을 기술한 함수)를 작성한 경험이 있으리라 생각됩니다. void button_Click( object sender, EventArgs e ) { // 실행할 내용을 프로그램으로 작성한다. } 즉, button이 마우스에 의해 Click될 때 실행하고자 하는 내용을 여기에 작성하면 됩니다. 이때 마우스로 버튼을 클릭한 사건을 이벤트(Event)라 하고, 이벤트를 중심으로 프로그램을 작성하는 방식을 이벤트기반 프로그래밍이라 합니다. 이는 매우 직관적이고 이해하기 쉬워서 그래픽 기반(GUI)으로 동작하는 컴퓨터에서 사용하기에 매우 적합한 방식입니다.</p>
<p style="padding-left: 90px;">● 인간의 사고와 동일한 직관적 구조이므로 동작의 구현 및 이해가 매우 쉽다.예를 들면, SW1=ON 이벤트 발생시 RELAY1=ON으로 하라.</p>
<p style="padding-left: 90px;">● 복잡한 프로그램이 이벤트단위로 분해되어 구현하려는 문제가 단순화 된다.</p>
<p style="padding-left: 90px;">● PC에서와 동일한 방법을 사용하므로 일관성 있는 개발이 가능하고, 별도의 학습이 필요없이 즉시 적용할 수 있다.</p>
<p style="padding-left: 90px;">● 이벤트핸들러는 일종의 함수포인터이고 별도의 호출과정 없이 즉시 실행되므로, RTOS의 태스크전환이나 상태도의 천이속도에 비하여 빠른 실행이 가능하다.</p>
<p>이와 같은 매우 큰 장점이 있지만, 반면 단점도 있습니다.</p>
<p style="padding-left: 90px;">● 우선순위의 개념이 없으므로 이벤트핸들러에서 오랜동안 CPU를 점유하면, 긴급한 이벤트를 제때 처리하지 못하므로, 완전한 실시간성을 구현할 수는 없다.</p>
<p style="padding-left: 90px;">● 이벤트가 너무 자주 발생하면 성능이 저하될 수 있다.</p>
<p>즉, 이벤트핸들러에서 매우 복잡한 이미지 처리를 한다면, 긴급한 이벤트가 실행되지 못하고 대기하게 될 것이다. 대부분의 경우 시퀀스 제어시스템에서 그런 복잡한 처리를 할 일은 거의 없지만, 만일 그런 경우라면 이벤트 핸들러를 단순하게 작성하는 방법을 강구하는 것이 좋습니다. 그리고, 이벤트 발생횟수는 구현하고자 하는 내용에 따라서 매우 빈번할 수도 있습니다. 마우스 하나만 예로 들어도 마우스의 클릭, 더블클릭, 이동, 드래그 등등 매우 많은 이벤트가 있습니다. 고속 CPU를 사용하는 컴퓨터에서는 문제가 없지만, 대부분의 경우 저속 CPU를 사용하는 임베디드 시스템의 경우 컴퓨터에서 처럼 이벤트를 그대로 사용할 수는 없습니다. 그래서 이벤트 구조와 개념을 일부 변경하여 발생횟수를 최소화 하여 사용하고 있습니다.</p>
<p><strong><span style="color: #800080;">■ 이지컨트롤러</span></strong></p>
<table>
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy003.png" rel="lightbox[5349]"><img class="alignnone" alt="11Showeasy003" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy003-428x620.png" width="173" height="250" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy008.png" rel="lightbox[5349]"><img class="alignnone size-medium wp-image-5364" alt="11Showeasy008" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy008-300x189.png" width="300" height="189" /></a></td>
</tr>
</tbody>
</table>
<p>이지컨트롤러의 하드웨어적인 구조는 PLC와 필드버스의 장점을 모방하였습니다. 각각의 모듈은 빌드업이 가능한 모듈러한 구조로 되어 있어 기능확장이 쉬우며, PLC의 베이스모듈을 저가의 플랫케이블로 대체하여 그림처럼 각 모듈의 20핀 버스커넥터를 연결합니다. 이 버스케이블에는 I2C 통신선이 있어 각 모듈을 1Mbps의 고속 통신으로 연결하고, 또한 5V, 24V, GND 전원선이 포함되어 있어서 각 모듈에 별도의 전원을 공급할 필요가 없습니다. 플랫케이블은 필드버스처럼 수킬로미터까지 확장할 수는 없지만, 수십미터까지 확장이 가능하여 그림처럼 쌓아서 배치할 수도 있고 펼칠 수도 있으며 먼 거리에 떨어져서 설치할 수도 있으므로 PLC에 비하여 설치가 매우 편리합니다.</p>
<p>전면의 IO 커넥터는 스크류타입으로 배선을 드라이버로 고정시켜 간편하게 연결할 수 있으며, DINKLE의 결합식 터미널블럭을 사용하여 모듈의 교체시에도 별도의 배선분리를 하지 않아도 되도록 하였으며, 후면에는 24핀 확장커넥터가 있어서 마이컴의 여분의 입출력 핀과 전원 및 통신선이 연결되어 있어 사용자의 회로를 추가하거나 프로그램 디버깅용으로 사용할 수 있도록 하였습니다. IO커넥터의 아래에는 동작표시 LED가 있어서 스위치나 릴레이 등의 IO가 동작하면 그 상태를 표시하므로 배선오류나 동작여부를 쉽게 확인할 수 있습니다. 각 모듈의 기본치수는 PCB기준 50x55mm로 매우 컴팩트하여 장치에 내장하기 적합하고, PCB지지대의 간격은 40mm로 50x50MM DC팬을 사용하면 PCB지지대에 고정할 수 있도록 맞추어져 있습니다. 각 모듈은 저전력 마이컴을 내장하여 릴레이구동과 같은 IO를 제외하면, LED도 저전력 타입을 사용하므로 모듈자체의 구동전력은 수mA 정도로 매우 작게 설계되어 배터리로 구동하거나 태양전지를 사용하는 경우도 사용이 가능하도록 하였습니다.</p>
<p>각 모듈은 내부 구성이 조금씩 차이가 있지만, 기본적인 구성은 비슷합니다. DIO모듈(Digital Input Output)의 경우 그림과 같이 IO커넥터, 버스커넥터, 확장커넥터가 있으며, LPC1114 ARM CORTEX-M0 32BIT 48MHz 마이컴을 사용하고 있으며, 내부에 EEPROM이 있어서 펌웨어를 새로 다운로드하지 않고도 모듈ID, 교정값등의 일부기능을 위한 설정을 변경할 수 있습니다.<br />
버스커넥터로부터 VAA=5V를 공급받아 내부로직을 위한 VCC=3.3V 전원으로 변경하며 VBB=24V를 공급받아 DC-DC에서 VDC=2~20V의 가변 전원을 생성하여 IO커넥터로 출력합니다. 특히 VDC는 스위치나 센서와 같은 외부 장치가 약간의 동작전원을 필요로 한다면 PLC처럼 별도의 외부전원을 설치하지 않아도 이 전원으로 대치할 수 있으므로 매우 편리하게 사용할 수 있습니다. 그외에 스위치, 릴레이, 모터, A/D, D/A 등과 같은 모듈별로 고유의 입출력 인터페이스 회로부로 구성되어 있습니다.</p>
<table style="border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy009.png" rel="lightbox[5349]"><img class="alignnone size-large wp-image-5365" alt="11Showeasy009" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy009-620x356.png" width="620" height="356" /></a></td>
</tr>
<tr>
<td style="text-align: center;">CoIDE 개발환경에서 ColinkEx SWD 디버거를 이용한 디버깅 화면</td>
</tr>
</tbody>
</table>
<p><strong style="font-size: 13px; line-height: 19px;"><span style="color: #800080;">■ 소프트웨어 개발환경</span></strong></p>
<p>이지컨트롤러의 개발환경은 www.CooCox.org에서 제공하는 무료개발툴인 CoIDE와 오픈소스 GCC를 이용하는데, 이클립스 기반이므로 매우 편리한 코드편집과 디버깅환경을 제공합니다. 이지컨트롤러의 소프트웨어 개발환경의 가장 큰 특징은 이벤트기반의 프로그래밍을 가능하도록 지원하는 EventBus라는 프레임워크 라이브러리 입니다. EventBus는 C/C# 두가지 버전으로 제공되는데, C 버전은 모듈에 펌웨어를 작성할 때 사용되는데, 이벤트기반 프로그래밍이 가능하도록 지원하고, 사용자가 여러 모듈을 I2C통신으로 연결하였다는 사실을 의식하지 않고 프로그램을 작성할 수 있도록 도와줍니다. 또한 C# 버전은 버스케이블로 연결된 모듈들을 컴퓨터에 연결할 때 사용되는데, C#으로 작성된 닷넷 라이브러리로써 USB 케이블을 통하여 컴퓨터와 모듈을 연결하면 닷넷 환경에서 모듈들을 제어하는 응용프로그램을 작성할 수 있도록 도와줍니다. 이를 이용하면 스위치, 릴레이, 전압등 모듈의 입출력을 읽어 화면에 표시하거나, 화면의 체크박스를 클릭하여 모듈의 릴레이를 동작시키는 것이 가능하고, 전압을 읽어 화면에 그래프로 표시하는 작업을 매우 간단하게 처리할 수 있습니다. 물론 EventBus 프레임워크를 사용하지 않고 기존의 방식처럼 프로그램을 작성할 수도 있습니다만, 생산성이 매우 차이가 나므로 반드시 EventBus 프레임워크를 사용하기를 권장합니다. 이지컨트롤러의 펌웨어는 EventBus + I/O Driver + Application 으로 구성됩니다. EventBus는 앞에서 언급하였듯이 이벤트기반 프로그래밍을 지원하고, 모듈과 모듈사이 그리고 모듈과 컴퓨터 사이의 연결을 담당하여 사용자가 마치 하나의 모듈에서 프로그램을 작성하는 것처럼 느끼도록 합니다. 그리고 I/O Driver는 순수 C코드로 하드웨어에 관련된 코드입니다. 기본적으로 소스가 제공되지만, 사용자의 고유한 기능을 구현하기 위하여 수정이 가능하도록 완전히 공개되어 있습니다. Application은 실제 구현하고자 하는 프로그램으로 마치 윈도우 폼 프로그램의 이벤트 핸들러와 매우 흡사하여 사용자는 PC에서 프로그램을 작성하는 느낌으로 거부감 없이 개발할 수 있습니다.</p>
<table style="border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy010.png" rel="lightbox[5349]"><img class="alignnone size-large wp-image-5366" alt="11Showeasy010" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy010-620x365.png" width="620" height="365" /></a></td>
</tr>
<tr>
<td style="text-align: center;">비주얼스튜디오에서 EventBus C# 프레임워크를 사용한 개발화면</td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #800080;">■ 펌웨어 프로그래밍</span></strong></p>
<p>이지컨트롤러를 이용하여 그림과 같이 입고부품을 치수별로 분류하는 공장자동화용 시퀀스제어 시스템을 구현하겠습니다.</p>
<table style="border-collapse: collapse;" width="600" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy011.png" rel="lightbox[5349]"><img class="alignnone  wp-image-5367" alt="11Showeasy011" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy011.png" width="215" height="170" /></a></td>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy012.png" rel="lightbox[5349]"><img class="alignnone  wp-image-5368" alt="11Showeasy012" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy012.png" width="282" height="219" /></a></td>
</tr>
</tbody>
</table>
<p>시스템에는 컨베이어 벨트와 벨트를 구동하는 DC모터가 있으며, 모터를 온오프시켜 컨베이어 벨트를 회전/정지 시킬 수 있는 두개의 스위치가 있습니다. 그리고, 세개의 실린더와 각 실린더마다 부품의 높이를 검출하는 센서 S1, S2, S3가 있습니다. 오른쪽 시퀀스도는 센서 S1, S2, S3가 동작하면 릴레이 K1, K2, K3가 동작하고, 솔레노이드 밸브 1M, 2M, 3M에 전류가 공급되어 해당하는 공압밸브가 동작하여 실린더가 구동되도록 설계되어 있습니다. 도면에서는 센서 S1이 부품을 검출하였고 릴레이 K1을 통하여 솔레노이드 밸브 1M이 동작하였으며, 밸브에 연결된 High 실린더가 동작하였습니다. 가장 오른쪽에 설치된 센서 S1은 50mm, 가운데의 S2는 40mm, 왼쪽의 S3는 30mm의 높이에 설치되어 있어서, High 실린더는 50mm이상의 부품을 선택하고, Medium 실린더는 40mm ~ 50mm 사이의 부품을 선택하고, Low 실린더는 30mm ~ 40mm 사이의 부품을 선택합니다. 선택되지 않은 30mm 이하의 낮은 부품은 불량이므로 선택되지 않고 그대로 배출됩니다. 위의 릴레이로 구성된 시퀀스 제어시스템을 이지컨트롤러를 사용하여 구현하기 위하여 필요한 입출력으로 분류하면, 3개의 센서 입력을 위한 스위치 접점입력 3개, 솔레노이드 밸브를 구동하기 위한 릴레이 출력 3개, 컨베이어 벨트 구동용 DC모터를 위한 릴레이 출력 1개, 컨베이어 벨트를 온오프시키기 위한 버튼입력용 스위치 접점입력 2개가 필요합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy018.jpg" rel="lightbox[5349]"><img class="alignnone  wp-image-5382" alt="11Showeasy018" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy018-620x304.jpg" width="397" height="194" /></a></p>
<p>즉, 온오프 접점용 입력 5개와 릴레이 출력 4개가 필요하므로, 온오프 접점 10개를 입력받을 수 있는 DIM(Digital Input Module) 모듈과 릴레이 출력 6개를 내장한 DOM(Digital Output Module) 모듈을 사용하고, 전원공급을 위하여 PSM(Power Supply Module)모듈을 사용하여 시스템을 구성하였습니다.</p>
<p>DIM 모듈의 스위치 입력은 싱크(Sink) 타입이므로 외부에서 전류를 공급할 때 동작을 인식합니다. 그림에서 보듯이 DIM 모듈에는 VDC 가변출력전원(포텐쇼미터로 조정)이 내장되어 있으므로 PLC에서 처럼 외부전원이 없어도 센서에 편리하게 전원을 공급할 수 있습니다. 또한 싱크타입이므로 광전스위치의 PNP출력타입이 적합합니다. 요즘 시판되는 센서는 대부분 NPN, PNP를 선택할 수 있도록 선택스위치가 제공됩니다. 이경우 PNP로 선택해야 합니다.</p>
<table style="border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy002.png" rel="lightbox[5349]"><img class="alignnone size-large wp-image-5358" alt="11Showeasy002" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy002-620x192.png" width="620" height="192" /></a></td>
</tr>
<tr>
<td style="text-align: center;">PNP출력 광전스위치 회로와 DIM 모듈의 배선도</td>
</tr>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy001.png" rel="lightbox[5349]"><img class="alignnone size-large wp-image-5357" alt="11Showeasy001" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy001-620x170.png" width="620" height="170" /></a></td>
</tr>
<tr>
<td style="text-align: center;">DOM 모듈의 배선도</td>
</tr>
</tbody>
</table>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy013.png" rel="lightbox[5349]"><img class="wp-image-5369 alignright" alt="11Showeasy013" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy013-224x620.png" width="134" height="372" /></a>솔레노이드와 DC모터는 수암페어 이상의 전류를 흘려야 하므로 VDC로는 전류용량이 부족하므로 외부에 SMPS를 추가하였습니다. 위와 같이 배선하면 하드웨어적인 시스템 구성은 완성되었습니다.</p>
<p>이제 프로그램을 개발할 개발환경을 설치해야 합니다. 이지컨트롤 카페(cafe.naver.com/easycontrol)를 방문하면 CoIDE를 설치하는 방법 및 EventBus 프레임워크를 다운로드할 수 있도록 자세한 설명이 있으므로, 지면 관계상 여기에서는 생략하도록 하겠습니다. CoIDE에서 컴파일을 마치면 프로그램을 모듈에 다운로드하고 디버깅하기 위하여 SWD 디버거인 ColinkEx를 사용합니다. ColinkEx에는 추가적으로 CP2102가 내장되어 있으므로 PC에서 가상 COM포트로 인식되어 디버깅 및 모듈-PC간 통신에 사용됩니다. 이지컨트롤러에서 모듈과 PC를 USB로 연결하는 방법은 ColinkEx의 COM포트, UUB모듈, USB모듈을 사용하는 3가지 입니다.</p>
<p>프로그램을 작성하기 위하여 별도의 프로젝트를 생성할 필요는 없습니다. 제공되는 예제를 복사해서 새로운 응용프로그램을 작성하면 됩니다. 각각의 모듈에는 미리 EventBus 프레임워크가 다운로드되어 있으므로 버스케이블만 연결하면 모든 모듈은 통신으로 연결된 상태가 됩니다. 이제 우리가 프로그램하고자 하는 모듈에만 프로그램을 작성하면 됩니다. 심지어 모듈은 그대로 두고 컴퓨터에서 응용프로그램만 작성하여도 동작시킬 수 있지만, 여기서는 모듈에서 동작하는 펌웨어를 작성하겠습니다. 어느 모듈에 프로그램을 작성해도 상관없지만, 우리는 DIM모듈은 그대로 두고 DOM모듈에 프로그램을 작성하겠습니다. 일반적으로 출력이 있는 모듈에서 프로그램을 작성하는 것이 여러모로 유리합니다.</p>
<p>Project 뷰에는 응용프로그램이 있는 Application 폴더, 하드웨어 구동을 위한 드라이버 프로그램이 있는 Driver 폴더, EventBus 프레임워크에 대한 헤더파일이 있는 EventBus 링크폴더가 있으며 여타의 설정파일들이 있습니다. EventBus 프레임워크는 라이브러리 형태로 제공되지만 사용자의 프로젝트에 필요한 모든 드라이버 파일의 소스가 완전히 제공되므로 구현이 매우 용이합니다.</p>
<p>Application\default에는 모듈 출고시 기본으로 다운로드된 프로그램의 소스파일이 있고, Application\exam에는 다양한 예제 프로그램이 제공됩니다. 우리가 작성할 응용프로그램을 저장하기 위하여 myproj 폴더를 생성하고 “dom_def.*”를 복사하여 “my_dom.*”로 이름을 변경합니다. Application 폴더에는 많은 응용프로그램이 있으므로 우리가 컴파일할 응용프로그램을 “ezconfig.h”에서 선택해 주어야 합니다. 응용프로그램의 헤더파일 “my_dom.h”을 인크루드시키면 새로 복사해서 만든 응용프로그램이 선택됩니다.</p>
<table width="550">
<tbody>
<tr bgcolor="#d9dbdb">
<td>ezconfig.h // 프로그램 선택 #include “my_dom.h”</td>
</tr>
</tbody>
</table>
<p>다음으로 선택된 “my_dom.h” 파일에서 DOM_DRV1 선언으로 드라이브 파일 “dom_drv1.c”을 선택하고, MY_DOM 선언으로 “my_dom.c”를 선택합니다. 이제 드라이버 파일은 “dom_drv1.c”, 어플리케이션 파일은 “my_dom.c”를 선택하였습니다.</p>
<table width="550">
<tbody>
<tr bgcolor="#d9dbdb">
<td>Application\myproj\my_dom.h // select the Driver program #define DOM_DRV1// select the Application program<br />
#define MY_DOM// Set the ID of the module to reference<br />
typedef enum {<br />
GCALL = 0,<br />
THIS = 0,// module alias to reference<br />
ID_DIM1 = 3,// Do not change from here<br />
END_OF_MODULE,<br />
ID_PC = 120<br />
} EID;</td>
</tr>
</tbody>
</table>
<p>이제 “my_dom.c”를 수정하여 프로젝트를 완성하겠습니다. “#ifdef DOM_DEF”를 “#ifdef MY_DOM”으로 수정하면 코드는 활성화 되지만, F7키를 눌러 프로젝트를 빌드하면 에러가 발생합니다. 이유는 우리가 새로 생성한 Application\myproj 폴더를 등록하지 않았기 때문에 컴파일러가 파일의 위치를 찾지 못해서 발생하는 에러입니다. “build.xml” 파일을 열고 “Include paths”에서 “Add”를 선택하고 “Workspace”에서 우리가 추가한 “Application\myproj”를 선택합니다.<br />
이제 다시 F7키로 빌드하면 그림처럼 성공적으로 빌드가 됩니다. EventBus 프레임워크의 코드사이즈는 10KB도 채 되지 않는 매우 컴팩트한 사이즈입니다.</p>
<p><a style="font-size: 13px; line-height: 19px;" href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy014.png" rel="lightbox[5349]"><img class="alignnone  wp-image-5370" alt="11Showeasy014" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy014.png" width="413" height="145" /></a></p>
<p>이제 컨베이어 벨트를 제어하는 시퀀스 프로그램을 작성하겠습니다. 코드와 주석만으로 충분히 이해할 수 있겠지만, 약간의 설명을 덧붙이겠습니다. DIM모듈의 스위치 입력상태를 읽어야 하므로 모듈을 선언하고 생성하였습니다. 이렇게 선언함으로써 이지컨트롤러의 여러 모듈들은 서로의 입출력 데이터를 읽고 쓸 수 있습니다.</p>
<table width="550">
<tbody>
<tr bgcolor="#d9dbdb">
<td>Start_EventHandler, End_EventHandler는 이벤트핸들러의 앞,뒤에 위치하며, 이벤트 메시지루프의 시작과 종료에 관련된 처리를 하는 무한루프 매크로입니다. “eventbus.h”를 참고해 주십시오.</td>
</tr>
</tbody>
</table>
<p>프로젝트가 간단하므로 이벤트핸들러를 한개만 추가하였습니다. 즉, dim의 입력이 변하는 이벤트(IN_CHANGED)가 발생하면 실행할 내용을 기술합니다. Event( )는 매크로함수입니다. 스위치 상태를 릴레이에 대입하였으므로 센서가 부품을 감지하여 스위치 입력이 들어오면 릴레이도 동작하게 되고 실린더가 동작하게 됩니다. 컨베이어를 움직이는 DC모터는 Stop 버튼을 누르면 Start 버튼의 상태와 무관하게 무조건 정지하며, Start 버튼은 단독으로 눌러야만 회전합니다. 아무런 스위치도 누르지 않으면 이전 상태를 유지하게 됩니다.</p>
<table style="border-collapse: collapse;" width="600" border="1" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td align="center">Button_Start</td>
<td align="center">Button_Stop</td>
<td align="center">Conveyer</td>
</tr>
<tr>
<td align="center">OFF</td>
<td align="center">OFF</td>
<td align="center">이전상태 유지</td>
</tr>
<tr>
<td align="center">ON</td>
<td align="center">OFF</td>
<td align="center">ON, 회전</td>
</tr>
<tr>
<td align="center">OFF</td>
<td align="center">ON</td>
<td align="center">OFF, 정지</td>
</tr>
<tr>
<td align="center">ON</td>
<td align="center">ON</td>
<td align="center">OFF, 정지</td>
</tr>
</tbody>
</table>
<p>이제 펌웨어 작성을 마쳤습니다. 관심있게 보아야 할 부분은 펌웨어를 작성하는 과정에서 하드웨어적인 내용에 대하여는 전혀 언급하지 않았다는 점입니다. 펌웨어 작성에서 일반적으로 볼 수 있는 GPIO 초기화나 세팅등을 몰라도 펌웨어를 작성할 수 있다는 점입니다. 물론 그러한 드라이버 프로그래밍이 가능한 고급사용자들은 자신만의 기능을 추가적으로 구현할 수 있습니다. 펌웨어만으로도 시퀀스제어 시스템은 잘 동작합니다. 그러나, 컴퓨터에서 제어시스템의 동작을 모니터링 하거나 제어할 수 있다면 더욱 다양한 기능을 구현할 수 있을 것입니다.</p>
<p><strong><span style="color: #800080;">■ PC 응용프로그램</span></strong></p>
<p>Visual Studio 2008에서 C#으로 프로그램을 작성하도록 하겠습니다. 앞에서 언급하였듯이 EventBus_C# 버전 라이브러리를 사용하면 앞에서 구현한 모듈을 매우 쉽게 컴퓨터와 연결할 수 있습니다. 파일&gt;새로만들기&gt;프로젝트(Ctrl+Shift+N) 메뉴를 선택합니다. <a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy015.png" rel="lightbox[5349]"><img class="alignnone  wp-image-5371" alt="11Showeasy015" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy015-620x341.png" width="372" height="205" /></a></p>
<p>프로젝트 이름을 MyProj 라고 입력합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy016.png" rel="lightbox[5349]"><img class="alignnone  wp-image-5372" alt="11Showeasy016" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy016-620x264.png" width="372" height="158" /></a></p>
<p>참조추가에서 다운받은 EventBus_C# 라이브러리인 EventBus.DLL과 닷넷라이브러리인System.management를 추가합니다. 추가된 참조 EventBus를 더블클릭하면 개체브라우저가 열리는데 여기서 EventBus에서 지원하는 여러가지 클래스와 멤버들을 확인할 수 있습니다. <a href="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy017.png" rel="lightbox[5349]"><img class="alignnone  wp-image-5373" alt="11Showeasy017" src="http://www.ntrexgo.com/wp-content/uploads/2013/03/11Showeasy017.png" width="283" height="293" /></a></p>
<p>이제 폼에 연결된 장치에 해당하는 콤포넌트를 배치하겠습니다. 센서와 스위치는 입력장치이므로 사용자가 상태를 변경하는 것이 무의미하므로 Enabled 속성을 False로 합니다. 실제 센서 또는 스위치의 입력이 변하면 그 상태가 체크박스에 표시되도록 하겠습니다. 실린더와 컨베이어 모터는 출력장치이므로 펌웨어에서 이미 제어하고 있지만, 여기서도 체크박스를 클릭하면 실린더 또는 모터를 회전시킬 수 있도록 하겠습니다. 그래픽적으로 실제 실린더를 동작하도록 프로그램한다면 멋진 인터페이스를 구현할 수 있을 것입니다. 특히 산업용 모니터링 장치나 티칭패널의 경우 매우 유용한 인터페이스가 됩니다.</p>
<p>이제 코드를 작성하겠습니다. 메뉴에서 보기&gt;코드(Ctrl+Alt+0) 를 선택하고 코드를 입력합니다.</p>
<table width="550">
<tbody>
<tr bgcolor="#d9dbdb">
<td>Form1.cs<br />
using System;<br />
using System.Collections.Generic;<br />
using System.ComponentModel;<br />
using System.Data;<br />
using System.Drawing;<br />
using System.Linq;<br />
using System.Text;<br />
using System.Windows.Forms;using EventBus; // EventBus 라이브러리 사용선언<br />
using System.Management; // 가상COM포트 자동인식에 필요namespace MyProj<br />
{<br />
public partial class Form1 : Form<br />
{<br />
Serial com; // 가상 COM포트<br />
CDIM dim; // DIM 모듈 이미지<br />
CDOM dom; // DOM 모듈 이미지<br />
public Form1()<br />
{<br />
InitializeComponent();<br />
CheckForIllegalCrossThreadCalls = false;//크로스 스레드 검사 중지<br />
com = new Serial();<br />
dim = new CDIM((byte)EID.MyDim, com);<br />
dom = new CDOM((byte)EID.MyDom, com);<br />
}<br />
}public enum EID : byte<br />
{<br />
GCALL = 0,<br />
THIS = 0,// 어플에서 참조할 모듈 정의<br />
MyDim = 3, // DIM 모듈 ID<br />
MyDom = 5, // DOM 모듈 IDEND_OF_MODULE,<br />
PC = MType.PC<br />
}<br />
}</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>라이브러리를 선언하고, 통신연결을 위한 가상COM포트와 이벤트교환을 위하여 DIM, DOM모듈의 이미지도 선언하고 생성했습니다. 모듈의 ID는 편의상 enum 타입으로 선언 후 사용합니다. 여기서 선언한 ID는 펌웨어에서 사용한 ID와 동일해야 하고 또한 제공되는 ezconfig.exe EEPROM 설정용 프로그램을 이용하여 모듈마다 설정하는 ID와도 동일해야 합니다. 통신은 ID를 주소로 사용하므로 ID는 반드시 일치하도록 하여야 합니다.<br />
이제 이벤트가 발생하면 실행할 이벤트핸들러를 추가합니다.</p>
<table width="550">
<tbody>
<tr bgcolor="#d9dbdb">
<td>Form1.cs<br />
private void Form1_Load(object sender, EventArgs e)<br />
{<br />
dim.Switch0.OnChanged +=<br />
new LogicEventHandler(Switch0_OnChanged);<br />
dim.Switch1.OnChanged +=<br />
new LogicEventHandler(Switch1_OnChanged);<br />
dim.Switch2.OnChanged +=<br />
new LogicEventHandler(Switch2_OnChanged);<br />
dim.Switch3.OnChanged +=<br />
new LogicEventHandler(Switch3_OnChanged);<br />
dim.Switch4.OnChanged +=<br />
new LogicEventHandler(Switch4_OnChanged);dom.Relay0.OnChanged +=<br />
new LogicEventHandler(Relay0_OnChanged);<br />
dom.Relay1.OnChanged +=<br />
new LogicEventHandler(Relay1_OnChanged);<br />
dom.Relay2.OnChanged +=<br />
new LogicEventHandler(Relay2_OnChanged);<br />
dom.Relay3.OnChanged +=<br />
new LogicEventHandler(Relay3_OnChanged);<br />
}void Relay3_OnChanged(object sender, CLogicEventArgs args) {<br />
DCMotor.Checked = args.Value;<br />
}void Relay2_OnChanged(object sender, CLogicEventArgs args) {<br />
CylinderLow.Checked = args.Value;<br />
}void Relay1_OnChanged(object sender, CLogicEventArgs args) {<br />
CylinderMedium.Checked = args.Value;<br />
}void Relay0_OnChanged(object sender, CLogicEventArgs args) {<br />
CylinderHigh.Checked = args.Value;<br />
}void Switch4_OnChanged(object sender, CLogicEventArgs args) {<br />
Start.Checked = args.Value;<br />
}void Switch3_OnChanged(object sender, CLogicEventArgs args) {<br />
Stop.Checked = args.Value;<br />
}void Switch2_OnChanged(object sender, CLogicEventArgs args) {<br />
SensorLow.Checked = args.Value;<br />
}void Switch1_OnChanged(object sender, CLogicEventArgs args) {<br />
SensorMedium.Checked = args.Value;<br />
}</p>
<p>void Switch0_OnChanged(object sender, CLogicEventArgs args) {<br />
SensorHigh.Checked = args.Value;<br />
}</td>
</tr>
</tbody>
</table>
<p>폼이 로드될 때 스위치와 릴레이의 OnChanged 이벤트에 이벤트핸들러를 등록합니다. 이벤트핸들러의 내용은 변경된 값을 화면에 표시하는 단순한 코드입니다.</p>
<table width="550">
<tbody>
<tr bgcolor="#d9dbdb">
<td>Form1.cs<br />
string FindPortName()<br />
{<br />
ManagementObjectSearcher searcher =<br />
new ManagementObjectSearcher(“select * from Win32_SerialPort”);    // 시리얼포트를 검사해서 USB모듈이 연결된 포트를 찾는다.<br />
foreacㅋh (ManagementObject serial in searcher.Get()) {<br />
if (serial[“PNPDeviceID”].ToString().Contains(“5142308698”)) {<br />
return serial[“DeviceID”].ToString();<br />
}<br />
}<br />
return null;<br />
}private void Connect_Click(object sender, EventArgs e)<br />
{<br />
if (com.Connected) {<br />
com.Disconnect();<br />
Connect.Text = “Connect”;<br />
}<br />
else {<br />
string portname = FindPortName();<br />
bool connected = com.Connect(portname);<br />
if (connected) {<br />
Connect.Text = “Disconnect”;// 기존 이미지와 동기화 시킨다.<br />
dim.RequestSync();<br />
dom.RequestSync();<br />
}<br />
}<br />
}</td>
</tr>
</tbody>
</table>
<p>FindPortName 메서드는 연결된 가상COM포트를 자동으로 검색합니다. USB, UUB, ColinkEx모듈의 통신포트는 모두 CP2102를 채택하고 있는데 ROM에 “5142308698” 문자열을 포함하는 이름이 저장되어 있으므로 이를 이용하여 자동으로 포트명을 검색한 것입니다만, com.Connect(“COM5”); 처럼 사용자가 포트명을 직접 입력해도 됩니다. 실제로 WinCE에서는 management 라이브러리를 사용할 수 없으므로 이런 방법을 사용할 수 있습니다.<br />
RequestSync 메서드는 통신이 연결될 때 모듈의 실제 입출력상태와 다를 수 있으므로 모듈에게 입출력 데이터를 전송하도록 요청합니다. 전송받은 값이 이미지(dim, dom)에 저장된 값과 다르면 이벤트가 발생하고 위의 이벤트핸들러가 실행되므로 화면의 표시가 최근 상태로 갱신됩니다.</p>
<table width="550">
<tbody>
<tr bgcolor="#d9dbdb">
<td>Form1.cs<br />
private void CylinderHigh_CheckedChanged<br />
(object sender, EventArgs e) {<br />
dom.Relay0.Value = CylinderHigh.Checked;<br />
dom.Synchronize();<br />
}private void CylinderMedium_CheckedChanged<br />
(object sender, EventArgs e) {<br />
dom.Relay1.Value = CylinderMedium.Checked;<br />
dom.Synchronize();<br />
}private void CylinderLow_CheckedChanged<br />
(object sender, EventArgs e) {<br />
dom.Relay2.Value = CylinderLow.Checked;<br />
dom.Synchronize();<br />
}private void DCMotor_CheckedChanged<br />
(object sender, EventArgs e) {<br />
dom.Relay3.Value = DCMotor.Checked;<br />
dom.Synchronize();<br />
}</td>
</tr>
</tbody>
</table>
<p>마지막으로 폼에서 실린더와 컨베이어 DC모터의 체크박스를 클릭할 때 릴레이가 동작하도록 체크박스의 이벤트핸들러를 작성합니다. 체크박스를 더블클릭하면 자동으로 이벤트핸들러가 생성되고 이벤트에 등록하는 것은 비주얼스튜디오에서 자동으로 이루어 집니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2012/02/11Showeasy020.jpg" rel="lightbox[5349]"><img class="alignnone  wp-image-5521" alt="11Showeasy020" src="http://www.ntrexgo.com/wp-content/uploads/2012/02/11Showeasy020.jpg" width="170" height="194" /></a></p>
<p>이제 모두 마쳤습니다. 실행하고 결과를 확인해 보겠습니다. 먼저 Start 스위치를 누르면 컨베이어는 회전합니다. 이때 Connect 버튼을 클릭하면 통신이 연결되고 dim.RequestSync(); dom.RequestSync(); 코드가 실행되어 모듈의 실제 상태와 체크박스 표시가 동기화 되는 것을 볼 수 있습니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2012/02/11Showeasy021.jpg" rel="lightbox[5349]"><img class="alignnone  wp-image-5522" alt="11Showeasy021" src="http://www.ntrexgo.com/wp-content/uploads/2012/02/11Showeasy021.jpg" width="170" height="194" /></a></p>
<p>High 센서가 높이가 높은 부품을 검출하고 실린더가 동작하는 것을 화면으로 확인할 수 있습니다. Start 스위치는 푸쉬버튼이므로 손을 떼면 OFF 되었습니다.</p>
<p><img alt="11Showeasy019" src="http://www.ntrexgo.com/wp-content/uploads/2012/02/11Showeasy019.jpg" width="172" height="196" /><br />
Medium 센서가 검출되지 않았지만, 화면에서 마우스로 Medium Cylinder의 체크박스를 클릭하여 강제로 실린더를 동작시켰습니다. 이 기능을 사용하면 장치의 고장을 점검할 때 매우 유용하게 활용할 수 있습니다.</p>
<p><strong><span style="color: #800080;">■ 마지막으로</span></strong></p>
<p>이제까지 시퀀스제어 시스템을 구현하기 위한 소프트웨어 개발방법에 대하여 살펴보고, 이벤트방식으로 구현하는 장점과 이지컨트롤사의 이지컨트롤러 범용제어기와 EventBus 프레임워크를 이용한 이벤트방식의 프로그램작성에 대하여 살펴보았습니다.</p>
<p>짧은 지면관계상 더욱 깊이있는 예제를 다루지는 못하였지만, 이외에도 시간을 제어하는 등의 더욱 다양한 이벤트와 사용자 정의 이벤트라는 막강한 기능을 제공합니다. 자세한 내용은 카페(cafe.naver.com/easycontrol)를 참고해 주십시오. 닷넷환경은 언어간 호환성이 있으므로 C++등의 언어를 사용한 개발도 가능하며, WinCE에서도 고급언어를 이용한 프로그램 개발이 가능하므로 티칭패널등에 사용하면 매우 빠르게 제품을 출시할 수 있을 것입니다.</p>
<p>다음에 기회가 된다면 좀더 유용한 내용으로 다시 뵙겠습니다. 끝까지 읽어주신 독자분들께 감사드립니다.</p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;"><strong><span style="color: #333333; text-decoration: underline;">* 본 글의 작성에 사용된 EventBus 프레임워크는 버전0.2 입니다.</span></strong></span></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/5349/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[7호]Multi-CAN Analyzer를 이용한 차량 ECU 모니터링</title>
		<link>http://www.ntrexgo.com/archives/8870</link>
		<comments>http://www.ntrexgo.com/archives/8870#comments</comments>
		<pubDate>Wed, 25 May 2011 06:19:23 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[7호]]></category>
		<category><![CDATA[모니터링]]></category>
		<category><![CDATA[소프트웨어]]></category>
		<category><![CDATA[쇼케이스]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=8870</guid>
		<description><![CDATA[디바이스마트 매거진 7호 &#124; 본고에서는 CAN 메시지를 송수신하고 메시지로부터 프로토콜을 해석할 수 있는 Analyzer를 소개하고, 그것을 통해 실제 차량 ECU로부터 다양한 정보를 모니터링 하는 방법에 대해 소개한다.]]></description>
				<content:encoded><![CDATA[<h2><span style="color: #333399"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA001.jpg" rel="lightbox[8870]"><img class=" wp-image-8764 alignleft" alt="07SHMA001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA001-300x225.jpg" width="194" height="146" /></a><strong>Multi-CAN Analyzer를 </strong></span></h2>
<h2><span style="color: #333399"><strong>이용한 </strong></span><strong><span style="color: #333399">차량 ECU 모니터링</span></strong></h2>
<p style="text-align: right">
<p style="text-align: right">자료제공 : 마을소프트웨어</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #000080;background-color: #ffffff"><strong>1. 들어가며</strong></span></p>
<p>CAN (Controller Area Network)은 멀티마스터(Multi-Master) 브로드케스트 시리얼(Broadcast Serial) 버스 표준으로 실시간 제어 응용시스템 내에 있는 센서나 기동장치 등과 같은 주변장치들을 서로 연결해 주는 메시지 통신방식으로 마이크로 제어기용 네트웍을 가리킨다. CAN에서는 이더넷 등에서 사용되는 것과 같은 주소 지정 개념은 사용되지 않으며, 메시지는 해당 네트웍에서의 고유한 식별자를 사용하여 네트웍 내에 있는 모든 노드들에게 동시에 뿌려진다. 개개의 노드들은 이 식별자에 기반하여 해당 메시지를 처리할 것인지의 여부를 결정하며. 버스 접근 순서 역시 경쟁원리에 따라 메시지 우선순위가 배정되어 충돌이 없어 중단 없는 데이터 전송이 가능하다. 또한 differential twisted pair방식을 사용하여 노이즈에 매우 강한 특성이 있다. 보다 자세한 CAN에 대한 역사나 기술적인 내용은 본고에서는 생략하기로 하고 참고자료를 참고한다.<br />
위와 같은 CAN 특성으로 최근 매우 안정성을 요구 하는 차량의 내부 네트워크로 CAN 통신을 사용하고 있는 추세다. 즉 주제어기인 ECU (Electronic Control Units) 끼리의 통신이나 각종 센서 및 작동기 등과 안정적인 통신을 위해 CAN이 사용되고 있는 것 이다. 따라서 CAN 통신을 이용하여 ECU가 이해할 수 있는 프로토콜로 통신을 하게 되면 차량 네트워크로부터 차량의 다양한 정보를 얻어 낼 수 있게 된다.<br />
본고에서는 CAN 메시지를 송수신하고 메시지로부터 프로토콜을 해석할 수 있는 Analyzer를 소개하고, 그것을 통해 실제 차량 ECU로부터 다양한 정보를 모니터링 하는 방법에 대해 소개한다.</p>
<p><span style="color: #000080"><strong>2. Multi-CAN Analyzer 소개</strong></span></p>
<p>마을소프트웨어는 반도체 및 LED 생산설비 제조 전문업체로 그간 산업용 제어 분야의 경험을 기반으로 다양한 CAN 제품을 출시하였다. CAN 경험이 없는 일반 사용자들을 위해 보다 쉽게 접근할 수 있는 CAN2RS232 컨버터와, 인터넷을 통한 원격 제어를 위한 CAN2Ethernet 게이트웨이 등이 그것이다. 이 제품들은 주로 제어기 용도로 개발되었기 때문에 필터 설정을 통해 필요로 하는 메시지들만 CAN 버스로부터 수신하고 전송하는 제품으로 컨버터나 게이트웨이가 처리할 수 있는 용량 이상으로 CAN버스 메시지를 모두 처리 할 수는 없었다. 또한 절연되지 않아 현장 상황에 따라 컨버터가 파손되는 경우도 있었다. 이런 이유로 Analyzer 용도로는 적합하지 못해 High-End급 고성능 절연 CAN-USB Analyzer와 Multi-CAN Analyzer를 개발 출시 하게 되었다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA001.jpg" rel="lightbox[8870]"><img class="size-medium wp-image-8764 aligncenter" alt="07SHMA001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA001-300x225.jpg" width="300" height="225" /></a><br />
본고에서 소개될 Multi-CAN Analyzer는 이름에서 유추 할 수 있듯이 동시에 여러 인터페이스 방식을 사용할 수 있는데, 그것은 RS232C, USB 그리고 Ethernet이다. 따라서 어떠한 환경이나 조건에도 쉽게 Analyzer를 쓸 수 있는 장점이 있다. RS232C는 최대 460800bps의 속도 까지 사용할 수 있으며 인터페이스가 UART밖에 없는 소형 제어기와도 쉽게 연결된다. USB는 PC와 외부 전원 없이 연결할 수 있기 때문에 노트북으로 현장에서 디버깅하는데 매우 유용하다. Ethernet은 현장에 설치된 CAN버스의 문제점을 원격지 사무실에서 모니터링 하는데 매우 적합하다.<br />
본 Analyzer는 제공되는 전용 프로토콜을 통해 직접 Analyzer를 제어기들과 연결하여 고성능 컨버터 처럼 사용할 수도 있지만, Windows 응용프로그램으로 제공되는 전용 분석기인 CANTALKER를 통해 추가적인 소프트웨어 개발 없이 고수준의 CAN 프로토콜을 분석할 수 있다. 기본적으로 표준 프로토콜로 OBD-II, CANopen 그리고 DeviceNet등이 일부 지원되며 향후 J1939도 지원될 예정이다.</p>
<div id="attachment_8763" class="wp-caption alignnone" style="width: 630px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA002.jpg" rel="lightbox[8870]"><img class="size-large wp-image-8763" alt="그림1. CANTALKER Windows Application" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA002-620x228.jpg" width="620" height="228" /></a><p class="wp-caption-text">그림1. CANTALKER Windows Application</p></div>
<p>그 밖에 CANTALKER가 지원하는 주요 기능은 다음과 같다.</p>
<p>· 10us 단위 Timestamp<br />
· CAN 송신 메시지 프로그래밍<br />
· CAN 송수신 메시지 읽기 및 저장<br />
(텍스트 파일로 export지원)<br />
· 특정 CAN 메시지 모니터링 및 산술 계산 / 그래픽 표시 / 로깅(실시간/비실시간 지원)<br />
· CAN 수신 메시지 소프트웨어 필터링 / 트리거<br />
· CAN 송수신 메시지에서 특정 메시지 찾기 / 복사<br />
· CAN 버스 통계자료 제공<br />
· CAN 컨트롤러 상태 확인 및 제어<br />
· 터미널<br />
· 펌웨어 업그레이드</p>
<p>본고에서 ECU 모니터링에 사용될 장비와 프로그램은 Multi-CAN Analyzer와 CANTALKER이다.</p>
<p><span style="color: #000080"><strong>3. ECU 모니터링</strong></span></p>
<p>CAN통신을 지원하는 차량의 대부분은 OBD-II PID 프로토콜을 지원한다. ECU와 통신하기 위해서는이 프로토콜을 반드시 숙지 해야 하는데 그다지 복잡하기 않기 때문에 쉽게 구현될 수 있다. 그럼 OBD-II PID가 무엇인지 다음절에서 알아 본다.</p>
<p><span style="color: #3366ff"><strong>3.1 OBD-II PID란 ?</strong></span></p>
<p>OBD-II PID는 On Board Diagnostics Parameter ID의 약자로 정확하게 말하면 프로토콜이 아니라 코드를 의미 하며 SAE J1979 표준의 한 부분으로 1996년부터 북미의 모든 차량에 구현되었다. 이 코드는 고장 진단장치가 차량으로부터 데이터를 얻는데 사용되는데 데이터를 요청할 때 OBD-II PID 코드를 정해진 프로토콜을 이용하여 차량으로 요청하여 응답을 얻는다. 중요 PID종류와 관련 응답 데이터 형식은 표 1과 같다. 모든 PID는 모든 차량에서 지원하는 것은 아닌데, 지원여부는 PID 00의 응답 값으로부터 알 수 있다.<br />
표 1의 공식에서 사용되고 있는 알파벳 A, B, C, D 등은 수신된 데이터의 바이트 순서와 일치한다. 즉 첫번째 바이트는 A, 두번째는 B, 세번째는 C, 그리고 네번째는 D이다.</p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center">Mode</td>
<td style="text-align: center">PID</td>
<td style="text-align: center">수신크기</td>
<td style="text-align: center">설명</td>
<td style="text-align: center">Min</td>
<td style="text-align: center">Max</td>
<td style="text-align: center">단위</td>
<td style="text-align: center">공식</td>
</tr>
<tr>
<td style="text-align: center">00</td>
<td style="text-align: center">00</td>
<td style="text-align: center">4</td>
<td style="text-align: center">PID Supported [01-20]</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td style="text-align: center">Bit encoded [A7..D0]==<br />
[PID 0×01..PID 0×20]</td>
</tr>
<tr>
<td style="text-align: center">01</td>
<td style="text-align: center">04</td>
<td style="text-align: center">1</td>
<td style="text-align: center">Calculated engine load value</td>
<td style="text-align: center">0</td>
<td style="text-align: center">100</td>
<td style="text-align: center">%</td>
<td style="text-align: center">A*100/255</td>
</tr>
<tr>
<td style="text-align: center">01</td>
<td style="text-align: center">05</td>
<td style="text-align: center">1</td>
<td style="text-align: center">Engine Coolant Temperature</td>
<td style="text-align: center">-40</td>
<td style="text-align: center">215</td>
<td style="text-align: center">°C</td>
<td style="text-align: center">A-40</td>
</tr>
<tr>
<td style="text-align: center">01</td>
<td style="text-align: center">0C</td>
<td style="text-align: center">2</td>
<td style="text-align: center">Engine RPM</td>
<td style="text-align: center">0</td>
<td style="text-align: center">16383.75</td>
<td style="text-align: center">rpm</td>
<td style="text-align: center">((A*256)+B)/4</td>
</tr>
<tr>
<td style="text-align: center">01</td>
<td style="text-align: center">0D</td>
<td style="text-align: center">1</td>
<td style="text-align: center">Vehicle speed</td>
<td style="text-align: center">0</td>
<td style="text-align: center">255</td>
<td style="text-align: center">km/h</td>
<td style="text-align: center">A</td>
</tr>
<tr>
<td style="text-align: center">01</td>
<td style="text-align: center">0E</td>
<td style="text-align: center">1</td>
<td style="text-align: center">Timing Advance</td>
<td style="text-align: center">-64</td>
<td style="text-align: center">63.5</td>
<td style="text-align: center">relative to #1 cylinder</td>
<td style="text-align: center">A/2-64</td>
</tr>
<tr>
<td style="text-align: center">01</td>
<td style="text-align: center">0F</td>
<td style="text-align: center">1</td>
<td style="text-align: center">Intake air Temperature</td>
<td style="text-align: center">-40</td>
<td style="text-align: center">215</td>
<td style="text-align: center">°C</td>
<td style="text-align: center">A-40</td>
</tr>
<tr>
<td style="text-align: center">01</td>
<td style="text-align: center">10</td>
<td style="text-align: center">2</td>
<td style="text-align: center">MAF air flow rate</td>
<td style="text-align: center">0</td>
<td style="text-align: center">655.35</td>
<td style="text-align: center">g/s</td>
<td style="text-align: center">((A*256)+B)/100</td>
</tr>
<tr>
<td style="text-align: center">01</td>
<td style="text-align: center">11</td>
<td style="text-align: center">1</td>
<td style="text-align: center">Throttle Position</td>
<td style="text-align: center">0</td>
<td style="text-align: center">100</td>
<td style="text-align: center">%</td>
<td style="text-align: center">A*100/255</td>
</tr>
<tr>
<td style="text-align: right" colspan="8">표1. PID 목록 및 설명</td>
</tr>
</tbody>
</table>
<p>표 1의 Mode는 각 숫자별로 의미하는 내용은 표 2에서 알 수 있다. ECU의 각종 정보 데이터를 얻는 경우는 대부분 현재 데이터 표시용 Mode 0&#215;01만 이용하면 되며, 차량의 고장진단 코드를 얻고자 하는 경우는 Mode 0&#215;03를 사용한다.</p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center">Mode</td>
<td style="text-align: center">설명</td>
</tr>
<tr>
<td style="text-align: center">0&#215;01</td>
<td style="text-align: center">Show current data</td>
</tr>
<tr>
<td style="text-align: center">0&#215;02</td>
<td style="text-align: center">Show freeze frame data</td>
</tr>
<tr>
<td style="text-align: center">0&#215;03</td>
<td style="text-align: center">Show stored Diagnostic Trouble Codes</td>
</tr>
<tr>
<td style="text-align: center">0&#215;04</td>
<td style="text-align: center">Clear Diagnostic Trouble Codes and stored values</td>
</tr>
<tr>
<td style="text-align: center">0&#215;05</td>
<td style="text-align: center">Test results, oxygen sensor monitoring (non CAN only)</td>
</tr>
<tr>
<td style="text-align: center">0&#215;06</td>
<td style="text-align: center">Test results, other component/system monitoring<br />
(Test results, oxygen sensor monitoring for CAN only)</td>
</tr>
<tr>
<td style="text-align: center">0x0A7</td>
<td style="text-align: center">Show pending Diagnostic Trouble Codes<br />
(detected during current or last driving cycle)</td>
</tr>
<tr>
<td style="text-align: center">0&#215;08</td>
<td style="text-align: center">Control operation of on-board component/system</td>
</tr>
<tr>
<td style="text-align: center">0&#215;09</td>
<td style="text-align: center">Request vehicle information</td>
</tr>
<tr>
<td style="text-align: center">0x0A</td>
<td style="text-align: center">Permanent DTC&#8217;s (Cleared DTC&#8217;s)</td>
</tr>
<tr>
<td style="text-align: right" colspan="2">표 2. Mode별 설명</td>
</tr>
</tbody>
</table>
<p>차량으로부터 데이터를 얻기 위해 ECU로 PID를 전달하기 위한 질의 CAN 메시지 형태는 각 메시지 데이터 바이트 별로 다음과 같은 형식을 갖는다. CAN ID는 11비트를 사용하는 경우 반드시 0x7DF로 해야 한다.</p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center">Byte 0</td>
<td style="text-align: center">Byte 1</td>
<td style="text-align: center">Byte 2</td>
<td style="text-align: center">Byte 3</td>
<td style="text-align: center">Byte 4</td>
<td style="text-align: center">Byte 5</td>
<td style="text-align: center">Byte 6</td>
<td style="text-align: center">Byte 7</td>
</tr>
<tr>
<td style="text-align: center">추가데이터<br />
바이트 수 0×02</td>
<td style="text-align: center">Mode<br />
0×01=show current data</td>
<td style="text-align: center">PID Code</td>
<td style="text-align: center">0×55</td>
<td style="text-align: center">0×55</td>
<td style="text-align: center">0×55</td>
<td style="text-align: center">0×55</td>
<td style="text-align: center">0×55</td>
</tr>
</tbody>
</table>
<p>CAN메시지 전체 8바이트 중 첫번째 바이트(Byte0)는 몇 바이트의 정보가 오는지를 의미 하는 것으로 그 뒤로 Mode와 PID Code가 각각 1바이트씩 2바이트가 오기 때문에 2가 되며, 세번째 바이트(Byte2)는 PID코드가 위치하고 그 이상은 사용되지 않으므로 0&#215;55로 채워진다.</p>
<p><em id="__mceDel"> 이상과 같이 생성된 CAN 메시지를 ECU로 전송하면 ECU는 다음과 같은 형태의 CAN메시지로 응답한다. 이때 응답으로 오는 CAN ID는 주로 0x7E8이며, 0x7E9나 0x7EA가 될 수 도 있다.</em></p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center">Byte 0</td>
<td style="text-align: center">Byte 1</td>
<td style="text-align: center">Byte 2</td>
<td style="text-align: center">Byte 3</td>
<td style="text-align: center">Byte 4</td>
<td style="text-align: center">Byte 5</td>
<td style="text-align: center">Byte 6</td>
<td style="text-align: center">Byte 7</td>
</tr>
<tr>
<td style="text-align: center">추가데이터<br />
바이트 수 3~6</td>
<td style="text-align: center">Custom Mode<br />
0×40+Mode 0×41=show current data</td>
<td style="text-align: center">PID Code</td>
<td style="text-align: center">Value0(A)</td>
<td style="text-align: center">Value1(B) (Option)</td>
<td style="text-align: center">Value2(C) (Option)</td>
<td style="text-align: center">Value3 (D) (Option)</td>
<td style="text-align: center">0×55</td>
</tr>
</tbody>
</table>
<p>여기서 첫번째 바이트는 질의 메시지와 동일하게 이후에 올 추가 데이터의 크기이다. 두번째는 질의 메시지에서 사용된 Mode값에 0×40을 더한값과 같다. 내번째 부터는 질의한 PID에 대한 응답데이터가 온다. 데이터 크기는 1바이트부터 4바이트까지만 갖을 수 있어 마지막 Byte7은 사용되지 않아 0×55로 채워진다. 응답데이터는 첫번째 바이트부터 A, B, C, D로 명명되고 PID 표의 공식 부분에서 참조된다.</p>
<p><strong style="color: #3366ff">3.2 ECU 모니터링을 위한 전송 메시지 설정</strong></p>
<p>이제 ECU로 전달해야 할 CAN메시지 형식을 알게 되었기 때문에 Analyzer에서 질의 메시지를 작성하여 보내 보고자 한다. 보낼 PID는 표 1에 나와 있는 것으로 하고, 각 PID별로 보내는 시간 간격은 10ms로 한다. 모든 PID를 모두 보내면 10ms 만큼 대기하고 다시 처음부터 PID전송을 반복 한다. 이것을 Analyzer의 “CAN Send Message Tool”에서 설정하는 방법은 다음과 같다.</p>
<p>1. Engine RPM 질의를 위한 CAN메시지 예는 다음과 같다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA003.jpg" rel="lightbox[8870]"><img class="alignnone size-full wp-image-8762" alt="07SHMA003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA003.jpg" width="558" height="44" /></a><br />
A. 전송하므로 Task Type은 “TX”<br />
B. 11비트 질의이므로 CAN ID는 0×7DF, 2.0B와 RTR은 설정하지 않음<br />
C. DATA는 “02 01 0C 55 55 55 55 55”로 함, 여기서 0×0C Engine RPM 질의 PID임.<br />
D. 추가 반복하지 않으므로 Repeat는 “0”<br />
E. 10ms이후에 다음 메시지 전송하므로 Interval은 “10”<br />
2. 위와 같은 형식으로 나머지 PID에 대해서 모두 추가 한다.<br />
3. 모든 PID가 전송된 후 10ms대기를 위해 Task Type이 “WAIT”, Wait Time을 10으로 설정한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA004.jpg" rel="lightbox[8870]"><img class="alignnone size-full wp-image-8761" alt="07SHMA004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA004.jpg" width="561" height="48" /></a><br />
4. 다시 처음부터 반복 전송을 위해 Task Type을 “GOTO”, Goto Index는 “0”으로 설정한다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA005.jpg" rel="lightbox[8870]"><img class="alignnone size-full wp-image-8760" alt="07SHMA005" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA005.jpg" width="546" height="46" /></a><br />
이렇게 모두 입력되면 “CAN Send Message Tool”창은 다음과 같이 보여지며 전송준비는 완료되며 (GO)버튼을 클릭하면 CAN메시지가 전송되기 시작한다. 이때 대부분 차량내에 사용되는 CAN통신 속도는 500kbps이므로 사전에 CAN통신 속도는 맞춰져 있어야 한다. 그렇지 않은 경우는 Analyzer의 Error LED가 켜질 것이다.</p>
<div id="attachment_8759" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA006.jpg" rel="lightbox[8870]"><img class=" wp-image-8759 " alt="그림2" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA006.jpg" width="480" height="283" /></a><p class="wp-caption-text">그림2</p></div>
<p><span style="color: #3366ff"><strong>3.3 ECU 모니터링을 위한 수신 메시지 설정</strong></span></p>
<p>3.1절에서 OBD-II PID가 포함된 질의 메시지에 대한 ECU 응답 메시지에 대한 형식을 알아 봤다. 이 정보를 토대로 CANTALKER에서 지원하는 “Monitor CAN ID &amp; Data” 기능을 이용하여 응답 메시지로부터 실제 물리적인 값들을 추출하여 그래프로 표시하여 보자.<br />
응답 메시지 형식과 표 1의 공식 부분을 참고 하여 “Monitor Condition”을 작성하여 보자. “Engine RPM”작성예를 보면 다음과 같다.</p>
<p>1. Item Title은 제목인 “Engine RPM”을 기록한다.<br />
2. “CAN ID To Monitor”는 모니터링 하고자 하는 CAN ID를 의미 하므로 0x7E8이 된다.<br />
3. “Engine RPM”의 경우 PID가 0x0C인데, CAN메시지 8바이트 중 세번째 바이트가 PID이므로 이 값이 0x0C인 메시지를 찾기 위해 Mask와 Compare는 다음과 같이 설정한다.<br />
4. Mask는 세번째 바이트만 관심 대상이므로 0xFF로 설정하고, Compare값의 세번째 바이트를 0x0C로 설정한다. 이유는 “MSG &amp; Mask == Compare”공식에 의해 각 바이트에 대해 모두 참이 되면 수신 메시지를 사용하게 된다.<br />
5. 이렇게 수신 조건에 의해 걸러진 “Engine PRM” 메시지에서 Engine PRM에 관련된 데이터를 추출하기 위해 다음과 같이 설정한다.<br />
6. Engine RPM값은 CAN 메시지 8바이트 중 4번째 바이트부터 2바이트 크기를 갖기 때문에 “Offset”은 3, “Length”는 2가 된다. 추출된 2바이트에서 첫번째가 상위 두번째가 하위 바이트가 되는 Big Endian형식이므로 “Big Endian”에 채크한다. 또한 공식에 의해 2바이트 값을 4로 나누거나 또는 0.25로 곱해야 하므로 “Multiply”에 0.25를 입력한다. 최종 생성되는 값은 산술 계산된 정수형이므로“Display Data Format”을“Scaled Integer”로 선택한다.<br />
7. 결과적으로 생성된 물리값은 그래프로 표시하고 싶으므로 “Display Type”을 “Graph”로 선택하고 최대 최소값을 각각 0과 6000으로 한다.<br />
그 밖의 다른 Item들도 위와 같은 형식에 의해 공식을 참고하여 비슷한 형식으로 아래 그림3과 같이 모두 입력한다.</p>
<div id="attachment_8758" class="wp-caption aligncenter" style="width: 387px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA007.jpg" rel="lightbox[8870]"><img class=" wp-image-8758 " alt="그림3. " src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA007.jpg" width="377" height="414" /></a><p class="wp-caption-text">그림3.</p></div>
<p><span style="color: #3366ff"><strong>3.4 실차량에서 모니터링 수행</strong></span></p>
<p>3.2절에서 전송할 메시지들를 생성하고 3.3절에서 추출할 수신메시지 형식과 표시형식을 모두 설정하였으므로 실제차량에서 ECU에서 정보가 실제로 오는지 확인해 보자.<br />
먼저 CAN 방식의 OBD-II가 지원되는 차량을 준비해야 한다. 대부분 최근에 생산된 차량은 거의 CAN 버스와 OBD-II를 지원하고 있다. 간혹 CAN은 지원하는데 OBD-II PID메시지에 대해 무응답하는 차량도 있으니 미리 확인해야 한다. Analyzer를 차량의 OBD-II단자에 연결하기 위해서는 OBD-II단자의 핀배열을 확인한 후 CAN 컨넥터와 맞게 케이블을 다음과 같이 제작해야 한다. OBD-II컨넥터는 디바이스마트에서 쉽게 구매할 수 있다.</p>
<div id="attachment_8757" class="wp-caption aligncenter" style="width: 456px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA008.jpg" rel="lightbox[8870]"><img class=" wp-image-8757  " alt="그림4. " src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA008-620x307.jpg" width="446" height="221" /></a><p class="wp-caption-text">그림4.</p></div>
<p>그림4에서 OBD-II Male Connector의 PIN6은 CAN_H, PIN14는 CAN_L 이므로 Analyzer DB9 Connector의 PIN7번과 PIN2번에 각각 연결한다. CAN_H와 CAN_L은 잘못 연결되어서는 절대 안되므로 주의 깊게 작업해야 한다.<br />
커넥터 작업이 완료되면, Analyzer를 차량의 OBD-II단자에 연결한다. 차량에 전원이 들어가거나 시동이 걸려있어야 CAN 통신이 되므로 사전에 전원을 넣거나 시동을 걸어 놓는다. 만약 컨넥터를 연결하자 마자 Analyzer의 Error LED가 점등 된다면, (1) 500kbps 속도 설정이 제대로 안되었거나, (2) CAN_H, CAN_L라인 결선에 문제가 있거나 (3) 종단저항 연결이 ON되어 있는 경우일 수 있으므로 다시 한번 확인해 본다.<br />
모든 준비가 완료되면, “CAN Send Message Tool”에서 (Go)버튼을 클릭하여 ECU에 질의 메시지를 전송시킨다. 그러면 아래와 같이 질의에 해당하는 응답이 수신되면서 그 값과 그래프가 표시된다.</p>
<div id="attachment_8756" class="wp-caption aligncenter" style="width: 630px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA009.jpg" rel="lightbox[8870]"><img class="size-large wp-image-8756" alt="그림5. " src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA009-620x247.jpg" width="620" height="247" /></a><p class="wp-caption-text">그림5.</p></div>
<p>&nbsp;</p>
<p><span style="color: #3366ff"><strong>3.5 기타 차량 네트웍의 데이터 분석</strong></span></p>
<p>차량에 Analyzer를 연결하여 보면 OBD-II PID질의 메시지를 보내지 않아도 수많은 메시지들이 수신되는 것 관찰 할 수 있다. 이 메시지들은 차량에 붙어있는 다양한 센서와 작동기 등과 ECU간에 정보 교류일 것인데 차량회사의 전용 프로토콜을 사용했을 것이다. 이에 알 수 없는 다양한 메시지들이 어떤 의미로 사용되는 것인지 분석하기 위한 방법을 본 절에서 제시하겠다.</p>
<div id="attachment_8755" class="wp-caption aligncenter" style="width: 405px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA010.jpg" rel="lightbox[8870]"><img class=" wp-image-8755 " alt="그림6. " src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA010.jpg" width="395" height="203" /></a><p class="wp-caption-text">그림6.</p></div>
<p>그림6은 뉴카렌스 차량에서 수신한 메시지들에 대해 “CAN Bus Statistics” 기능을 이용하여 어떤 메시지들이 있는지 통계를 보여주고 있다.<br />
OBD-II PID와 관련된 CAN ID를 제외하고 총8개의 CAN ID가 사용되고 있다. 각 ID에 대해 실시간으로 값을 모니터링 하려면 CANTALKER의 “Monitor ID &amp; Data” 기능에서 통계창에서 보여지는 각각의 CAN ID에 대해 “CAN ID to Monitor”에 ID를 입력하고,“Display Data Format”을 “All Data”로 설정하며 [Logging]을 체크하는 식으로 보든 CAN ID를 다음과 같이 입력한다.</p>
<div id="attachment_8754" class="wp-caption aligncenter" style="width: 392px"><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA011.jpg" rel="lightbox[8870]"><img class=" wp-image-8754 " alt="그림7. " src="http://www.ntrexgo.com/wp-content/uploads/2013/04/07SHMA011.jpg" width="382" height="385" /></a><p class="wp-caption-text">그림7.</p></div>
<p>현재 차량에 연결되어 있는 상태라면 [RealTime]을 채크한 후 [Go]버튼을 클릭하면 실시간으로 수신되는 Data 내용을 볼 수 있으며 변화되는 내용이 쉽게 관찰될 수 있다. 만약에 이미 차량에서 데이터를 모두 수집한 상태에서 후처리로 확인하고 싶다면 [RealTime]을 끄고 [Go]버튼을 클릭한다. 처리가 완료되면 CANTALKER 프로그램에 있는 디렉토리에 “Item Title”을 파일이름으로 하고 확장명이 “log”인 파일들이 각각 생성된다. 예를들어 “test_271”에 대해서는 “test_271.log”로 생성된다.<br />
그럼 관찰된 데이터로부터 좀더 깊이 분석을 하기 위해 329 CAN ID의 데이터를 확인해 보자. 다음은 수신된 메시지 로그의 일부이다.</p>
<p>20087.55           40 5D 7D 04 04 20 FF 14<br />
20097.49           40 5D 7D 04 04 20 FF 14<br />
20107.47           40 5D 7D 04 04 20 FF 14<br />
20117.45           86 5D 7D 04 04 20 FF 14<br />
20127.48           86 5D 7D 04 04 20 FF 14<br />
20137.48           86 5D 7D 04 04 20 FF 14<br />
20147.43           86 5D 7D 04 04 20 FF 14<br />
20157.42           86 5D 7D 04 04 20 FF 14<br />
20167.46           86 5D 7D 04 04 20 FF 14<br />
20177.49           86 5D 7D 04 04 20 FF 14<br />
20187.40           86 5D 7D 04 04 20 FF 14<br />
20197.40           DE 5D 7D 04 04 20 FF 14<br />
20207.63           DE 5D 7D 04 04 20 FF 14<br />
20217.41           DE 5D 7D 04 04 20 FF 14<br />
20227.37           DE 5D 7D 04 04 20 FF 14<br />
20237.36           DE 5D 7D 04 04 20 FF 14</p>
<p>첫번째 컬럼은 timestamp이고 두번째가 메시지 내용이다. 메시지 내용을 보면 8바이트 중 첫번째 바이트만 변화되는 것을 볼 수 있다. 그럼 첫번째 컬럼에 대해 그래프로 확인하기 위해 “Monitor CAN ID &amp; Data”기능에서 “test_329” item에 대해 “Calculation Information”과 “Display”를 다음과 같이 수정한다.</p>
<p>1. Offset             : 0<br />
2. Length          : 1<br />
3. Multiply       : 1<br />
4. Add                : 0<br />
5. Display Data Format : Scaled Integer<br />
6. Display Type : Graph<br />
7. Min                : 0<br />
8. Max               : 256</p>
<p>이상과 같이 설정을 완료한 후 다시 [Go] 버튼을 클릭하면 다음과 같이 그래프가 그려지는 모습을 볼 수 있다. 정확하게 무엇을 의미하는지는 자동차 업계에서 일하는 사람이라면 알 수 있을지도 모르겠다.</p>
<p><span style="color: #000080"> <strong>4. 맺음말</strong></span></p>
<p>이상과 같이 차량의 ECU 정보값을 모니터링 하기 위해 OBD-II PID와 관련한 질의와 응답 프로토콜에 대해 확인하였고, 그 내용을 Analyzer에 적용하여 각각의 데이터를 수신하고 그래프까지 출력해 보았다.<br />
필자도 그러했지만 많은 사람들은 정보가 없었을 때 차량의 ECU와 통신을 해서 각종 정보를 얻어내는 것은 자동차 회사에서 프로토콜을 공개하지 않는 이상 불가능 한 것으로 여겨 왔었다. 그러나 정말 단순한 OBD-II PID 프로토콜만 인터넷 검색으로 찾아본다면 차량의 각종 상태나 고장진단 등을 Analyzer로 매우 쉽게 해낼 수 있다는 것을 알게 되었다.<br />
그 밖에 Analyzer에서 제공하는 CANopen이나 DeviceNet 프로토콜로 관련 프로토콜을 지원하는 다양한 장비들의 상태 체크나 고장진단 등에 활용할 수 있으며, 표준 프로토콜을 사용하지 않는 각종 장비나 차량 부품도 CAN버스 통계정보로 사용되는 모든 CAN ID를 찾아 낼 수 있고, 찾아낸 CAN ID에 대해 각각 실시간 모니터링 함으로써 그 메시지의 특성이나 프로토콜을 쉽게 알아 낼 수 있다.</p>
<p><span style="color: #000080"><strong>5. 참고자료</strong></span><br />
<a href="http://terms.co.kr/CAN.htm" target="_blank">http://terms.co.kr/CAN.htm</a><br />
<a href="http://en.wikipedia.org/wiki/Controller_area_network" target="_blank">http://en.wikipedia.org/wiki/Controller_area_network</a><br />
<a href="http://en.wikipedia.org/wiki/OBD-II#OBD-II" target="_blank">http://en.wikipedia.org/wiki/OBD-II#OBD-II</a><br />
<a href="http://en.wikipedia.org/wiki/OBD-II_PIDs" target="_blank">http://en.wikipedia.org/wiki/OBD-II_PIDs</a><br />
Multi-CAN Analyzer &amp; Converter User’s Manual (<a href="http://user.chollian.net/~ascbbs/can/MCA_100_Manual.pdf" target="_blank">http://user.chollian.net/~ascbbs/can/MCA_100_Manual.pdf</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/8870/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[2호]소형 선반 NT-SC2를 소개합니다.</title>
		<link>http://www.ntrexgo.com/archives/10166</link>
		<comments>http://www.ntrexgo.com/archives/10166#comments</comments>
		<pubDate>Sun, 20 Jun 2010 10:34:35 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[스페셜 컬럼]]></category>
		<category><![CDATA[2호]]></category>
		<category><![CDATA[선반]]></category>
		<category><![CDATA[쇼케이스]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=10166</guid>
		<description><![CDATA[디바이스마트 매거진 2호 &#124; NT-SC2제품은 이번 버전의 NT-C2에 비하여, 모터를 BLDC모터를 사용하여, 소음을 줄였............]]></description>
				<content:encoded><![CDATA[<h1><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT001.jpg" rel="lightbox[10166]"><img class="alignnone size-large wp-image-10029" alt="02SCNT001" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT001-620x320.jpg" width="620" height="320" /></a></h1>
<h1><span style="color: #ff0000"><strong><span style="font-size: large">소형 선반 NT-SC2를 소개합니다.</span></strong></span></h1>
<p>이번 달을 시작으로 디바이스마트에서 판매하고 있는 소형공작기계들을 소개하는 시간을 갖도록 하겠습니다.<br />
이번 달은 첫 번째 시간으로 소형 선반 SC2를 소개하도록 하겠습니다.</p>
<p><span style="background-color: #ffff00;color: #000000"><strong>기본 구성품</strong></span></p>
<p>· 80mm 3-JAW CHUCK · MT-2 CENTER · CHANGE GEAR SET<br />
· WRENCH SET · OIL CAN</p>
<p><span style="color: #000000;background-color: #ffff00"><strong>제품 특징</strong></span></p>
<p>1. 안전 스위치가 있어, 안전하게 작업할 수 있습니다.<br />
2. RPM 조절이 편리합니다.<br />
3. 공구대가 4가지 위치 조절이 가능합니다.<br />
4. 정확도가 높아 정밀 가공이 가능합니다.<br />
5. 기어의 조절이 가능합니다.</p>
<p><span style="background-color: #ffff00"><strong><span style="font-size: medium">NT-SC2 각 부분의 명칭 및 소개</span></strong></span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT002.jpg" rel="lightbox[10166]"><img class="alignnone size-large wp-image-10024" alt="02SCNT002" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT002-620x403.jpg" width="620" height="403" /></a></p>
<p><strong>1. 스위치</strong><br />
왼쪽 부터 안전 스위치, 파워램프, 회전방향, 설정 버튼, 퓨즈, RPM 조절 스위치 입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT006.jpg" rel="lightbox[10166]"><img class="alignnone size-large wp-image-10028" alt="02SCNT006" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT006-620x465.jpg" width="620" height="465" /></a></p>
<p><strong>2. 80MM 3-JAW CHUCK</strong></p>
<p>3군데의 홈 중 한 군데를 제품에 들어있는 렌치로 돌려주시면 조절이 가능합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT003.jpg" rel="lightbox[10166]"><img class="alignnone size-large wp-image-10025" alt="02SCNT003" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT003-620x439.jpg" width="620" height="439" /></a></p>
<p><strong>3. 공구대</strong><br />
선반의 바이트를 고정하여 사용하는 곳입니다.<br />
*바이트는 별도 구매하셔야 합니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT004.jpg" rel="lightbox[10166]"><img class="alignnone size-large wp-image-10026" alt="02SCNT004" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT004-620x465.jpg" width="620" height="465" /></a></p>
<p><strong>4. X축, Y축 조절 손잡이</strong><br />
1번 검은 손잡이는 X축, 즉 좌·우의 이동을 하는 손잡이 입니다.<br />
2번 손잡이는 Y축, 즉 상·하의 이동을 하는 손잡이입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT05.jpg" rel="lightbox[10166]"><img class="alignnone size-large wp-image-10027" alt="02SCNT05" src="http://www.ntrexgo.com/wp-content/uploads/2013/04/02SCNT05-620x465.jpg" width="620" height="465" /></a></p>
<p><strong>5. 심압대 조절 손잡이</strong><br />
1번 고정 핸들을 우측으로 돌려주면 고정이 되며,풀어놓은 상태에서는 좌·우로 이동이 가능합니다.<br />
2번 손잡A이는 3번 심압대축을 조절하는 손잡이입니다.</p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline"><span style="color: #000000"><strong style="color: #000000;text-decoration: underline">NT-SC2의 소개를 마치며..</strong></span></span></p>
<p>NT-SC2제품은 이번 버전의 NT-C2에 비하여, 모터를 BLDC모터를 사용하여, 소음을 줄였습니다. 또 한 모터의 출력이 기존 250W 급에서 500W 급으로 좋아짐으로써, 더욱 강력한 힘을 자랑하고 있습니다. NT-SC2는 저렴한 가격으로 각종 샘플 및 취미용으로 사용하실 분들에게 디바이스마트의 이름을 걸고 강력히 추천해 드릴 수 있는 제품입니다.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/10166/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
