<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>프로그래밍 허브</title>
    <link>https://developer-archive.tistory.com/</link>
    <description>개발자들을 위한 정보와 자료 모음</description>
    <language>ko</language>
    <pubDate>Tue, 16 Jun 2026 00:59:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>프로잉2</managingEditor>
    <image>
      <title>프로그래밍 허브</title>
      <url>https://tistory1.daumcdn.net/tistory/6340271/attach/8081ac4511254b28b79ec311f5e7d4f3</url>
      <link>https://developer-archive.tistory.com</link>
    </image>
    <item>
      <title>AW 2026 산업 자동화 전시회 관람 후기 &amp;ndash; 휴머노이드 로봇과 피지컬 AI 기술 트렌드</title>
      <link>https://developer-archive.tistory.com/117</link>
      <description>&lt;h2 data-end=&quot;345&quot; data-start=&quot;325&quot; data-section-id=&quot;1louehl&quot; data-ke-size=&quot;size26&quot;&gt;AW 2026 전시회 관람 후기&lt;/h2&gt;
&lt;p data-end=&quot;458&quot; data-start=&quot;347&quot; data-ke-size=&quot;size16&quot;&gt;최근 열린 &lt;b&gt;AW 2026 (Automation World 2026)&lt;/b&gt; 전시회를 다녀왔다.&lt;br /&gt;자동화, AI, 로봇, 스마트팩토리 기술을 한 자리에서 볼 수 있는 국내 대표 산업 자동화 전시회다.&lt;/p&gt;
&lt;p data-end=&quot;493&quot; data-start=&quot;460&quot; data-ke-size=&quot;size16&quot;&gt;올해 전시회를 관람하면서 가장 크게 느낀 점은 두 가지였다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;554&quot; data-start=&quot;495&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;519&quot; data-start=&quot;495&quot; data-section-id=&quot;a3jctj&quot;&gt;&lt;b&gt;휴머노이드 로봇 기술의 빠른 발전&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;554&quot; data-start=&quot;520&quot; data-section-id=&quot;13wdb2l&quot;&gt;&lt;b&gt;피지컬 AI(Physical AI) 기반 제품 증가&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;635&quot; data-start=&quot;556&quot; data-ke-size=&quot;size16&quot;&gt;AI가 단순한 소프트웨어 기술을 넘어 &lt;b&gt;실제 물리 세계에서 동작하는 기술&lt;/b&gt;로 빠르게 확장되고 있다는 것을 현장에서 직접 확인할 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3y77Q/dJMcahp4K8q/WLYnSraEj4ZfiMwR9tvaL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3y77Q/dJMcahp4K8q/WLYnSraEj4ZfiMwR9tvaL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3y77Q/dJMcahp4K8q/WLYnSraEj4ZfiMwR9tvaL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3y77Q%2FdJMcahp4K8q%2FWLYnSraEj4ZfiMwR9tvaL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;2250&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-end=&quot;640&quot; data-start=&quot;637&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;659&quot; data-start=&quot;642&quot; data-section-id=&quot;i90bmh&quot;&gt;휴머노이드 로봇 기술 트렌드&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPEgui/dJMcaibsEeK/Gf9WfKyew5jlHCduZEHswk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPEgui/dJMcaibsEeK/Gf9WfKyew5jlHCduZEHswk/img.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_20260306_235708509_12.jpg&quot; style=&quot;width: 50.7378%; margin-right: 10px;&quot; data-widthpercent=&quot;51.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPEgui/dJMcaibsEeK/Gf9WfKyew5jlHCduZEHswk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPEgui%2FdJMcaibsEeK%2FGf9WfKyew5jlHCduZEHswk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dX4DjX/dJMcai3woii/5KbKwc4FWiyQcKGT1Da32K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dX4DjX/dJMcai3woii/5KbKwc4FWiyQcKGT1Da32K/img.png&quot; data-origin-width=&quot;2133&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;48.67&quot; style=&quot;width: 48.0994%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dX4DjX/dJMcai3woii/5KbKwc4FWiyQcKGT1Da32K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdX4DjX%2FdJMcai3woii%2F5KbKwc4FWiyQcKGT1Da32K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2133&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20260306_235708509_04.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yah5u/dJMcaaYLFBk/LledkHFOtncOKNLtEiSuJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yah5u/dJMcaaYLFBk/LledkHFOtncOKNLtEiSuJk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yah5u/dJMcaaYLFBk/LledkHFOtncOKNLtEiSuJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYah5u%2FdJMcaaYLFBk%2FLledkHFOtncOKNLtEiSuJk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_20260306_235708509_04.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;759&quot; data-start=&quot;703&quot; data-ke-size=&quot;size16&quot;&gt;이번 전시회에서 특히 눈에 띄었던 분야는 &lt;b&gt;휴머노이드 로봇(Humanoid Robot)&lt;/b&gt; 이었다.&lt;/p&gt;
&lt;p data-end=&quot;806&quot; data-start=&quot;761&quot; data-ke-size=&quot;size16&quot;&gt;휴머노이드 로봇은 인간과 유사한 형태를 가진 로봇으로 다음과 같은 특징을 가진다.&lt;/p&gt;
&lt;h3 data-end=&quot;817&quot; data-start=&quot;808&quot; data-section-id=&quot;h69io2&quot; data-ke-size=&quot;size23&quot;&gt;주요 특징&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;987&quot; data-start=&quot;819&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;880&quot; data-start=&quot;819&quot; data-section-id=&quot;1284ie3&quot;&gt;&lt;b&gt;인간형 구조&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;880&quot; data-start=&quot;836&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;858&quot; data-start=&quot;836&quot; data-section-id=&quot;1ki3rfg&quot;&gt;팔, 다리, 관절을 활용한 동작 가능&lt;/li&gt;
&lt;li data-end=&quot;880&quot; data-start=&quot;862&quot; data-section-id=&quot;dv6iqw&quot;&gt;기존 인간 환경에서 작업 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;943&quot; data-start=&quot;882&quot; data-section-id=&quot;6w16i1&quot;&gt;&lt;b&gt;AI 기반 인지 시스템&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;943&quot; data-start=&quot;905&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;924&quot; data-start=&quot;905&quot; data-section-id=&quot;1bj7adz&quot;&gt;카메라 + 센서 기반 환경 인식&lt;/li&gt;
&lt;li data-end=&quot;943&quot; data-start=&quot;928&quot; data-section-id=&quot;i9d7ff&quot;&gt;객체 인식 및 상황 판단&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;987&quot; data-start=&quot;945&quot; data-section-id=&quot;188flp6&quot;&gt;&lt;b&gt;자율 작업 능력&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;987&quot; data-start=&quot;964&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;971&quot; data-start=&quot;964&quot; data-section-id=&quot;js8qyp&quot;&gt;물건 집기&lt;/li&gt;
&lt;li data-end=&quot;987&quot; data-start=&quot;975&quot; data-section-id=&quot;14vjbv3&quot;&gt;이동 및 작업 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;1052&quot; data-start=&quot;989&quot; data-ke-size=&quot;size16&quot;&gt;이러한 기술 덕분에 앞으로 &lt;b&gt;물류, 제조, 서비스 산업&lt;/b&gt;에서 휴머노이드 활용이 빠르게 늘어날 것으로 예상된다.&lt;/p&gt;
&lt;p data-end=&quot;1113&quot; data-start=&quot;1054&quot; data-ke-size=&quot;size16&quot;&gt;특히 몇몇 부스에서는 실제로 &lt;b&gt;물건을 집거나 이동하는 데모&lt;/b&gt;를 보여주어 관람객들의 관심이 매우 높았다.&lt;/p&gt;
&lt;hr data-end=&quot;1118&quot; data-start=&quot;1115&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1145&quot; data-start=&quot;1120&quot; data-section-id=&quot;uy3i5u&quot;&gt;피지컬 AI (Physical AI) 기술&lt;br /&gt;&lt;br /&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2523&quot; data-origin-height=&quot;2104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lDMAn/dJMcaaEuXLC/bk7bXEJzHRYy5bz2UXotEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lDMAn/dJMcaaEuXLC/bk7bXEJzHRYy5bz2UXotEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lDMAn/dJMcaaEuXLC/bk7bXEJzHRYy5bz2UXotEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlDMAn%2FdJMcaaEuXLC%2Fbk7bXEJzHRYy5bz2UXotEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2523&quot; height=&quot;2104&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2523&quot; data-origin-height=&quot;2104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1232&quot; data-start=&quot;1189&quot; data-ke-size=&quot;size16&quot;&gt;또 하나 인상적이었던 기술은 &lt;b&gt;피지컬 AI(Physical AI)&lt;/b&gt; 였다.&lt;/p&gt;
&lt;h3 data-end=&quot;1246&quot; data-start=&quot;1234&quot; data-section-id=&quot;3c8zdt&quot; data-ke-size=&quot;size23&quot;&gt;피지컬 AI란?&lt;/h3&gt;
&lt;p data-end=&quot;1290&quot; data-start=&quot;1248&quot; data-ke-size=&quot;size16&quot;&gt;피지컬 AI는 &lt;b&gt;AI가 실제 물리 환경과 상호작용하는 기술&lt;/b&gt;을 의미한다.&lt;/p&gt;
&lt;p data-end=&quot;1298&quot; data-start=&quot;1292&quot; data-ke-size=&quot;size16&quot;&gt;기존 AI는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1326&quot; data-start=&quot;1300&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1308&quot; data-start=&quot;1300&quot; data-section-id=&quot;yfhd45&quot;&gt;데이터 분석&lt;/li&gt;
&lt;li data-end=&quot;1317&quot; data-start=&quot;1309&quot; data-section-id=&quot;17snq3l&quot;&gt;이미지 인식&lt;/li&gt;
&lt;li data-end=&quot;1326&quot; data-start=&quot;1318&quot; data-section-id=&quot;1t6iq8d&quot;&gt;텍스트 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1348&quot; data-start=&quot;1328&quot; data-ke-size=&quot;size16&quot;&gt;같은 &lt;b&gt;디지털 영역&lt;/b&gt; 중심이었다.&lt;/p&gt;
&lt;p data-end=&quot;1361&quot; data-start=&quot;1350&quot; data-ke-size=&quot;size16&quot;&gt;하지만 피지컬 AI는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1385&quot; data-start=&quot;1363&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1367&quot; data-start=&quot;1363&quot; data-section-id=&quot;yi0woj&quot;&gt;로봇&lt;/li&gt;
&lt;li data-end=&quot;1376&quot; data-start=&quot;1368&quot; data-section-id=&quot;3xogic&quot;&gt;자율 시스템&lt;/li&gt;
&lt;li data-end=&quot;1385&quot; data-start=&quot;1377&quot; data-section-id=&quot;1pt20es&quot;&gt;자동화 장비&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1426&quot; data-start=&quot;1387&quot; data-ke-size=&quot;size16&quot;&gt;와 결합하여 &lt;b&gt;현실 세계에서 직접 행동하는 AI&lt;/b&gt;라고 볼 수 있다.&lt;/p&gt;
&lt;h3 data-end=&quot;1437&quot; data-start=&quot;1428&quot; data-section-id=&quot;jdpoaq&quot; data-ke-size=&quot;size23&quot;&gt;적용 사례&lt;/h3&gt;
&lt;p data-end=&quot;1469&quot; data-start=&quot;1439&quot; data-ke-size=&quot;size16&quot;&gt;전시회에서 확인할 수 있었던 주요 사례는 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1536&quot; data-start=&quot;1471&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1489&quot; data-start=&quot;1471&quot; data-section-id=&quot;n0pkv7&quot;&gt;AI 기반 로봇 팔 자동 조립&lt;/li&gt;
&lt;li data-end=&quot;1507&quot; data-start=&quot;1490&quot; data-section-id=&quot;g9xi8&quot;&gt;비전 AI 기반 검사 시스템&lt;/li&gt;
&lt;li data-end=&quot;1523&quot; data-start=&quot;1508&quot; data-section-id=&quot;p6r9yx&quot;&gt;자율 이동 로봇(AMR)&lt;/li&gt;
&lt;li data-end=&quot;1536&quot; data-start=&quot;1524&quot; data-section-id=&quot;gpoysl&quot;&gt;스마트 물류 자동화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1584&quot; data-start=&quot;1538&quot; data-ke-size=&quot;size16&quot;&gt;특히 &lt;b&gt;AI 비전 + 로봇 + 자동화 시스템&lt;/b&gt;이 결합된 형태의 제품들이 많았다.&lt;/p&gt;
&lt;p data-end=&quot;1633&quot; data-start=&quot;1586&quot; data-ke-size=&quot;size16&quot;&gt;이는 스마트팩토리 기술이 &lt;b&gt;AI 중심으로 빠르게 진화하고 있다는 신호&lt;/b&gt;로 보인다.&lt;/p&gt;
&lt;hr data-end=&quot;1638&quot; data-start=&quot;1635&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1654&quot; data-start=&quot;1640&quot; data-section-id=&quot;sgck8a&quot;&gt;전시회를 보며 느낀 점&lt;/h1&gt;
&lt;p data-end=&quot;1719&quot; data-start=&quot;1656&quot; data-ke-size=&quot;size16&quot;&gt;이번 AW 2026 전시회를 보면서 느낀 점은 &lt;b&gt;AI와 로봇 기술의 경계가 빠르게 사라지고 있다는 것&lt;/b&gt;이었다.&lt;/p&gt;
&lt;p data-end=&quot;1725&quot; data-start=&quot;1721&quot; data-ke-size=&quot;size16&quot;&gt;과거에는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1751&quot; data-start=&quot;1727&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1739&quot; data-start=&quot;1727&quot; data-section-id=&quot;1vtu441&quot;&gt;AI = 소프트웨어&lt;/li&gt;
&lt;li data-end=&quot;1751&quot; data-start=&quot;1740&quot; data-section-id=&quot;1lwyehi&quot;&gt;로봇 = 하드웨어&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1764&quot; data-start=&quot;1753&quot; data-ke-size=&quot;size16&quot;&gt;라는 인식이 강했다.&lt;/p&gt;
&lt;p data-end=&quot;1773&quot; data-start=&quot;1766&quot; data-ke-size=&quot;size16&quot;&gt;하지만 이제는&lt;/p&gt;
&lt;p data-end=&quot;1798&quot; data-start=&quot;1775&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AI + 로봇 + 자동화 + 데이터&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1821&quot; data-start=&quot;1800&quot; data-ke-size=&quot;size16&quot;&gt;가 하나의 생태계처럼 결합하고 있었다.&lt;/p&gt;
&lt;p data-end=&quot;1904&quot; data-start=&quot;1823&quot; data-ke-size=&quot;size16&quot;&gt;특히 휴머노이드 로봇은 아직 초기 단계이지만, 기술 발전 속도를 보면 앞으로 &lt;b&gt;산업 현장에서도 실제 활용되는 시점이 멀지 않았다고 느껴졌다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>기술 트렌드 &amp;amp; 논문 리뷰/기술 전시회 후기</category>
      <category>AI로봇</category>
      <category>automationworld</category>
      <category>AW2026</category>
      <category>AW전시회</category>
      <category>HumanoidRobot</category>
      <category>physicalAI</category>
      <category>로봇기술</category>
      <category>산업자동화전시회</category>
      <category>피지컬ai</category>
      <category>휴머노이드로봇</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/117</guid>
      <comments>https://developer-archive.tistory.com/117#entry117comment</comments>
      <pubDate>Tue, 10 Mar 2026 09:57:05 +0900</pubDate>
    </item>
    <item>
      <title>디지털 트윈 MCT / CNC 제어하기 -  FANUC</title>
      <link>https://developer-archive.tistory.com/116</link>
      <description>&lt;p data-end=&quot;242&quot; data-start=&quot;195&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3축 서보 부하율 수집부터 클라우드 연동까지 &amp;ndash; MCT 데이터 통합의 모든 것&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;430&quot; data-start=&quot;244&quot; data-ke-size=&quot;size16&quot;&gt;**MCT(머시닝 센터)**와 같은 고정밀 공작기계는 실시간 데이터를 수집하고 분석하는 것이 &lt;b&gt;생산성 향상과 예지보전의 핵심&lt;/b&gt;입니다.&lt;br /&gt;이번 사례에서는 &lt;b&gt;MCT의 서보 로드 정보 및 3축 부하율을 실시간으로 수집&lt;/b&gt;하고, 이를 다양한 **플랫폼(Grafana, 클라우드, 대시보드 등)**에서 활용하기 위한 구조를 정리합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/myETw/dJMcaaxsrer/jOYkA2AhT36YaEs2zzedr1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/myETw/dJMcaaxsrer/jOYkA2AhT36YaEs2zzedr1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/myETw/dJMcaaxsrer/jOYkA2AhT36YaEs2zzedr1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmyETw%2FdJMcaaxsrer%2FjOYkA2AhT36YaEs2zzedr1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;675&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-end=&quot;435&quot; data-start=&quot;432&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;449&quot; data-start=&quot;437&quot; data-ke-size=&quot;size26&quot;&gt;✅ 프로젝트 개요&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;703&quot; data-start=&quot;451&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;506&quot; data-start=&quot;479&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;487&quot; data-start=&quot;479&quot;&gt;대상 설비&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;506&quot; data-start=&quot;487&quot;&gt;머시닝 센터 (CNC 기반)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;556&quot; data-start=&quot;507&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;516&quot; data-start=&quot;507&quot;&gt;주요 데이터&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;556&quot; data-start=&quot;516&quot;&gt;서보 모터 부하율, 3축(X/Y/Z) 부하 상태, 스핀들 속도 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;600&quot; data-start=&quot;557&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;565&quot; data-start=&quot;557&quot;&gt;수집 방식&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;600&quot; data-start=&quot;565&quot;&gt;OPC UA / MTConnect / CNC API 연동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;654&quot; data-start=&quot;601&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;609&quot; data-start=&quot;601&quot;&gt;개발 환경&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;654&quot; data-start=&quot;609&quot;&gt;Python, Node-RED, MQTT, InfluxDB, Grafana&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;703&quot; data-start=&quot;655&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;663&quot; data-start=&quot;655&quot;&gt;활용 목적&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;703&quot; data-start=&quot;663&quot;&gt;실시간 시각화, 상태 진단, 클라우드 플랫폼 연동, 디지털 트윈 구축&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;708&quot; data-start=&quot;705&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;731&quot; data-start=&quot;710&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ 실시간 데이터 수집 구성도&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770825503465&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[MCT] &amp;rarr; [CNC Controller] &amp;rarr; [OPC UA / MTConnect Adapter] &amp;rarr; [Edge Gateway]  
                                     &amp;darr;  
                           [InfluxDB / MQTT Broker]  
                                     &amp;darr;  
                          [Grafana / Cloud Dashboard / MES]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;1084&quot; data-start=&quot;1004&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1084&quot; data-start=&quot;1006&quot; data-ke-size=&quot;size16&quot;&gt;MCT에서 서보 드라이브와 컨트롤러(CNC, FANUC, SIEMENS 등)를 통해 &lt;b&gt;부하 정보, 위치, 속도 등 데이터를 추출&lt;/b&gt;합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;1089&quot; data-start=&quot;1086&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1115&quot; data-start=&quot;1091&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ 서보 로드 및 3축 부하율 정보&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1316&quot; data-start=&quot;1117&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1182&quot; data-start=&quot;1145&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1162&quot; data-start=&quot;1145&quot;&gt;Servo Load (%)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1182&quot; data-start=&quot;1162&quot;&gt;각 축 모터의 현재 부하 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1225&quot; data-start=&quot;1183&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1201&quot; data-start=&quot;1183&quot;&gt;Axis Load X/Y/Z&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1225&quot; data-start=&quot;1201&quot;&gt;각각의 축에서 현재 작업 중인 부하율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1265&quot; data-start=&quot;1226&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1241&quot; data-start=&quot;1226&quot;&gt;Spindle Load&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1265&quot; data-start=&quot;1241&quot;&gt;가공 중 스핀들에 가해지는 토크 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1316&quot; data-start=&quot;1266&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1288&quot; data-start=&quot;1266&quot;&gt;Feed Rate, Position&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1316&quot; data-start=&quot;1288&quot;&gt;공정 중 위치 및 이송 속도 정보 포함 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770825525563&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;timestamp&quot;: &quot;2024-02-11T10:15:30Z&quot;,
  &quot;axis&quot;: {
    &quot;X&quot;: {&quot;load&quot;: 45.3},
    &quot;Y&quot;: {&quot;load&quot;: 38.7},
    &quot;Z&quot;: {&quot;load&quot;: 51.2}
  },
  &quot;servo&quot;: {
    &quot;spindleLoad&quot;: 63.5
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1580&quot; data-start=&quot;1506&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;Tip&lt;/b&gt;: 대부분의 컨트롤러는 위 정보를 &lt;b&gt;OPC UA 노드&lt;/b&gt; 또는 &lt;b&gt;MTConnect의 XML 스트림&lt;/b&gt;으로 제공함&lt;/p&gt;
&lt;hr data-end=&quot;1585&quot; data-start=&quot;1582&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1611&quot; data-start=&quot;1587&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ 다양한 플랫폼을 위한 수집 구성&lt;/h2&gt;
&lt;h3 data-end=&quot;1635&quot; data-start=&quot;1613&quot; data-ke-size=&quot;size23&quot;&gt;① &lt;b&gt;Edge &amp;rarr; DB 구조&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1761&quot; data-start=&quot;1637&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1688&quot; data-start=&quot;1637&quot;&gt;수집기: Python or Node-RED 기반 OPC UA/MTConnect 클라이언트&lt;/li&gt;
&lt;li data-end=&quot;1729&quot; data-start=&quot;1689&quot;&gt;저장소: InfluxDB, PostgreSQL 등 시계열/관계형 DB&lt;/li&gt;
&lt;li data-end=&quot;1761&quot; data-start=&quot;1730&quot;&gt;시각화: Grafana (실시간 부하율 트렌드 확인)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1787&quot; data-start=&quot;1763&quot; data-ke-size=&quot;size23&quot;&gt;② &lt;b&gt;MQTT + 클라우드 연동&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1882&quot; data-start=&quot;1789&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1814&quot; data-start=&quot;1789&quot;&gt;MQTT Broker로 실시간 스트림 전송&lt;/li&gt;
&lt;li data-end=&quot;1851&quot; data-start=&quot;1815&quot;&gt;AWS IoT Core / Azure IoT Hub 연계 가능&lt;/li&gt;
&lt;li data-end=&quot;1882&quot; data-start=&quot;1852&quot;&gt;클라우드에서 대시보드 구성 또는 예지보전 모델 접목&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1887&quot; data-start=&quot;1884&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1916&quot; data-start=&quot;1889&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ 실시간 시각화 예시 (Grafana)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1987&quot; data-start=&quot;1918&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1940&quot; data-start=&quot;1918&quot;&gt;서보 로드 변화율 (시간대별 그래프)&lt;/li&gt;
&lt;li data-end=&quot;1957&quot; data-start=&quot;1941&quot;&gt;3축 동시 부하율 모니터링&lt;/li&gt;
&lt;li data-end=&quot;1987&quot; data-start=&quot;1958&quot;&gt;알람 조건: 특정 축이 80% 이상 부하 시 경고&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2034&quot; data-start=&quot;2031&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2049&quot; data-start=&quot;2036&quot; data-ke-size=&quot;size26&quot;&gt; ️ 실무 노하우&lt;/h2&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2325&quot; data-start=&quot;2051&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;팁&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2135&quot; data-start=&quot;2077&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2090&quot; data-start=&quot;2077&quot;&gt;컨트롤러 종류 확인&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2135&quot; data-start=&quot;2090&quot;&gt;FANUC/Siemens/Mitsubishi는 각기 다른 OPC 노드 구성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2179&quot; data-start=&quot;2136&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2149&quot; data-start=&quot;2136&quot;&gt;네트워크 지연 대응&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2179&quot; data-start=&quot;2149&quot;&gt;MQTT QoS 조정 또는 버퍼 처리 로직 구현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2227&quot; data-start=&quot;2180&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2191&quot; data-start=&quot;2180&quot;&gt;DB 선택 기준&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2227&quot; data-start=&quot;2191&quot;&gt;InfluxDB는 시계열 데이터에 최적, 알림 기능도 내장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2273&quot; data-start=&quot;2228&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2240&quot; data-start=&quot;2228&quot;&gt;데이터 병합 처리&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2273&quot; data-start=&quot;2240&quot;&gt;서보/위치/알람을 하나의 JSON 패킷으로 통합 추천&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2325&quot; data-start=&quot;2274&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2286&quot; data-start=&quot;2274&quot;&gt;클라우드 연동 팁&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2325&quot; data-start=&quot;2286&quot;&gt;JSON 포맷 유지 &amp;amp; 장비 ID 명시 필수 (멀티 설비 구분)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Pok7VcZDBUY&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=Pok7VcZDBUY&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/Pok7VcZDBUY&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Z545t/dJMb9b3N4bP/l0kyYID5a7LvArU3H1cFtK/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/fc059/dJMb9fZriRl/8ZAgoQrUIS37tj3Hbka7T1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/bY0W9s/dJMb9iaM8ek/9N3FYqOthvDM793xdEjtg0/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;#머시닝센터 #cnc   FANUC 개발 -  Collection system on Real Data&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/Pok7VcZDBUY&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/디지털 트윈 구축 사례</category>
      <category>3축 부하율</category>
      <category>CNC 실시간 모니터링</category>
      <category>Grafana</category>
      <category>influxdb</category>
      <category>MCT 데이터 수집</category>
      <category>MTConnect</category>
      <category>OPC UA</category>
      <category>Servo Load</category>
      <category>디지털 트윈</category>
      <category>산업 IoT</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/116</guid>
      <comments>https://developer-archive.tistory.com/116#entry116comment</comments>
      <pubDate>Fri, 13 Feb 2026 14:00:42 +0900</pubDate>
    </item>
    <item>
      <title>디지털 트윈 3D 프린터 제어하기 &amp;ndash; 시리얼 통신 + G-code 실전편</title>
      <link>https://developer-archive.tistory.com/115</link>
      <description>&lt;p data-end=&quot;305&quot; data-start=&quot;275&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;C#으로 G코드 전송하고 실시간 위치 제어까지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;470&quot; data-start=&quot;307&quot; data-ke-size=&quot;size16&quot;&gt;3D 프린터를 디지털 트윈 환경에서 제어하거나 모니터링하려면, &lt;b&gt;프린터와의 실시간 통신과 상태 업데이트 체계가 필수&lt;/b&gt;입니다.&lt;br /&gt;본 사례에서는 &lt;b&gt;Visual Studio + C# 환경에서 시리얼 통신을 설정하고, G-code 명령어를 전송해 프린터를 직접 제어하는 구조&lt;/b&gt;를 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPluGW/dJMcaiPJgeg/Y55PoWqqfreEl18uFVYMgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPluGW/dJMcaiPJgeg/Y55PoWqqfreEl18uFVYMgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPluGW/dJMcaiPJgeg/Y55PoWqqfreEl18uFVYMgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPluGW%2FdJMcaiPJgeg%2FY55PoWqqfreEl18uFVYMgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1276&quot; height=&quot;572&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-end=&quot;475&quot; data-start=&quot;472&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;489&quot; data-start=&quot;477&quot; data-ke-size=&quot;size26&quot;&gt;✅ 프로젝트 개요&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 115px;&quot; border=&quot;1&quot; data-end=&quot;720&quot; data-start=&quot;491&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;560&quot; data-start=&quot;519&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;527&quot; data-start=&quot;519&quot;&gt;대상 장비&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;560&quot; data-start=&quot;527&quot;&gt;FDM 방식 3D 프린터 (Marlin 펌웨어 기준)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;592&quot; data-start=&quot;561&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;569&quot; data-start=&quot;561&quot;&gt;통신 방식&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;592&quot; data-start=&quot;569&quot;&gt;Serial (USB/COM 포트)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;635&quot; data-start=&quot;593&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;601&quot; data-start=&quot;593&quot;&gt;개발 환경&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;635&quot; data-start=&quot;601&quot;&gt;Visual Studio 2022+, C# .NET 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;677&quot; data-start=&quot;636&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;644&quot; data-start=&quot;636&quot;&gt;제어 명령&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;677&quot; data-start=&quot;644&quot;&gt;G-code (온도 설정, XY 이동, 홈 복귀 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;720&quot; data-start=&quot;678&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;686&quot; data-start=&quot;678&quot;&gt;활용 목적&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;720&quot; data-start=&quot;686&quot;&gt;디지털 트윈 기반 원격 제어, 프린터 상태 실시간 반영&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;725&quot; data-start=&quot;722&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;750&quot; data-start=&quot;727&quot; data-ke-size=&quot;size26&quot;&gt;1. 시리얼 통신 연결 설정 (C#)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770825138903&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.IO.Ports;

SerialPort serial = new SerialPort(&quot;COM3&quot;, 115200); // 포트 &amp;amp; 속도 설정
serial.Open();
serial.WriteLine(&quot;M115&quot;); // 펌웨어 정보 요청 G코드 전송&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1014&quot; data-start=&quot;918&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;Tip&lt;/b&gt;: 3D 프린터 대부분은 115200 또는 250000 bps 속도를 사용하며, Arduino 기반이면 COM 포트 자동 설정 로직을 넣는 것이 좋습니다.&lt;/p&gt;
&lt;hr data-end=&quot;1019&quot; data-start=&quot;1016&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1043&quot; data-start=&quot;1021&quot; data-ke-size=&quot;size26&quot;&gt;2. 기본 G-code 명령어 예제&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1286&quot; data-start=&quot;1045&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;명령&lt;/td&gt;
&lt;td&gt;기능&lt;/td&gt;
&lt;td&gt;예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1115&quot; data-start=&quot;1085&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1094&quot; data-start=&quot;1085&quot;&gt;M105&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1105&quot; data-start=&quot;1094&quot;&gt;현재 온도 요청&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1115&quot; data-start=&quot;1105&quot;&gt;M105&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1163&quot; data-start=&quot;1116&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1130&quot; data-start=&quot;1116&quot;&gt;M104 S200&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1141&quot; data-start=&quot;1130&quot;&gt;노즐 온도 설정&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1163&quot; data-start=&quot;1141&quot;&gt;M104 S200 (200도)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1191&quot; data-start=&quot;1164&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1172&quot; data-start=&quot;1164&quot;&gt;G28&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1182&quot; data-start=&quot;1172&quot;&gt;홈 위치 이동&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1191&quot; data-start=&quot;1182&quot;&gt;G28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1244&quot; data-start=&quot;1192&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1213&quot; data-start=&quot;1192&quot;&gt;G1 X50 Y50 F3000&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1225&quot; data-start=&quot;1213&quot;&gt;X,Y 위치 이동&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1244&quot; data-start=&quot;1225&quot;&gt;X=50, Y=50으로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1286&quot; data-start=&quot;1245&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1258&quot; data-start=&quot;1245&quot;&gt;M140 S60&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1272&quot; data-start=&quot;1258&quot;&gt;히팅 배드 온도 설정&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1286&quot; data-start=&quot;1272&quot;&gt;M140 S60&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1291&quot; data-start=&quot;1288&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1311&quot; data-start=&quot;1293&quot; data-ke-size=&quot;size26&quot;&gt;3. 실시간 위치 제어 예제&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770825199773&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void MoveToPosition(float x, float y, int speed = 3000)
{
    string gcode = $&quot;G1 X{x} Y{y} F{speed}&quot;;
    serial.WriteLine(gcode);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1474&quot; data-start=&quot;1462&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;실무 팁&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1565&quot; data-start=&quot;1475&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1519&quot; data-start=&quot;1475&quot;&gt;프린터는 명령 처리 후 ok 응답을 반환함 &amp;rarr; 응답을 기다리는 로직 필요&lt;/li&gt;
&lt;li data-end=&quot;1565&quot; data-start=&quot;1520&quot;&gt;G-code 전송 후 딜레이(Thread.Sleep) 또는 수신 확인 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1570&quot; data-start=&quot;1567&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1592&quot; data-start=&quot;1572&quot; data-ke-size=&quot;size26&quot;&gt;4. 프린터 상태 모니터링 구조&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770825180689&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;serial.WriteLine(&quot;M105&quot;); // 현재 온도 요청
string response = serial.ReadLine();
Console.WriteLine($&quot;프린터 응답: {response}&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1746&quot; data-start=&quot;1726&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;디지털 트윈 적용 사례&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1817&quot; data-start=&quot;1747&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1784&quot; data-start=&quot;1747&quot;&gt;프린터 실제 온도와 위치 &amp;rarr; &lt;b&gt;가상 시뮬레이션 모델&lt;/b&gt;에 반영&lt;/li&gt;
&lt;li data-end=&quot;1817&quot; data-start=&quot;1785&quot;&gt;G코드 동기화 기반 &lt;b&gt;양방향 제어 인터페이스 구축&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1822&quot; data-start=&quot;1819&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1836&quot; data-start=&quot;1824&quot; data-ke-size=&quot;size26&quot;&gt;  실무 노하우&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2095&quot; data-start=&quot;1838&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;팁&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1911&quot; data-start=&quot;1864&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1873&quot; data-start=&quot;1864&quot;&gt;전송 안정성&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1911&quot; data-start=&quot;1873&quot;&gt;전송 후 \n 또는 \r\n 필수 (펌웨어 설정 확인)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1958&quot; data-start=&quot;1912&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1924&quot; data-start=&quot;1912&quot;&gt;응답 수신 타이밍&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1958&quot; data-start=&quot;1924&quot;&gt;DataReceived 이벤트 활용 또는 폴링 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1997&quot; data-start=&quot;1959&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1970&quot; data-start=&quot;1959&quot;&gt;포트 충돌 방지&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1997&quot; data-start=&quot;1970&quot;&gt;앱 종료 시 .Close() 필수 호출&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2038&quot; data-start=&quot;1998&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2010&quot; data-start=&quot;1998&quot;&gt;다중 프린터 제어&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2038&quot; data-start=&quot;2010&quot;&gt;포트별 쓰레드 분기 or 큐 처리 방식 구현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2095&quot; data-start=&quot;2039&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2049&quot; data-start=&quot;2039&quot;&gt;G코드 테스트&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2095&quot; data-start=&quot;2049&quot;&gt;Pronterface, OctoPrint로 사전 테스트 후 적용 권장&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3adLFtTPAT4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=3adLFtTPAT4&lt;/a&gt;&lt;/div&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=3adLFtTPAT4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cZX6UD/dJMb85vKRXV/heeTDx0h4PyKyPMIB9DyIK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/AAghm/dJMb82My2Zf/ZktJPxQ7xQN9CFiaILGkGk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bdvXGI/dJMb85vKRXU/yuwGbOaSblDGlNKHvUthw0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;#3dprinting #control G코드로 제어 실습&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/3adLFtTPAT4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/디지털 트윈 구축 사례</category>
      <category>3D 프린터 제어</category>
      <category>3Dprinting</category>
      <category>Arduino</category>
      <category>C# 시리얼통신</category>
      <category>G-code</category>
      <category>Visual Studio</category>
      <category>디지털 트윈</category>
      <category>마를린</category>
      <category>산업 IoT</category>
      <category>시리얼 포트</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/115</guid>
      <comments>https://developer-archive.tistory.com/115#entry115comment</comments>
      <pubDate>Fri, 13 Feb 2026 11:54:03 +0900</pubDate>
    </item>
    <item>
      <title>[PLC 프로그래밍 언어 총정리] LD, ST, SFC, FBD, IL  가이</title>
      <link>https://developer-archive.tistory.com/114</link>
      <description>&lt;p data-end=&quot;284&quot; data-start=&quot;242&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;현장 제어부터 복잡한 데이터 처리까지, 상황에 맞는 언어 선택 가이드&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;426&quot; data-start=&quot;286&quot; data-ke-size=&quot;size16&quot;&gt;PLC를 처음 접하거나 새로운 프로젝트를 설계할 때 가장 많이 하는 고민 중 하나가 바로 **&amp;ldquo;어떤 언어로 짜야 하지?&amp;rdquo;**입니다.&lt;br /&gt;과거에는 &lt;b&gt;래더(LD)&lt;/b&gt; 중심이었지만, 최근에는 &lt;b&gt;ST, SFC&lt;/b&gt; 등 고급 언어도 점점 중요해지고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TRNbH/dJMcagj7ohx/Qt0Z4wqVTX82KKFkYC2cI1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TRNbH/dJMcagj7ohx/Qt0Z4wqVTX82KKFkYC2cI1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TRNbH/dJMcagj7ohx/Qt0Z4wqVTX82KKFkYC2cI1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTRNbH%2FdJMcagj7ohx%2FQt0Z4wqVTX82KKFkYC2cI1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-end=&quot;431&quot; data-start=&quot;428&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;469&quot; data-start=&quot;433&quot; data-ke-size=&quot;size26&quot;&gt;✅ IEC 61131-3에서 정의한 5가지 표준 PLC 언어&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;921&quot; data-start=&quot;471&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;언어&lt;/td&gt;
&lt;td&gt;이름&lt;/td&gt;
&lt;td&gt;주요 특징&lt;/td&gt;
&lt;td&gt;추천 사용 환경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;617&quot; data-start=&quot;546&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;553&quot; data-start=&quot;546&quot;&gt;LD&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;581&quot; data-start=&quot;553&quot;&gt;Ladder Diagram (래더 다이어그램)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;601&quot; data-start=&quot;581&quot;&gt;전기 회로와 유사, 가시성 우수&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;617&quot; data-start=&quot;601&quot;&gt;기계 자동화, 유지보수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;697&quot; data-start=&quot;618&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;625&quot; data-start=&quot;618&quot;&gt;ST&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;653&quot; data-start=&quot;625&quot;&gt;Structured Text (구조화 텍스트)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;675&quot; data-start=&quot;653&quot;&gt;C/파스칼 계열, 복잡한 연산 가능&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;697&quot; data-start=&quot;675&quot;&gt;수학 처리, 조건문, 데이터 조작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;769&quot; data-start=&quot;698&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;705&quot; data-start=&quot;698&quot;&gt;FBD&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;738&quot; data-start=&quot;705&quot;&gt;Function Block Diagram (기능 블록)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;750&quot; data-start=&quot;738&quot;&gt;블록 기반 시각화&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;769&quot; data-start=&quot;750&quot;&gt;논리 제어, PID, 모듈화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;846&quot; data-start=&quot;770&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;777&quot; data-start=&quot;770&quot;&gt;SFC&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;816&quot; data-start=&quot;777&quot;&gt;Sequential Function Chart (순차 기능 차트)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;827&quot; data-start=&quot;816&quot;&gt;순차 흐름 제어&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;846&quot; data-start=&quot;827&quot;&gt;공정 제어, 상태 기반 로직&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;921&quot; data-start=&quot;847&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;854&quot; data-start=&quot;847&quot;&gt;IL&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;882&quot; data-start=&quot;854&quot;&gt;Instruction List (명령어 목록)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;898&quot; data-start=&quot;882&quot;&gt;어셈블리와 유사, 저수준&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;921&quot; data-start=&quot;898&quot;&gt;성능 최적화 (현재는 점차 폐지됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;1009&quot; data-start=&quot;923&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1009&quot; data-start=&quot;925&quot; data-ke-size=&quot;size16&quot;&gt;  IL은 IEC 61131-3 3rd Edition에서 &lt;b&gt;사용 중단(deprecated)&lt;/b&gt; 되었지만, 일부 구형 PLC에서는 여전히 지원됩니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-end=&quot;1014&quot; data-start=&quot;1011&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1035&quot; data-start=&quot;1016&quot; data-ke-size=&quot;size26&quot;&gt;  각 언어별 구조 및 예제&lt;/h2&gt;
&lt;h3 data-end=&quot;1075&quot; data-start=&quot;1042&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1075&quot; data-start=&quot;1042&quot; data-ke-size=&quot;size23&quot;&gt;1️⃣ &lt;b&gt;LD (Ladder Diagram)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1130&quot; data-start=&quot;1076&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;: 전기 회로도와 유사한 형태로 가로줄(Rung)과 접점/코일로 구성된 가장 전통적인 언어&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1166&quot; data-start=&quot;1132&quot; data-ke-size=&quot;size16&quot;&gt;  누구나 쉽게 시각적으로 이해 가능하며 유지보수가 쉬움&lt;/p&gt;
&lt;h4 data-end=&quot;1192&quot; data-start=&quot;1168&quot; data-ke-size=&quot;size20&quot;&gt;예제: 버튼을 눌렀을 때 모터 작동&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770824539569&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[ X00 ] --------( )--------[  Y10 ]
   |                           |
  버튼                       모터 ON&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1305&quot; data-start=&quot;1293&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;사용 팁&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1370&quot; data-start=&quot;1306&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1322&quot; data-start=&quot;1306&quot;&gt;&lt;b&gt;직관적 표현&lt;/b&gt;이 중요&lt;/li&gt;
&lt;li data-end=&quot;1349&quot; data-start=&quot;1323&quot;&gt;자기유지 회로, 인터록, 타이머 제어에 적합&lt;/li&gt;
&lt;li data-end=&quot;1370&quot; data-start=&quot;1350&quot;&gt;논리 흐름이 많아지면 복잡도 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1375&quot; data-start=&quot;1372&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1411&quot; data-start=&quot;1377&quot; data-ke-size=&quot;size23&quot;&gt;2️⃣ &lt;b&gt;ST (Structured Text)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1464&quot; data-start=&quot;1412&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;: 고급 프로그래밍 언어처럼 if/for/while 구조를 지원하며, 코드 중심의 언어&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1503&quot; data-start=&quot;1466&quot; data-ke-size=&quot;size16&quot;&gt;  복잡한 계산, 배열 처리, 사용자 정의 함수 구현에 최적화&lt;/p&gt;
&lt;h4 data-end=&quot;1529&quot; data-start=&quot;1505&quot; data-ke-size=&quot;size20&quot;&gt;예제: 온도 조건에 따라 히터 작동&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770824592124&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IF Temperature &amp;lt; 25 THEN
    Heater := TRUE;
ELSE
    Heater := FALSE;
END_IF;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1637&quot; data-start=&quot;1625&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;사용 팁&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1726&quot; data-start=&quot;1638&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1664&quot; data-start=&quot;1638&quot;&gt;&lt;b&gt;데이터 처리, 수식 연산&lt;/b&gt;에 매우 강력&lt;/li&gt;
&lt;li data-end=&quot;1705&quot; data-start=&quot;1665&quot;&gt;개발자는 &lt;b&gt;C 언어 또는 Python 경험자&lt;/b&gt;면 빠르게 적응 가능&lt;/li&gt;
&lt;li data-end=&quot;1726&quot; data-start=&quot;1706&quot;&gt;디버깅 편의성 &amp;uarr;, 시각화는 부족&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1731&quot; data-start=&quot;1728&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1775&quot; data-start=&quot;1733&quot; data-ke-size=&quot;size23&quot;&gt;3️⃣ &lt;b&gt;FBD (Function Block Diagram)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1819&quot; data-start=&quot;1776&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;: 논리 블록(AND, OR, Timer 등)을 시각적으로 연결해 구성&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1858&quot; data-start=&quot;1821&quot; data-ke-size=&quot;size16&quot;&gt;  시각적이지만, 재사용 가능한 블록 지향적 로직 설계에 적합&lt;/p&gt;
&lt;h4 data-end=&quot;1883&quot; data-start=&quot;1860&quot; data-ke-size=&quot;size20&quot;&gt;예제: 타이머를 이용한 펌프 제어&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770824608164&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(Start) ──[TON]──&amp;gt; (Pump)
         (IN)
         (PT := T#5s)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1968&quot; data-start=&quot;1956&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;사용 팁&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2052&quot; data-start=&quot;1969&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2006&quot; data-start=&quot;1969&quot;&gt;&lt;b&gt;타이머, PID, 계산 블록 등 표준 기능 사용 시 유리&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2023&quot; data-start=&quot;2007&quot;&gt;재사용성이 높은 설계 가능&lt;/li&gt;
&lt;li data-end=&quot;2052&quot; data-start=&quot;2024&quot;&gt;복잡한 로직은 블록 트리 구조가 난해할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2057&quot; data-start=&quot;2054&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;2104&quot; data-start=&quot;2059&quot; data-ke-size=&quot;size23&quot;&gt;4️⃣ &lt;b&gt;SFC (Sequential Function Chart)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2145&quot; data-start=&quot;2105&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;: 상태 기반 제어(Flowchart 형식)의 절차형 로직에 적합&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2173&quot; data-start=&quot;2147&quot; data-ke-size=&quot;size16&quot;&gt;  제조 공정의 단계별 흐름 정의 시 유리&lt;/p&gt;
&lt;h4 data-end=&quot;2209&quot; data-start=&quot;2175&quot; data-ke-size=&quot;size20&quot;&gt;예제: 공정 순서 &amp;ndash; 대기 &amp;rarr; 투입 &amp;rarr; 가열 &amp;rarr; 배출&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770824622434&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Step1: Wait] &amp;rarr; [Step2: Input] &amp;rarr; [Step3: Heat] &amp;rarr; [Step4: Output]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2297&quot; data-start=&quot;2285&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;사용 팁&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2402&quot; data-start=&quot;2298&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2344&quot; data-start=&quot;2298&quot;&gt;**상태 전이 조건(Transition)**과 &lt;b&gt;액션&lt;/b&gt;을 명확히 설계해야 함&lt;/li&gt;
&lt;li data-end=&quot;2380&quot; data-start=&quot;2345&quot;&gt;&lt;b&gt;공정 흐름 문서와 1:1 매칭&lt;/b&gt; 가능 &amp;rarr; 디버깅에 강함&lt;/li&gt;
&lt;li data-end=&quot;2402&quot; data-start=&quot;2381&quot;&gt;조건 복잡도 증가 시 유지보수 부담&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2407&quot; data-start=&quot;2404&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;2444&quot; data-start=&quot;2409&quot; data-ke-size=&quot;size23&quot;&gt;5️⃣ &lt;b&gt;IL (Instruction List)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2470&quot; data-start=&quot;2445&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;: 어셈블리 형태의 저수준 명령어 기반&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2501&quot; data-start=&quot;2472&quot; data-ke-size=&quot;size16&quot;&gt;  컴팩트하지만 가독성이 낮고 학습 난이도 높음&lt;/p&gt;
&lt;h4 data-end=&quot;2522&quot; data-start=&quot;2503&quot; data-ke-size=&quot;size20&quot;&gt;예제: 버튼 &amp;rarr; 모터 ON&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770824636551&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;LD     I0.0
OUT    Q0.0&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2569&quot; data-start=&quot;2557&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;사용 팁&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2665&quot; data-start=&quot;2570&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2610&quot; data-start=&quot;2570&quot;&gt;&lt;b&gt;CPU 자원 아끼는 초정밀 제어&lt;/b&gt;에 적합 (구형 장비에서 활용)&lt;/li&gt;
&lt;li data-end=&quot;2633&quot; data-start=&quot;2611&quot;&gt;&lt;b&gt;디버깅과 유지보수 난이도 높음&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2665&quot; data-start=&quot;2634&quot;&gt;대부분의 최신 PLC는 더 이상 IL을 사용하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2670&quot; data-start=&quot;2667&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2690&quot; data-start=&quot;2672&quot; data-ke-size=&quot;size26&quot;&gt;  언어 선택 가이드 요약&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 105px;&quot; border=&quot;1&quot; data-end=&quot;2849&quot; data-start=&quot;2692&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;상황&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt; 추천 언어 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;2762&quot; data-start=&quot;2728&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2743&quot; data-start=&quot;2728&quot;&gt;유지보수와 협업이 중요&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2762&quot; data-start=&quot;2743&quot;&gt;&lt;b&gt;LD&lt;/b&gt;, &lt;b&gt;FBD&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;2791&quot; data-start=&quot;2763&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2781&quot; data-start=&quot;2763&quot;&gt;수식/조건/데이터 위주 제어&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2791&quot; data-start=&quot;2781&quot;&gt;&lt;b&gt;ST&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;2814&quot; data-start=&quot;2792&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2803&quot; data-start=&quot;2792&quot;&gt;공정 단계 제어&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2814&quot; data-start=&quot;2803&quot;&gt;&lt;b&gt;SFC&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;2849&quot; data-start=&quot;2815&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2831&quot; data-start=&quot;2815&quot;&gt;구형 시스템 마이그레이션&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2849&quot; data-start=&quot;2831&quot;&gt;&lt;b&gt;IL (임시 사용)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2854&quot; data-start=&quot;2851&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2867&quot; data-start=&quot;2856&quot; data-ke-size=&quot;size26&quot;&gt;  마무리 팁&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3020&quot; data-start=&quot;2869&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2909&quot; data-start=&quot;2869&quot;&gt;&lt;b&gt;실무에서는 LD + ST + FBD 혼합 사용&lt;/b&gt;이 대부분입니다.&lt;/li&gt;
&lt;li data-end=&quot;2972&quot; data-start=&quot;2910&quot;&gt;프로젝트 규모가 클수록 &lt;b&gt;구조화와 블록화&lt;/b&gt;가 중요한데, 이때 &lt;b&gt;ST + FBD&lt;/b&gt; 조합이 효과적입니다.&lt;/li&gt;
&lt;li data-end=&quot;3020&quot; data-start=&quot;2973&quot;&gt;&lt;b&gt;교육 과정에서는 LD &amp;rarr; ST &amp;rarr; FBD/SFC 순서&lt;/b&gt;로 학습을 권장합니다.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HsYutNYkOUM&amp;amp;list=PLRynT3Cy0vZczEbC2Cqa1fxYZkM9ZeMy3&amp;amp;index=16&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=HsYutNYkOUM&amp;amp;list=PLRynT3Cy0vZczEbC2Cqa1fxYZkM9ZeMy3&amp;amp;index=16&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/HsYutNYkOUM&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/l8uBy/dJMb9jgta5o/HiF8U9HMk3yRMnedebyxck/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/cLPDMK/dJMb9ee9VwA/ydtS0oM8QeFYavXPGgnALk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/bqESNZ/dJMb9fZriQh/kakLHme4MZKCcgJAEY9k5K/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;#디지털트윈   #opcua  시스템 개발 - Production automation control system&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/HsYutNYkOUM&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/PLC 프로그래밍 가이드</category>
      <category>Function Block</category>
      <category>IEC 61131-3</category>
      <category>Instruction List</category>
      <category>Ladder Diagram</category>
      <category>PLC 언어 비교</category>
      <category>PLC 프로그래밍</category>
      <category>Sequential Function Chart</category>
      <category>Structured Text</category>
      <category>산업 자동화</category>
      <category>스마트팩토리 로직</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/114</guid>
      <comments>https://developer-archive.tistory.com/114#entry114comment</comments>
      <pubDate>Fri, 13 Feb 2026 10:46:45 +0900</pubDate>
    </item>
    <item>
      <title>OPC UA &amp;amp; C# 통신 예제 &amp;ndash; IOT(아두이노) 연동편</title>
      <link>https://developer-archive.tistory.com/113</link>
      <description>&lt;p data-end=&quot;228&quot; data-start=&quot;183&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;산업 프로토콜을 아두이노에 연결해보자! &amp;ndash; IoT와 OPC UA의 연결고리 만들기&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;371&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;아두이노는 가볍고 빠르게 센서 데이터를 처리할 수 있어, &lt;b&gt;소형 자동화, IoT 실험, 데이터 수집용 게이트웨이&lt;/b&gt;로 자주 활용됩니다.&lt;br /&gt;하지만 산업용 시스템(OPC UA 기반 PLC, SCADA 등)과 직접 연동하려면 다소 복잡한 설정이 필요하죠.&lt;/p&gt;
&lt;p data-end=&quot;449&quot; data-start=&quot;373&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 아두이노를 OPC UA 시스템과 연동하는 2가지 접근 방식을 소개하고, 실제 구현에 필요한 설정과 노하우까지 정리해드립니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;537&quot; data-start=&quot;488&quot;&gt;&lt;b&gt;MCU 보드&lt;/b&gt;: Arduino Uno / Mega / ESP32 (ESP 추천)&lt;/li&gt;
&lt;li data-end=&quot;637&quot; data-start=&quot;538&quot;&gt;&lt;b&gt;연동 방식&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;637&quot; data-start=&quot;555&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;588&quot; data-start=&quot;555&quot;&gt;아두이노 &amp;rarr; 중계 서버 &amp;rarr; OPC UA Server&lt;/li&gt;
&lt;li data-end=&quot;637&quot; data-start=&quot;591&quot;&gt;아두이노 직접 OPC UA Client (ESP32+라이브러리 활용 시 가능)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li data-end=&quot;677&quot; data-start=&quot;638&quot;&gt;&lt;b&gt;통신 프로토콜&lt;/b&gt;: OPC UA (opc.tcp://...)&lt;/li&gt;
&lt;li data-end=&quot;763&quot; data-start=&quot;678&quot;&gt;&lt;b&gt;사용 환경&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;763&quot; data-start=&quot;695&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;715&quot; data-start=&quot;695&quot;&gt;아두이노 IDE + 센서 코드&lt;/li&gt;
&lt;li data-end=&quot;763&quot; data-start=&quot;718&quot;&gt;중계용 Python/Node.js 서버 또는 ESP32 자체 OPC UA 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;763&quot; data-start=&quot;488&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot; data-end=&quot;763&quot; data-start=&quot;678&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;768&quot; data-start=&quot;765&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;788&quot; data-start=&quot;770&quot; data-ke-size=&quot;size26&quot;&gt;  구조별 연동 방식 비교&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1012&quot; data-start=&quot;790&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;방식&lt;/td&gt;
&lt;td&gt;구성&lt;/td&gt;
&lt;td&gt;장점&lt;/td&gt;
&lt;td&gt;단점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;932&quot; data-start=&quot;842&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;857&quot; data-start=&quot;842&quot;&gt;&lt;b&gt;중계 서버 방식&lt;/b&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;903&quot; data-start=&quot;857&quot;&gt;아두이노 &amp;rarr; 시리얼 or MQTT &amp;rarr; 중계 서버(Python) &amp;rarr; OPC UA&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;918&quot; data-start=&quot;903&quot;&gt;구조 단순, 구현 쉬움&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;932&quot; data-start=&quot;918&quot;&gt;실시간성 다소 낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1012&quot; data-start=&quot;933&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;956&quot; data-start=&quot;933&quot;&gt;&lt;b&gt;직접 OPC UA Client&lt;/b&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;979&quot; data-start=&quot;956&quot;&gt;ESP32에서 OPC UA 요청 전송&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;995&quot; data-start=&quot;979&quot;&gt;실시간성 좋고 구조 간단&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1012&quot; data-start=&quot;995&quot;&gt;구현 복잡, 메모리 제약&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1017&quot; data-start=&quot;1014&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1042&quot; data-start=&quot;1019&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ 중계 서버 방식 (추천 접근)&lt;/h2&gt;
&lt;h3 data-end=&quot;1056&quot; data-start=&quot;1044&quot; data-ke-size=&quot;size23&quot;&gt;  구성도&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxzdg/dJMcaiPJfT6/7fyNxDt3vmH9kKGRIkTQJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxzdg/dJMcaiPJfT6/7fyNxDt3vmH9kKGRIkTQJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxzdg/dJMcaiPJfT6/7fyNxDt3vmH9kKGRIkTQJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkxzdg%2FdJMcaiPJfT6%2F7fyNxDt3vmH9kKGRIkTQJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;850&quot; height=&quot;784&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;1162&quot; data-start=&quot;1135&quot; data-ke-size=&quot;size23&quot;&gt;  아두이노 코드 예제 (센서 값 전송)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eesfiF/dJMcahi37nI/EML6ERv4XfkVZSaructiqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eesfiF/dJMcahi37nI/EML6ERv4XfkVZSaructiqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eesfiF/dJMcahi37nI/EML6ERv4XfkVZSaructiqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeesfiF%2FdJMcahi37nI%2FEML6ERv4XfkVZSaructiqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;1101&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770824259780&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 예: 온도 센서 데이터 Serial로 전송
void loop() {
  int temp = analogRead(A0);
  Serial.println(temp);
  delay(1000);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;1326&quot; data-start=&quot;1287&quot; data-ke-size=&quot;size23&quot;&gt;  Python 중계 서버 예제 (opcua 라이브러리 사용)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770824273325&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from opcua import Server
import serial

# OPC UA 서버 생성
server = Server()
server.set_endpoint(&quot;opc.tcp://0.0.0.0:4840/&quot;)
node = server.register_namespace(&quot;ArduinoData&quot;)
objects = server.get_objects_node()
sensor_obj = objects.add_object(node, &quot;TemperatureSensor&quot;)
temp_val = sensor_obj.add_variable(node, &quot;Temperature&quot;, 0.0)
temp_val.set_writable()

# 시리얼 연결
arduino = serial.Serial('COM3', 9600)

server.start()
try:
    while True:
        data = arduino.readline().decode().strip()
        temp_val.set_value(float(data))
except KeyboardInterrupt:
    server.stop()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;1996&quot; data-start=&quot;1911&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1996&quot; data-start=&quot;1913&quot; data-ke-size=&quot;size16&quot;&gt;  이 방식은 &lt;b&gt;실시간 센서 데이터를 OPC UA 서버로 전달&lt;/b&gt;할 수 있어, SCADA, Node-RED, UA Client와 연동 용이합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;2001&quot; data-start=&quot;1998&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2033&quot; data-start=&quot;2003&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ ESP32 직접 OPC UA 연동 (고급)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2195&quot; data-start=&quot;2035&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2075&quot; data-start=&quot;2035&quot;&gt;ESP32는 WiFi 지원 + 메모리 여유 &amp;rarr; OPC UA 통신 가능&lt;/li&gt;
&lt;li data-end=&quot;2195&quot; data-start=&quot;2076&quot;&gt;&lt;b&gt;OPC UA 클라이언트 구현 라이브러리 필요&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2195&quot; data-start=&quot;2109&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2145&quot; data-start=&quot;2109&quot;&gt;freemodbus + libuaclient (C++)&lt;/li&gt;
&lt;li data-end=&quot;2195&quot; data-start=&quot;2148&quot;&gt;또는 ESP32 + Arduino core + OPC UA 구현체 (매우 제한적)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-end=&quot;2266&quot; data-start=&quot;2197&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;2266&quot; data-start=&quot;2199&quot; data-ke-size=&quot;size16&quot;&gt;❗️ 하지만 &lt;b&gt;OPC UA는 메모리/성능 요구가 높아&lt;/b&gt;, 직접 구현보다는 &lt;b&gt;중계 게이트웨이 구조&lt;/b&gt;가 현실적입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;2271&quot; data-start=&quot;2268&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2290&quot; data-start=&quot;2273&quot; data-ke-size=&quot;size26&quot;&gt; ️ 실무 노하우 &amp;amp; 팁&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2620&quot; data-start=&quot;2292&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;팁&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2373&quot; data-start=&quot;2318&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2337&quot; data-start=&quot;2318&quot;&gt;아두이노 &amp;harr; Python 통신&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2373&quot; data-start=&quot;2337&quot;&gt;시리얼 통신은 안정성 높지만, MQTT로 확장도 고려 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2429&quot; data-start=&quot;2374&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2388&quot; data-start=&quot;2374&quot;&gt;Node-RED 연동&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2429&quot; data-start=&quot;2388&quot;&gt;Python 대신 Node-RED + OPC UA 노드로 중계 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2499&quot; data-start=&quot;2430&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2445&quot; data-start=&quot;2430&quot;&gt;OPC UA 서버 주소&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2499&quot; data-start=&quot;2445&quot;&gt;opc.tcp://localhost:4840/ &amp;rarr; 실제 PLC 연동 시 외부 IP 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2554&quot; data-start=&quot;2500&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2509&quot; data-start=&quot;2500&quot;&gt;인증서 이슈&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2554&quot; data-start=&quot;2509&quot;&gt;테스트 시 SecurityPolicy.None 사용, 운영 시 인증서 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2620&quot; data-start=&quot;2555&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2566&quot; data-start=&quot;2555&quot;&gt;SCADA 연동&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2620&quot; data-start=&quot;2566&quot;&gt;UA 클라이언트로 UAExpert, Ignition, WinCC 등에서 실시간 시각화 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2625&quot; data-start=&quot;2622&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ZjXZC7fSxlg&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=ZjXZC7fSxlg&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/ZjXZC7fSxlg&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/iov93/dJMb8YpRpiB/YSAKaDFPrkv4yYqnPmCGrk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/dGYfIE/dJMb8WMlyD6/HzLv7NfU8Jjj8IDajl99vk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/b9EVtd/dJMb8QL7Ykl/yKhCcwfiL3XBTGvKISTPi1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;산업용 IoT 첫걸음! 아두이노와 OPC UA 실시간 제어 구현&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ZjXZC7fSxlg&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/OPC UA 표준 통신</category>
      <category>Arduino OPC UA</category>
      <category>Arduino PLC 통신</category>
      <category>ESP32 OPC UA</category>
      <category>Node-RED</category>
      <category>OPC UA Client</category>
      <category>OPC UA Python Gateway</category>
      <category>디지털 트윈</category>
      <category>산업 자동화 IoT</category>
      <category>아두이노 센서 OPC 연동</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/113</guid>
      <comments>https://developer-archive.tistory.com/113#entry113comment</comments>
      <pubDate>Thu, 12 Feb 2026 13:10:21 +0900</pubDate>
    </item>
    <item>
      <title>OPC UA &amp;amp; C# 통신 예제 &amp;ndash; Siemens S7-1200/1500 PLC 연동편</title>
      <link>https://developer-archive.tistory.com/112</link>
      <description>&lt;p data-end=&quot;269&quot; data-start=&quot;223&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;TIA Portal에서 설정하고, Visual Studio로 실시간 제어까지&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;404&quot; data-start=&quot;271&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Siemens PLC&lt;/b&gt;는 글로벌 산업 자동화 표준이라 할 만큼 다양한 스마트팩토리 현장에서 활용되고 있습니다. 특히 &lt;b&gt;S7-1200/1500 시리즈&lt;/b&gt;는 &lt;b&gt;OPC UA 서버 내장&lt;/b&gt;으로, 외부 IT 시스템과의 연결성이 뛰어납니다.&lt;/p&gt;
&lt;p data-end=&quot;555&quot; data-start=&quot;406&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 &lt;b&gt;C# OPC UA 클라이언트 앱을 직접 구현&lt;/b&gt;하여, &lt;b&gt;S7 PLC에서 실시간 데이터를 읽고 이벤트 처리&lt;/b&gt;까지 해보겠습니다.&lt;br /&gt;&lt;b&gt;TIA Portal &amp;rarr; 인증서 설정 &amp;rarr; C# 코드 구현&lt;/b&gt;까지 단계별로 구성되어 있어 실무에 바로 적용 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdVBlh/dJMcag5vXd1/ImOlHIROHdPd5Di6efgKrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdVBlh/dJMcag5vXd1/ImOlHIROHdPd5Di6efgKrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdVBlh/dJMcag5vXd1/ImOlHIROHdPd5Di6efgKrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdVBlh%2FdJMcag5vXd1%2FImOlHIROHdPd5Di6efgKrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;1032&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;682&quot; data-start=&quot;633&quot;&gt;&lt;b&gt;통신 프로토콜&lt;/b&gt;: OPC UA (opc.tcp://&amp;lt;PLC IP&amp;gt;:4840)&lt;/li&gt;
&lt;li data-end=&quot;710&quot; data-start=&quot;683&quot;&gt;&lt;b&gt;개발 언어&lt;/b&gt;: C# (.NET 6 이상)&lt;/li&gt;
&lt;li data-end=&quot;743&quot; data-start=&quot;711&quot;&gt;&lt;b&gt;개발 환경&lt;/b&gt;: Visual Studio 2022+&lt;/li&gt;
&lt;li data-end=&quot;794&quot; data-start=&quot;744&quot;&gt;&lt;b&gt;사용 라이브러리&lt;/b&gt;: OPCFoundation.NetStandard.Opc.Ua&lt;/li&gt;
&lt;li data-end=&quot;915&quot; data-start=&quot;795&quot;&gt;&lt;b&gt;주요 기능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;915&quot; data-start=&quot;810&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;833&quot; data-start=&quot;810&quot;&gt;TIA Portal에서 태그 공유 설정&lt;/li&gt;
&lt;li data-end=&quot;863&quot; data-start=&quot;836&quot;&gt;C#으로 OPC UA 연결 및 데이터 Read&lt;/li&gt;
&lt;li data-end=&quot;893&quot; data-start=&quot;866&quot;&gt;Subscription 기반 변경 이벤트 수신&lt;/li&gt;
&lt;li data-end=&quot;915&quot; data-start=&quot;896&quot;&gt;보안 정책/인증서 구성 실전 팁&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c75l45/dJMcahJ7X83/YVfEUfpiimWGDVkXw17AFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c75l45/dJMcahJ7X83/YVfEUfpiimWGDVkXw17AFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c75l45/dJMcahJ7X83/YVfEUfpiimWGDVkXw17AFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc75l45%2FdJMcahJ7X83%2FYVfEUfpiimWGDVkXw17AFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;491&quot; height=&quot;337&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-end=&quot;920&quot; data-start=&quot;917&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;965&quot; data-start=&quot;922&quot; data-ke-size=&quot;size26&quot;&gt;  Siemens OPC UA 서버 활성화 절차 (TIA Portal)&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1175&quot; data-start=&quot;967&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1022&quot; data-start=&quot;967&quot;&gt;&lt;b&gt;S7-1200/1500 모델 선택&lt;/b&gt; (1500은 고급 보안, 1200은 기본 기능 제공)&lt;/li&gt;
&lt;li data-end=&quot;1061&quot; data-start=&quot;1023&quot;&gt;Device Configuration &amp;rarr; OPC UA 탭&lt;/li&gt;
&lt;li data-end=&quot;1086&quot; data-start=&quot;1062&quot;&gt;&lt;b&gt;OPC UA Server 활성화&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1146&quot; data-start=&quot;1087&quot;&gt;Global DB 생성 &amp;rarr; 공개할 변수에 Accessible from HMI/OPC UA 체크&lt;/li&gt;
&lt;li data-end=&quot;1175&quot; data-start=&quot;1147&quot;&gt;보안 인증서 생성 및 외부 Client와 교환&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zNHO4/dJMcaaEenbW/ssKoP9DGrlSgx33NQGAyk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zNHO4/dJMcaaEenbW/ssKoP9DGrlSgx33NQGAyk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zNHO4/dJMcaaEenbW/ssKoP9DGrlSgx33NQGAyk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzNHO4%2FdJMcaaEenbW%2FssKoP9DGrlSgx33NQGAyk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;983&quot; height=&quot;452&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-end=&quot;1180&quot; data-start=&quot;1177&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1206&quot; data-start=&quot;1182&quot; data-ke-size=&quot;size26&quot;&gt;  C# OPC UA 연결 코드 예제&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770823779724&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string endpointUrl = &quot;opc.tcp://192.168.130.72:4840&quot;; // PLC IP 주소
string nodeId = &quot;ns=3;s=\&quot;DB1\&quot;.\&quot;Speed\&quot;&quot;; // TIA Portal에서 설정한 DB 변수

var session = await Session.Create(config, endpoint, false, &quot;SiemensClient&quot;, 60000, null, null);
var value = session.ReadValue(nodeId);
Console.WriteLine($&quot;Speed 값: {value.Value}&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;1642&quot; data-start=&quot;1541&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1642&quot; data-start=&quot;1543&quot; data-ke-size=&quot;size16&quot;&gt;Siemens의 노드ID는 &quot;DB명&quot;.&quot;태그명&quot; 형식으로 표현됨. ns=3은 서버 구성에 따라 달라질 수 있으니 UA 클라이언트 툴(ex. UAExpert)로 확인 필요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;1647&quot; data-start=&quot;1644&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1674&quot; data-start=&quot;1649&quot; data-ke-size=&quot;size26&quot;&gt;  Subscription 이벤트 처리&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770823802696&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var monitoredItem = new MonitoredItem(subscription.DefaultItem)
{
    StartNodeId = &quot;ns=3;s=\&quot;DB1\&quot;.\&quot;Speed\&quot;&quot;,
    DisplayName = &quot;Speed&quot;,
    SamplingInterval = 500
};

monitoredItem.Notification += (item, args) =&amp;gt;
{
    foreach (var v in item.DequeueValues())
    {
        Console.WriteLine($&quot;Speed 변경됨: {v.Value}&quot;);
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2023&quot; data-start=&quot;2020&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2038&quot; data-start=&quot;2025&quot; data-ke-size=&quot;size26&quot;&gt; ️ 실무 노하우&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;항목설명
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2353&quot; data-start=&quot;2040&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;2353&quot; data-start=&quot;2068&quot;&gt;
&lt;tr data-end=&quot;2139&quot; data-start=&quot;2068&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2087&quot; data-start=&quot;2068&quot;&gt;TIA Portal 설정 필수&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2139&quot; data-start=&quot;2087&quot;&gt;Accessible from HMI/OPC UA 옵션 체크 안 하면 외부 접근 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2204&quot; data-start=&quot;2140&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2149&quot; data-start=&quot;2140&quot;&gt;인증서 관리&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2204&quot; data-start=&quot;2149&quot;&gt;Siemens는 기본적으로 인증서 기반 접근만 허용 &amp;rarr; C# 클라이언트 인증서 생성 후 교환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2265&quot; data-start=&quot;2205&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2217&quot; data-start=&quot;2205&quot;&gt;NodeId 확인&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2265&quot; data-start=&quot;2217&quot;&gt;UAExpert 또는 TIA Portal에서 OPC UA 구조 Export 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2298&quot; data-start=&quot;2266&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2274&quot; data-start=&quot;2266&quot;&gt;포트 개방&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2298&quot; data-start=&quot;2274&quot;&gt;기본 포트 4840 방화벽 허용 필수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2353&quot; data-start=&quot;2299&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2314&quot; data-start=&quot;2299&quot;&gt;S7-1200 제한사항&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2353&quot; data-start=&quot;2314&quot;&gt;S7-1500 대비 OPC UA 채널 수, 보안 기능 제한 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wPMMyGQfk4Y&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=wPMMyGQfk4Y&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=wPMMyGQfk4Y&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/xSaiN/dJMb8YXHsx1/kZuwePZ0rNSv4hF5sRTrl1/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360,https://scrap.kakaocdn.net/dn/Gelpq/dJMb8U8PCDd/DjWDMKxe971usipX25wgd1/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360,https://scrap.kakaocdn.net/dn/b5RRcM/dJMb8UHK91w/Cbf59LhFYcNpCactHyogik/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360&quot; data-video-width=&quot;480&quot; data-video-height=&quot;360&quot; data-video-origin-width=&quot;480&quot; data-video-origin-height=&quot;360&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;#automation #smartfactory 시스템 개발 -  Cctv surveillance system / manufacturing execution system&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/wPMMyGQfk4Y&quot; width=&quot;480&quot; height=&quot;360&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/OPC UA 표준 통신</category>
      <category>C# OPC UA 클라이언트</category>
      <category>OPC UA</category>
      <category>PLC 통신</category>
      <category>s7-1200</category>
      <category>s7-1500</category>
      <category>siemens plc</category>
      <category>TIA PORTAL</category>
      <category>디지털 트윈</category>
      <category>산업 자동화</category>
      <category>스마트팩토리</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/112</guid>
      <comments>https://developer-archive.tistory.com/112#entry112comment</comments>
      <pubDate>Thu, 12 Feb 2026 12:32:17 +0900</pubDate>
    </item>
    <item>
      <title>OPC UA &amp;amp; C# 통신 예제 - OMRON NX/NJ PLC 연동편</title>
      <link>https://developer-archive.tistory.com/111</link>
      <description>&lt;p data-end=&quot;193&quot; data-start=&quot;146&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;디지털 트윈을 향한 첫 걸음, 오므론 PLC와 OPC UA 연결법 완전 정복!&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;388&quot; data-start=&quot;195&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스마트 팩토리 시대&lt;/b&gt;, 설비 간 연결은 선택이 아닌 필수입니다.&lt;br /&gt;OMRON NX/NJ 시리즈는 &lt;b&gt;OPC UA 서버 기능이 내장된 고성능 PLC&lt;/b&gt;로, &lt;b&gt;제어 + 정보화&lt;/b&gt;를 동시에 처리하는 것이 특징입니다. 특히 C# 기반 OPC UA 클라이언트를 이용하면 MES, SCADA, ERP 등 IT 시스템과 &lt;b&gt;직접 통신&lt;/b&gt;이 가능하죠.&lt;/p&gt;
&lt;p data-end=&quot;476&quot; data-start=&quot;390&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 &lt;b&gt;Visual Studio + C# 환경에서 OMRON PLC 데이터를 실시간으로 읽고, 이벤트를 처리하는 구조까지&lt;/b&gt; 단계별로 안내합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1985&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccM2hb/dJMcabwlesY/tUAViV4nkXHBGfJkpZ5V30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccM2hb/dJMcabwlesY/tUAViV4nkXHBGfJkpZ5V30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccM2hb/dJMcabwlesY/tUAViV4nkXHBGfJkpZ5V30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccM2hb%2FdJMcabwlesY%2FtUAViV4nkXHBGfJkpZ5V30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1985&quot; height=&quot;960&quot; data-origin-width=&quot;1985&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;606&quot; data-start=&quot;559&quot;&gt;&lt;b&gt;통신 프로토콜&lt;/b&gt;: OPC UA (opc.tcp:// 포트 4840 기본)&lt;/li&gt;
&lt;li data-end=&quot;634&quot; data-start=&quot;607&quot;&gt;&lt;b&gt;개발 언어&lt;/b&gt;: C# (.NET 6 이상)&lt;/li&gt;
&lt;li data-end=&quot;669&quot; data-start=&quot;635&quot;&gt;&lt;b&gt;개발 환경&lt;/b&gt;: Visual Studio 2022 이상&lt;/li&gt;
&lt;li data-end=&quot;720&quot; data-start=&quot;670&quot;&gt;&lt;b&gt;사용 라이브러리&lt;/b&gt;: OPCFoundation.NetStandard.Opc.Ua&lt;/li&gt;
&lt;li data-end=&quot;847&quot; data-start=&quot;721&quot;&gt;&lt;b&gt;주요 기능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;847&quot; data-start=&quot;736&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;772&quot; data-start=&quot;736&quot;&gt;OMRON Sysmac Studio에서 생성한 태그 노드 연결&lt;/li&gt;
&lt;li data-end=&quot;816&quot; data-start=&quot;775&quot;&gt;PLC 변수(노드) 읽기 및 Subscription 기반 값 변경 감지&lt;/li&gt;
&lt;li data-end=&quot;847&quot; data-start=&quot;819&quot;&gt;인증서 신뢰 구성 및 이벤트 처리 실무 팁 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-start=&quot;1080&quot; data-end=&quot;1083&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;881&quot; data-start=&quot;854&quot; data-ke-size=&quot;size26&quot;&gt;1 OMRON OPC UA 통신 사전 준비&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccAMDT/dJMcahpOgxj/hiHXZtpOwaW3zkaKpyCKfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccAMDT/dJMcahpOgxj/hiHXZtpOwaW3zkaKpyCKfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccAMDT/dJMcahpOgxj/hiHXZtpOwaW3zkaKpyCKfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccAMDT%2FdJMcahpOgxj%2FhiHXZtpOwaW3zkaKpyCKfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;504&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;904&quot; data-start=&quot;883&quot; data-ke-size=&quot;size23&quot;&gt;Sysmac Studio 설정:&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1078&quot; data-start=&quot;905&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;923&quot; data-start=&quot;905&quot;&gt;OPC UA 서버 기능 활성화&lt;/li&gt;
&lt;li data-end=&quot;948&quot; data-start=&quot;924&quot;&gt;Anonymous or 사용자 인증 허용&lt;/li&gt;
&lt;li data-end=&quot;990&quot; data-start=&quot;949&quot;&gt;보안 정책: None, Basic256Sha256 등 설정 가능&lt;/li&gt;
&lt;li data-end=&quot;1027&quot; data-start=&quot;991&quot;&gt;변수 공개 설정 (Publish to OPC UA: TRUE)&lt;/li&gt;
&lt;li data-end=&quot;1078&quot; data-start=&quot;1028&quot;&gt;노드 ID 확인 경로: Controller Variables &amp;gt; Export XML&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-end=&quot;1083&quot; data-start=&quot;1080&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1115&quot; data-start=&quot;1085&quot; data-ke-size=&quot;size26&quot;&gt;  C# OPC UA 클라이언트 개발 주요 흐름&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1246&quot; data-start=&quot;1117&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1143&quot; data-start=&quot;1117&quot;&gt;OPC UA 라이브러리 설치 (NuGet)&lt;/li&gt;
&lt;li data-end=&quot;1190&quot; data-start=&quot;1144&quot;&gt;서버 엔드포인트 설정 (opc.tcp://192.168.0.50:4840)&lt;/li&gt;
&lt;li data-end=&quot;1217&quot; data-start=&quot;1191&quot;&gt;태그 NodeId 확인 후 데이터 Read&lt;/li&gt;
&lt;li data-end=&quot;1246&quot; data-start=&quot;1218&quot;&gt;Subscription 구성 &amp;rarr; 값 변경 감지&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daf09h/dJMcahi3673/uEiQQGmA8BWOC7pkugHwpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daf09h/dJMcahi3673/uEiQQGmA8BWOC7pkugHwpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daf09h/dJMcahi3673/uEiQQGmA8BWOC7pkugHwpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdaf09h%2FdJMcahi3673%2FuEiQQGmA8BWOC7pkugHwpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1044&quot; height=&quot;586&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-end=&quot;1251&quot; data-start=&quot;1248&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1267&quot; data-start=&quot;1253&quot; data-ke-size=&quot;size26&quot;&gt;  예시 노드 구조&lt;/h2&gt;
&lt;p data-end=&quot;1303&quot; data-start=&quot;1269&quot; data-ke-size=&quot;size16&quot;&gt;OMRON은 아래와 같은 심볼 기반 NodeId를 제공합니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770823321059&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 예: Global 변수인 &quot;MotorSpeed&quot;
var nodeId = &quot;ns=2;s=MotorSpeed&quot;; // 또는 XML export로 확인&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1408&quot; data-start=&quot;1405&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1438&quot; data-start=&quot;1410&quot; data-ke-size=&quot;size26&quot;&gt;  Subscription 이벤트 처리 예제&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770823327930&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var monitoredItem = new MonitoredItem(subscription.DefaultItem)
{
    DisplayName = &quot;MotorSpeed&quot;,
    StartNodeId = &quot;ns=2;s=MotorSpeed&quot;
};

monitoredItem.Notification += (item, args) =&amp;gt;
{
    foreach (var v in item.DequeueValues())
    {
        Console.WriteLine($&quot;모터 속도 변경됨: {v.Value}&quot;);
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1757&quot; data-start=&quot;1754&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1772&quot; data-start=&quot;1759&quot; data-ke-size=&quot;size26&quot;&gt; ️ 실무 노하우&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 146px;&quot; border=&quot;1&quot; data-end=&quot;2056&quot; data-start=&quot;1774&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1856&quot; data-start=&quot;1802&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1827&quot; data-start=&quot;1802&quot;&gt;Sysmac Studio 변수 노출 설정&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1856&quot; data-start=&quot;1827&quot;&gt;사용 변수는 반드시 &quot;Public&quot; 설정 필수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1901&quot; data-start=&quot;1857&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1870&quot; data-start=&quot;1857&quot;&gt;보안 정책과 인증서&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1901&quot; data-start=&quot;1870&quot;&gt;OMRON은 기본적으로 인증서 기반 접근을 권장함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1956&quot; data-start=&quot;1902&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1913&quot; data-start=&quot;1902&quot;&gt;노드 구조 확인&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1956&quot; data-start=&quot;1913&quot;&gt;XML Export 또는 OPC UA Client Explorer 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;2003&quot; data-start=&quot;1957&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1967&quot; data-start=&quot;1957&quot;&gt;연결 문제 시&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2003&quot; data-start=&quot;1967&quot;&gt;Firewall, 보안 정책, 인증서 신뢰 여부 점검 필수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;2056&quot; data-start=&quot;2004&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2012&quot; data-start=&quot;2004&quot;&gt;사용 사례&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2056&quot; data-start=&quot;2012&quot;&gt;제조 데이터 시각화, MES 연동, AI 기반 품질 예측 등과 연계 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jU-_lTpG9yc&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=jU-_lTpG9yc&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=jU-_lTpG9yc&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/636Nx/dJMb87f2n11/h7fmg9daKLPWbGKyluZRF0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/sG6Yt/dJMb81GTa9t/jfsW6RcEkw467sKlYdjpCk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/dvxHHe/dJMb89x9xhD/hU2UFfa5V6Nc9pYcd5ccu1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;공장 자동화에서의 디지털트윈 #omronplc 데이터 연결 및 읽고 쓰기_OPCUA 확인&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/jU-_lTpG9yc&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/OPC UA 표준 통신</category>
      <category>C# OPC UA</category>
      <category>NJ501</category>
      <category>NX701</category>
      <category>omron plc</category>
      <category>OPC UA 통신</category>
      <category>PLC 통신 예제</category>
      <category>sysmac studio</category>
      <category>디지털 트윈</category>
      <category>산업 자동화</category>
      <category>스마트 팩토리</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/111</guid>
      <comments>https://developer-archive.tistory.com/111#entry111comment</comments>
      <pubDate>Thu, 12 Feb 2026 11:22:50 +0900</pubDate>
    </item>
    <item>
      <title>OPC UA &amp;amp; C# 통신 예제 &amp;ndash; 미쯔비시 MELSEC PLC 연동편</title>
      <link>https://developer-archive.tistory.com/110</link>
      <description>&lt;p data-end=&quot;1023&quot; data-start=&quot;978&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GX Works3로 설정하고, Visual Studio로 바로 연동하세요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1169&quot; data-start=&quot;1025&quot; data-ke-size=&quot;size16&quot;&gt;Mitsubishi MELSEC PLC는 일본 자동화 업계의 대표 주자입니다.&lt;br /&gt;기존엔 전용 프로토콜(MC, SLMP 등)만 지원했지만, 최신 iQ-R/iQ-F 시리즈는 &lt;b&gt;OPC UA 서버 기능을 내장&lt;/b&gt;하면서 &lt;b&gt;IT와 OT 통합의 중심&lt;/b&gt;에 섰습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JsOKW/dJMcaibb3Ia/twrjqN6x3QkN75BCpTLsg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JsOKW/dJMcaibb3Ia/twrjqN6x3QkN75BCpTLsg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JsOKW/dJMcaibb3Ia/twrjqN6x3QkN75BCpTLsg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJsOKW%2FdJMcaibb3Ia%2FtwrjqN6x3QkN75BCpTLsg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;880&quot; height=&quot;496&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1315&quot; data-start=&quot;1171&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 &lt;b&gt;C# 기반 OPC UA 클라이언트를 활용해 MELSEC PLC와 통신&lt;/b&gt;하는 방법을 소개합니다.&lt;br /&gt;GX Works3에서 OPC UA 설정을 마치고 나면, Visual Studio에서 노드값을 읽고 변경 이벤트를 실시간으로 받을 수 있습니다&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1454&quot; data-start=&quot;1407&quot;&gt;&lt;b&gt;통신 프로토콜&lt;/b&gt;: OPC UA (opc.tcp:// 포트 49320 등)&lt;/li&gt;
&lt;li data-end=&quot;1482&quot; data-start=&quot;1455&quot;&gt;&lt;b&gt;개발 언어&lt;/b&gt;: C# (.NET 6 이상)&lt;/li&gt;
&lt;li data-end=&quot;1517&quot; data-start=&quot;1483&quot;&gt;&lt;b&gt;개발 환경&lt;/b&gt;: Visual Studio 2022 이상&lt;/li&gt;
&lt;li data-end=&quot;1568&quot; data-start=&quot;1518&quot;&gt;&lt;b&gt;사용 라이브러리&lt;/b&gt;: OPCFoundation.NetStandard.Opc.Ua&lt;/li&gt;
&lt;li data-end=&quot;1669&quot; data-start=&quot;1569&quot;&gt;&lt;b&gt;주요 기능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1669&quot; data-start=&quot;1584&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1615&quot; data-start=&quot;1584&quot;&gt;GX Works3에서 설정한 태그(NodeId) 연동&lt;/li&gt;
&lt;li data-end=&quot;1644&quot; data-start=&quot;1618&quot;&gt;실시간 변경 감지 (Subscription)&lt;/li&gt;
&lt;li data-end=&quot;1669&quot; data-start=&quot;1647&quot;&gt;인증서 기반 보안 통신 구성 팁 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;451&quot; data-start=&quot;421&quot; data-ke-size=&quot;size26&quot;&gt;1. 미쯔비시 MELSEC OPC UA 기본 설정&lt;/h2&gt;
&lt;h3 data-end=&quot;466&quot; data-start=&quot;453&quot; data-ke-size=&quot;size23&quot;&gt;지원 모델 예시:&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;609&quot; data-start=&quot;467&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;506&quot; data-start=&quot;467&quot;&gt;&lt;b&gt;iQ-R Series&lt;/b&gt;: R04CPU-P, R08ENCPU 등&lt;/li&gt;
&lt;li data-end=&quot;548&quot; data-start=&quot;507&quot;&gt;&lt;b&gt;iQ-F Series&lt;/b&gt;: FX5U (OPC UA 옵션 모듈 필요)&lt;/li&gt;
&lt;li data-end=&quot;609&quot; data-start=&quot;549&quot;&gt;&lt;b&gt;Q 시리즈&lt;/b&gt;: Q03UDVCPU + QJ71E71 TCP/IP 모듈 + OPC UA 게이트웨이 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;646&quot; data-start=&quot;611&quot; data-ke-size=&quot;size23&quot;&gt;기본 설정 방법 (GOT or GX Works3 사용):&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;793&quot; data-start=&quot;647&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;662&quot; data-start=&quot;647&quot;&gt;OPC UA 기능 활성화&lt;/li&gt;
&lt;li data-end=&quot;706&quot; data-start=&quot;663&quot;&gt;통신 포트 설정 (opc.tcp://192.168.0.10:49320)&lt;/li&gt;
&lt;li data-end=&quot;731&quot; data-start=&quot;707&quot;&gt;사용자 인증 or Anonymous 설정&lt;/li&gt;
&lt;li data-end=&quot;761&quot; data-start=&quot;732&quot;&gt;보안 정책 선택 (None, Basic256 등)&lt;/li&gt;
&lt;li data-end=&quot;793&quot; data-start=&quot;762&quot;&gt;Server 인증서 등록 (클라이언트에서 신뢰 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;798&quot; data-start=&quot;795&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;826&quot; data-start=&quot;800&quot; data-ke-size=&quot;size26&quot;&gt;2. C# OPC UA 통신 &amp;ndash; 기본 예제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d982L2/dJMcacoulVg/1BmQ9ntH19eEgyQBnevip0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d982L2/dJMcacoulVg/1BmQ9ntH19eEgyQBnevip0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d982L2/dJMcacoulVg/1BmQ9ntH19eEgyQBnevip0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd982L2%2FdJMcacoulVg%2F1BmQ9ntH19eEgyQBnevip0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1054&quot; height=&quot;574&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;927&quot; data-start=&quot;828&quot; data-ke-size=&quot;size16&quot;&gt;Mitsubishi PLC도 LS산전과 동일하게 &lt;b&gt;OPC Foundation 라이브러리 사용&lt;/b&gt; 가능. 핵심 코드는 비슷하지만, &lt;b&gt;노드 네이밍 규칙&lt;/b&gt;이 제조사마다 다릅니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1770822761752&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var endpointURL = &quot;opc.tcp://192.168.3.101:49320&quot;; // Mitsubishi PLC OPC UA 주소
var nodeId = &quot;ns=4;s=Channel1.Device1.D100&quot;; // D100 주소에 연결된 태그&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1139&quot; data-start=&quot;1086&quot; data-ke-size=&quot;size16&quot;&gt;노드 ID 규칙은 OPC UA Gateway 또는 Mitsubishi의 설정 툴에서 확인 가능.&lt;/p&gt;
&lt;hr data-end=&quot;1144&quot; data-start=&quot;1141&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1164&quot; data-start=&quot;1146&quot; data-ke-size=&quot;size26&quot;&gt;3. 예제 코드 &amp;ndash; 값 읽기&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770822775180&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var session = await Session.Create(config, endpoint, false, &quot;MELSEC Client&quot;, 60000, null, null);
Console.WriteLine(&quot;미쯔비시 OPC UA 연결 성공.&quot;);

string nodeId = &quot;ns=4;s=Channel1.Device1.D100&quot;; // D100 메모리 주소
DataValue value = session.ReadValue(nodeId);
Console.WriteLine($&quot;D100 현재값: {value.Value}&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1478&quot; data-start=&quot;1475&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1513&quot; data-start=&quot;1480&quot; data-ke-size=&quot;size26&quot;&gt;4. 예제 코드 &amp;ndash; Subscription 이벤트 처리&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770822786354&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var subscription = new Subscription(session.DefaultSubscription)
{
    PublishingInterval = 1000
};

var monitoredItem = new MonitoredItem(subscription.DefaultItem)
{
    StartNodeId = &quot;ns=4;s=Channel1.Device1.D100&quot;,
    DisplayName = &quot;D100&quot;,
    SamplingInterval = 500
};

monitoredItem.Notification += OnValueChanged;
subscription.AddItem(monitoredItem);
session.AddSubscription(subscription);
subscription.Create();

private static void OnValueChanged(MonitoredItem item, MonitoredItemNotificationEventArgs e)
{
    foreach (var value in item.DequeueValues())
    {
        Console.WriteLine($&quot;D100 변경됨: {value.Value}&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2165&quot; data-start=&quot;2162&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2179&quot; data-start=&quot;2167&quot; data-ke-size=&quot;size26&quot;&gt;5. 실무 노하우&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2508&quot; data-start=&quot;2181&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2258&quot; data-start=&quot;2209&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2217&quot; data-start=&quot;2209&quot;&gt;포트 변경&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2258&quot; data-start=&quot;2217&quot;&gt;OPC UA 포트 기본값이 49320으로, 방화벽에서 열어야 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2326&quot; data-start=&quot;2259&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2268&quot; data-start=&quot;2259&quot;&gt;인증서 정책&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2326&quot; data-start=&quot;2268&quot;&gt;Mitsubishi는 Client 인증서 신뢰 필요. CertificateStore 경로 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2381&quot; data-start=&quot;2327&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2335&quot; data-start=&quot;2327&quot;&gt;태그 구조&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2381&quot; data-start=&quot;2335&quot;&gt;OPC UA 게이트웨이나 GX Works3로 설정한 태그 구조를 반드시 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2442&quot; data-start=&quot;2382&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2390&quot; data-start=&quot;2382&quot;&gt;보안 정책&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2442&quot; data-start=&quot;2390&quot;&gt;테스트 시 SecurityPolicy.None으로 설정, 운영환경에서는 TLS 권장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2508&quot; data-start=&quot;2443&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2454&quot; data-start=&quot;2443&quot;&gt;통신 오류 대처&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2508&quot; data-start=&quot;2454&quot;&gt;접속 지연 or Bad Status 발생 시, 재시도 또는 KeepAlive 체크 필수&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2513&quot; data-start=&quot;2510&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2542&quot; data-start=&quot;2515&quot; data-ke-size=&quot;size26&quot;&gt;6. Mitsubishi 노드 구조 확인 팁&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2697&quot; data-start=&quot;2544&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2594&quot; data-start=&quot;2544&quot;&gt;&lt;b&gt;MELSOFT OPC UA Configurator&lt;/b&gt; 사용하여 노드 ID 구조 확인&lt;/li&gt;
&lt;li data-end=&quot;2652&quot; data-start=&quot;2595&quot;&gt;iQ-R의 경우 실제 노드 ID는 ns=4;s=Channel1.Device1.D100처럼 구성됨&lt;/li&gt;
&lt;li data-end=&quot;2697&quot; data-start=&quot;2653&quot;&gt;&lt;b&gt;GX Works3&lt;/b&gt;에서 변수 이름을 등록하면 심볼 기반 노드 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kUUtLGdolsE&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=kUUtLGdolsE&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=kUUtLGdolsE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/efNrRm/dJMb9kTYWOj/2gKcfX6j2s5PDUKOWBFcK0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/5jJY9/dJMb9fZriLj/tBij0QYrdmlk6XNYLfLKsk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/X9mc8/dJMb9g468Di/JmKd8FKTPTYSLb2VUD90g1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;미쯔비시 #plc  공압 실린더 제어 실습(#자동화 )&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/kUUtLGdolsE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/OPC UA 표준 통신</category>
      <category>C# OPC UA</category>
      <category>gx works3</category>
      <category>iQ-R</category>
      <category>MELSEC</category>
      <category>mitsubishi plc</category>
      <category>OPC UA Client</category>
      <category>OPC UA 설정</category>
      <category>PLC 통신</category>
      <category>디지털 트윈</category>
      <category>산업 자동화</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/110</guid>
      <comments>https://developer-archive.tistory.com/110#entry110comment</comments>
      <pubDate>Thu, 12 Feb 2026 10:16:39 +0900</pubDate>
    </item>
    <item>
      <title>OPC UA &amp;amp; C# 기초 통신 예제 &amp;ndash; LS산전 PLC 연동편</title>
      <link>https://developer-archive.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;279&quot; data-start=&quot;233&quot;&gt;&lt;b&gt;목표&lt;/b&gt;: LS산전 PLC와 C# 앱 간의 OPC UA 통신 기본 예제 구현&lt;/li&gt;
&lt;li data-end=&quot;279&quot; data-start=&quot;233&quot;&gt;&lt;b&gt;언어/환경&lt;/b&gt;: Visual Studio, C#, .NET Framework 또는 .NET 6 이상&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;366&quot; data-start=&quot;352&quot; data-ke-size=&quot;size26&quot;&gt;OPC UA란?&lt;/h2&gt;
&lt;p data-end=&quot;493&quot; data-start=&quot;368&quot; data-ke-size=&quot;size16&quot;&gt;OPC UA (Open Platform Communications Unified Architecture)는 산업 자동화 환경에서 기기 간 데이터 통신을 위한 &lt;b&gt;플랫폼 독립형, 확장성 있는 표준 프로토콜&lt;/b&gt;입니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;589&quot; data-start=&quot;495&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;589&quot; data-start=&quot;497&quot; data-ke-size=&quot;size16&quot;&gt;OPC UA는 기존 DCOM 기반 OPC Classic의 한계를 극복하며, 보안, 플랫폼 독립성, 확장성을 갖춘 통신 방식으로 대부분의 PLC 제조사에서 지원합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-end=&quot;622&quot; data-start=&quot;596&quot; data-ke-size=&quot;size26&quot;&gt;1. LS산전 OPC UA 기본 설정 확인&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwqdco/dJMcahcfCJS/1lxKTliMzhnHiDhGe6Xi6K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwqdco/dJMcahcfCJS/1lxKTliMzhnHiDhGe6Xi6K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwqdco/dJMcahcfCJS/1lxKTliMzhnHiDhGe6Xi6K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwqdco%2FdJMcahcfCJS%2F1lxKTliMzhnHiDhGe6Xi6K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;408&quot; height=&quot;357&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;734&quot; data-start=&quot;624&quot; data-ke-size=&quot;size16&quot;&gt;LS ELECTRIC PLC (예: &lt;b&gt;XGT 시리즈&lt;/b&gt;)는 OPC UA 서버 기능이 내장된 모델이 있으며, 별도의 &lt;b&gt;OPC UA 서버 보드&lt;/b&gt;나 &lt;b&gt;GLOFA-GMWIN&lt;/b&gt; 등의 툴 설정이 필요합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPJC3v/dJMcaiWvCwn/lAOa1lF0kcm6rT87vppQ20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPJC3v/dJMcaiWvCwn/lAOa1lF0kcm6rT87vppQ20/img.png&quot; data-alt=&quot;kepware 채널 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPJC3v/dJMcaiWvCwn/lAOa1lF0kcm6rT87vppQ20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPJC3v%2FdJMcaiWvCwn%2FlAOa1lF0kcm6rT87vppQ20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;975&quot; height=&quot;458&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;kepware 채널 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;746&quot; data-start=&quot;736&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;필수 조건&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;855&quot; data-start=&quot;747&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;779&quot; data-start=&quot;747&quot;&gt;LS PLC에 OPC UA 기능이 활성화되어 있어야 함 / 이더넷 포트&amp;nbsp; &amp;lt;&amp;ndash;&amp;gt; 컴퓨터, 공유기에 랜으로 연결&lt;/li&gt;
&lt;li data-end=&quot;824&quot; data-start=&quot;780&quot;&gt;IP 주소, 포트 (기본: opc.tcp://&amp;lt;IP주소&amp;gt;:4840) 확인&lt;/li&gt;
&lt;li data-end=&quot;855&quot; data-start=&quot;825&quot;&gt;서버 인증서 설정 허용 또는 신뢰 인증서 사전 등록&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;860&quot; data-start=&quot;857&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;892&quot; data-start=&quot;862&quot; data-ke-size=&quot;size26&quot;&gt;2. C# OPC UA 클라이언트 라이브러리 설치&lt;/h2&gt;
&lt;p data-end=&quot;1006&quot; data-start=&quot;894&quot; data-ke-size=&quot;size16&quot;&gt;C#에서는 &lt;a href=&quot;https://github.com/OPCFoundation/UA-.NETStandard&quot; data-end=&quot;996&quot; data-start=&quot;902&quot;&gt;OPC Foundation의 OPC UA .NET Standard 라이브러리&lt;/a&gt;를 사용합니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1025&quot; data-start=&quot;1008&quot; data-ke-size=&quot;size23&quot;&gt;NuGet 패키지 설치:&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770770828982&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Install-Package OPCFoundation.NetStandard.Opc.Ua&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1106&quot; data-start=&quot;1089&quot; data-ke-size=&quot;size16&quot;&gt;또는 .NET CLI 사용 시:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770770836395&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dotnet add package OPCFoundation.NetStandard.Opc.Ua&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1176&quot; data-start=&quot;1173&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1204&quot; data-start=&quot;1178&quot; data-ke-size=&quot;size26&quot;&gt;3. 기본 통신 예제 코드 (데이터 읽기)&lt;/h2&gt;
&lt;p data-end=&quot;1250&quot; data-start=&quot;1206&quot; data-ke-size=&quot;size16&quot;&gt;다음은 LS산전 OPC UA 서버에 연결하여 노드 값을 읽는 간단한 예제입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770770860013&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Threading.Tasks;
using Opc.Ua;
using Opc.Ua.Client;
using Opc.Ua.Configuration;

namespace LsOpcUaClient
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // 애플리케이션 구성
            var config = new ApplicationConfiguration()
            {
                ApplicationName = &quot;LSOpcUaClient&quot;,
                ApplicationType = ApplicationType.Client,
                SecurityConfiguration = new SecurityConfiguration
                {
                    ApplicationCertificate = new CertificateIdentifier(),
                    AutoAcceptUntrustedCertificates = true, // 테스트용
                },
                TransportConfigurations = new TransportConfigurationCollection(),
                TransportQuotas = new TransportQuotas { OperationTimeout = 15000 },
                ClientConfiguration = new ClientConfiguration { DefaultSessionTimeout = 60000 }
            };

            await config.Validate(ApplicationType.Client);

            // OPC UA 엔드포인트 설정
            var endpointURL = &quot;opc.tcp://192.168.0.100:4840&quot;; // PLC의 OPC UA 주소 입력
            var endpointDescription = CoreClientUtils.SelectEndpoint(endpointURL, useSecurity: false);
            var endpointConfiguration = EndpointConfiguration.Create(config);
            var endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);

            // 세션 생성
            var session = await Session.Create(config, endpoint, false, &quot;LS OPC UA Client&quot;, 60000, null, null);
            Console.WriteLine(&quot;OPC UA 세션 연결 완료.&quot;);

            // 노드 값 읽기
            string nodeId = &quot;ns=2;s=TAG1&quot;; // PLC의 실제 노드 ID 입력
            DataValue value = session.ReadValue(nodeId);
            Console.WriteLine($&quot;노드 값: {value.Value}&quot;);

            // 세션 종료
            session.Close();
            Console.WriteLine(&quot;세션 종료 완료.&quot;);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;3174&quot; data-start=&quot;3161&quot; data-ke-size=&quot;size23&quot;&gt;  주요 설명:&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3346&quot; data-start=&quot;3175&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3210&quot; data-start=&quot;3175&quot;&gt;endpointURL: LS PLC의 IP와 포트를 입력&lt;/li&gt;
&lt;li data-end=&quot;3273&quot; data-start=&quot;3211&quot;&gt;nodeId: LS PLC에 정의된 태그 (예: s=DB1.Tag1 또는 ns=2;s=MyTag)&lt;/li&gt;
&lt;li data-end=&quot;3346&quot; data-start=&quot;3274&quot;&gt;AutoAcceptUntrustedCertificates = true: 인증서 자동 수락 (실제 운영에선 보안 정책 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;3351&quot; data-start=&quot;3348&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;3372&quot; data-start=&quot;3353&quot; data-ke-size=&quot;size26&quot;&gt;4. 예제 실행 전 체크리스트&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;항목확인
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;3569&quot; data-start=&quot;3374&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;3569&quot; data-start=&quot;3446&quot;&gt;
&lt;tr data-end=&quot;3477&quot; data-start=&quot;3446&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3470&quot; data-start=&quot;3446&quot;&gt;PLC의 OPC UA 서버 활성화 여부&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3477&quot; data-start=&quot;3470&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3507&quot; data-start=&quot;3478&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3500&quot; data-start=&quot;3478&quot;&gt;포트 방화벽 허용 (기본 4840)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3507&quot; data-start=&quot;3500&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3539&quot; data-start=&quot;3508&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3532&quot; data-start=&quot;3508&quot;&gt;PLC에 등록된 노드 ID 확인&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3539&quot; data-start=&quot;3532&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3569&quot; data-start=&quot;3540&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3562&quot; data-start=&quot;3540&quot;&gt;인증서 정책 확인 및 설정&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3569&quot; data-start=&quot;3562&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;719&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k1qZV/dJMcabb2chP/PfJbJgYCcFx4CQWAVIEkk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k1qZV/dJMcabb2chP/PfJbJgYCcFx4CQWAVIEkk0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k1qZV/dJMcabb2chP/PfJbJgYCcFx4CQWAVIEkk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk1qZV%2FdJMcabb2chP%2FPfJbJgYCcFx4CQWAVIEkk0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;719&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;719&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-end=&quot;3574&quot; data-start=&quot;3571&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;194&quot; data-start=&quot;150&quot; data-ke-size=&quot;size26&quot;&gt;5. [실무 팁] 데이터 변경 이벤트 처리 (Subscription 방식)&lt;/h2&gt;
&lt;p data-end=&quot;317&quot; data-start=&quot;196&quot; data-ke-size=&quot;size16&quot;&gt;OPC UA는 &lt;b&gt;클라이언트가 주기적으로 값을 읽는 Polling 방식&lt;/b&gt; 외에도, &lt;b&gt;서버에서 값 변경 시 자동 통지받는 Subscription 방식&lt;/b&gt;을 지원합니다.&lt;br /&gt;이를 활용하면 다음과 같은 이점이 있습니다:&lt;/p&gt;
&lt;h3 data-end=&quot;344&quot; data-start=&quot;319&quot; data-ke-size=&quot;size23&quot;&gt;✅ Subscription 방식의 장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;419&quot; data-start=&quot;345&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;364&quot; data-start=&quot;345&quot;&gt;&lt;b&gt;실시간 데이터 반영 가능&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;393&quot; data-start=&quot;365&quot;&gt;&lt;b&gt;CPU 부하 절감&lt;/b&gt; (Polling 대비)&lt;/li&gt;
&lt;li data-end=&quot;419&quot; data-start=&quot;394&quot;&gt;&lt;b&gt;산업 현장 이벤트 기반 제어에 적합&lt;br /&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 예제: 값 변경 시 자동 알림 받기 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770770940988&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Subscription 및 이벤트 핸들링 예제
var subscription = new Subscription(session.DefaultSubscription) 
{
    PublishingInterval = 1000 // 1초 간격으로 변경사항 체크
};

// 모니터링할 노드 지정
var monitoredItem = new MonitoredItem(subscription.DefaultItem)
{
    DisplayName = &quot;MyTag&quot;,
    StartNodeId = &quot;ns=2;s=TAG1&quot;, // LS PLC의 노드 ID
    SamplingInterval = 500,      // 샘플링 주기 (ms)
    QueueSize = 10,
    DiscardOldest = true
};

// 변경 시 이벤트 핸들러 등록
monitoredItem.Notification += OnValueChanged;

// 구독 항목에 추가하고 세션에 등록
subscription.AddItem(monitoredItem);
session.AddSubscription(subscription);
subscription.Create();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 콜백 함수 정의 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770770978394&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private static void OnValueChanged(MonitoredItem item, MonitoredItemNotificationEventArgs e)
{
    foreach (var value in item.DequeueValues())
    {
        Console.WriteLine($&quot;[{DateTime.Now}] {item.DisplayName} 변경됨: {value.Value}&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-end=&quot;1377&quot; data-start=&quot;1341&quot; data-ke-size=&quot;size26&quot;&gt;6. 실무 노하우: Subscription 구현 시 주의점&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1797&quot; data-start=&quot;1379&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;팁&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1492&quot; data-start=&quot;1405&quot;&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;1458&quot; data-start=&quot;1405&quot;&gt;&lt;b&gt;1. PublishingInterval 과 SamplingInterval 적절 조절&lt;/b&gt;&lt;/td&gt;
&lt;td data-end=&quot;1492&quot; data-start=&quot;1458&quot; data-col-size=&quot;md&quot;&gt;너무 짧게 잡으면 불필요한 이벤트가 많아지고 성능 저하&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1538&quot; data-start=&quot;1493&quot;&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;1515&quot; data-start=&quot;1493&quot;&gt;&lt;b&gt;2. QueueSize 조정&lt;/b&gt;&lt;/td&gt;
&lt;td data-end=&quot;1538&quot; data-start=&quot;1515&quot; data-col-size=&quot;md&quot;&gt;네트워크 지연 시 데이터 누락 방지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1606&quot; data-start=&quot;1539&quot;&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;1574&quot; data-start=&quot;1539&quot;&gt;&lt;b&gt;3. Network Loss 대비 재접속 로직 구현&lt;/b&gt;&lt;/td&gt;
&lt;td data-end=&quot;1606&quot; data-start=&quot;1574&quot; data-col-size=&quot;md&quot;&gt;KeepAlive 체크 및 세션 오류 시 재연결&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1697&quot; data-start=&quot;1607&quot;&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;1646&quot; data-start=&quot;1607&quot;&gt;&lt;b&gt;4. 노드가 Null 또는 Bad Status인 경우 체크&lt;/b&gt;&lt;/td&gt;
&lt;td data-end=&quot;1697&quot; data-start=&quot;1646&quot; data-col-size=&quot;md&quot;&gt;일부 PLC에서는 데이터 초기화 전 Null 또는 StatusCode.Bad 리턴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1797&quot; data-start=&quot;1698&quot;&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;1737&quot; data-start=&quot;1698&quot;&gt;&lt;b&gt;5. 인증서 신뢰 문제로 Subscription 실패 가능&lt;/b&gt;&lt;/td&gt;
&lt;td data-end=&quot;1797&quot; data-start=&quot;1737&quot; data-col-size=&quot;md&quot;&gt;개발 중 AutoAcceptUntrustedCertificates = true 설정으로 임시 우회&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;1822&quot; data-start=&quot;1804&quot; data-ke-size=&quot;size26&quot;&gt;고급 확장: 알람 연동&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1939&quot; data-start=&quot;1824&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1885&quot; data-start=&quot;1824&quot;&gt;LS PLC에서 설정한 특정 조건 (예: 알람 태그)이 True로 바뀌는 순간만 감지하여 UI에 경고 표시&lt;/li&gt;
&lt;li data-end=&quot;1939&quot; data-start=&quot;1886&quot;&gt;예: ns=2;s=Alarm_MotorOverheat가 True &amp;rarr; 팝업 or 로그 기록&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1770771248319&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if ((bool)value.Value == true)
{
    Console.WriteLine(&quot;  모터 과열 경고!&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 Subscription 기반 구조는 &lt;b&gt;SCADA 시스템, 디지털 트윈, AI 기반 제어 시스템&lt;/b&gt;에서 &lt;b&gt;핵심 요소&lt;/b&gt;로 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* &lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;전용 모듈이 없는 경우, BridgeWare의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;LSE OPC Server&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;를 사용하여 LS산전 PLC(Glofa, XGT, Master-K)와 데이터를 수집 가능 / 모드버스 TCP 이용&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/OPC UA 표준 통신</category>
      <category>C# OPC UA</category>
      <category>LS ELECTRIC</category>
      <category>LS산전</category>
      <category>M2M</category>
      <category>OPC UA</category>
      <category>OPC UA Client</category>
      <category>PLC 통신</category>
      <category>Visual Studio</category>
      <category>디지털 트윈</category>
      <category>산업 자동화</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/109</guid>
      <comments>https://developer-archive.tistory.com/109#entry109comment</comments>
      <pubDate>Wed, 11 Feb 2026 09:56:00 +0900</pubDate>
    </item>
    <item>
      <title>로봇이 부드럽게 움직이는 이유: 동역학과 제어 이론의 세계</title>
      <link>https://developer-archive.tistory.com/108</link>
      <description>&lt;p data-end=&quot;2480&quot; data-start=&quot;2433&quot; data-ke-size=&quot;size16&quot;&gt;기존 기구학은 &amp;ldquo;어디로 갈지&amp;rdquo;를 다룬다.&lt;br /&gt;동역학은 &amp;ldquo;&lt;b&gt;얼마나 힘을 써서 갈지&lt;/b&gt;&amp;rdquo;를 다룬다.&lt;/p&gt;
&lt;hr data-end=&quot;2485&quot; data-start=&quot;2482&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2501&quot; data-start=&quot;2487&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ 동역학의 본질&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2522&quot; data-start=&quot;2503&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2507&quot; data-start=&quot;2503&quot;&gt;질량 &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: start;&quot;&gt;(Mass)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;물체가 가지고 있는 고유한 물질의 양이자, 운동 상태 변화에 대한 저항(관성)의 크기를 나타내는 정량적인 척도&lt;/span&gt; &lt;/li&gt;
&lt;li data-end=&quot;2512&quot; data-start=&quot;2508&quot;&gt;관성&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: start;&quot;&gt;(Inertia)&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;외력이 작용하지 않을 때 물체가 현재의 운동 상태(정지 또는 등속도 운동)를 그대로 유지하려는 성질&lt;/span&gt; &lt;/li&gt;
&lt;li data-end=&quot;2517&quot; data-start=&quot;2513&quot;&gt;마찰&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: start;&quot;&gt;(Friction)&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;두 물체의 접촉면 사이에서 물체의 운동을 방해하거나, 상대적인 미끄러짐에 저항하는 힘&lt;/span&gt; &lt;/li&gt;
&lt;li data-end=&quot;2522&quot; data-start=&quot;2518&quot;&gt;중력(&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: start;&quot;&gt;Gravity&lt;/span&gt;)&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;질량을 가진 모든 물체 사이에 서로 당기는 힘&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2587&quot; data-start=&quot;2524&quot; data-ke-size=&quot;size16&quot;&gt;이 요소들이 다 로봇 움직임에 영향을 준다.&lt;br /&gt;그래서 실제 로봇은 수학적으로 계산한 대로 절대 안 움직인다.&lt;/p&gt;
&lt;hr data-end=&quot;2592&quot; data-start=&quot;2589&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2606&quot; data-start=&quot;2594&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ 제어 이론&lt;/h2&gt;
&lt;p data-end=&quot;2619&quot; data-start=&quot;2608&quot; data-ke-size=&quot;size16&quot;&gt;대표적인 제어 방식:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2647&quot; data-start=&quot;2621&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2629&quot; data-start=&quot;2621&quot;&gt;PID 제어&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;오차 값(목표값 - 현재값)을 이용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;비례(P)-적분(I)-미분(D)&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;세 가지 요소를 조합해 제어량을 결정하는 피드백 제어&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2637&quot; data-start=&quot;2630&quot;&gt;토크 제어&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;모터에 인가되는 전류를 제어하여 회전력(토크)을 직접적으로 조절하는 방식입니다. 주로 토크 기반의 힘 제어를 수행&lt;/span&gt; &lt;/li&gt;
&lt;li data-end=&quot;2647&quot; data-start=&quot;2638&quot;&gt;임피던스 제어&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;로봇의 위치와 힘 사이의 동적인 관계(강성, 댐핑)를 제어하여, 로봇이 원하는 스프링-댐퍼 시스템처럼 행동하도록 하는 방식&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2730&quot; data-start=&quot;2649&quot; data-ke-size=&quot;size16&quot;&gt;제어는 결국 &amp;ldquo;&lt;b&gt;오차를 줄이는 기술&lt;/b&gt;&amp;rdquo;이다.&lt;br /&gt;로봇이 목표 위치와 실제 위치 사이의 차이를 얼마나 빨리, 얼마나 안정적으로 줄이느냐가 관건이다.&lt;/p&gt;
&lt;hr data-end=&quot;2735&quot; data-start=&quot;2732&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2757&quot; data-start=&quot;2737&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ 시뮬레이터와 현실의 간극&lt;/h2&gt;
&lt;p data-end=&quot;2793&quot; data-start=&quot;2759&quot; data-ke-size=&quot;size16&quot;&gt;시뮬레이터에선 완벽한데&lt;br /&gt;현실 로봇에 올리면 망가지는 이유:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2825&quot; data-start=&quot;2795&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2806&quot; data-start=&quot;2795&quot;&gt;마찰 모델 부정확&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;실제 마찰(Coulomb + Viscous + Stribeck 효과)은 속도에 따라 변하고 비선형적입니다. 이를 정확히 모델링하지 못하면&lt;br /&gt;(예: 정지 마찰력 과소평가), 저속 운전 시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;스틱-슬립(Stick-slip) 현상&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;이 발생&lt;/span&gt; &lt;/li&gt;
&lt;li data-end=&quot;2815&quot; data-start=&quot;2807&quot;&gt;센서 노이즈&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;엔코더나 힘 센서에서 발생하는 고주파 노이즈는 미분(속도 계산) 시 노이즈를 증폭&lt;/span&gt; &lt;/li&gt;
&lt;li data-end=&quot;2825&quot; data-start=&quot;2816&quot;&gt;기구물의 유격&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;기어, 커플링 등 기구적 틈새로 인해 모터가 움직여도 부하(Load)가 바로 움직이지 않는 구간입니다. 방향 전환 시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;데드존(Dead-zone)&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;이 발생&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2852&quot; data-start=&quot;2827&quot; data-ke-size=&quot;size16&quot;&gt;여기서부터 &amp;ldquo;이론과 현실의 전쟁&amp;rdquo;이 시작된다.&lt;br /&gt;&lt;br /&gt;해결 방안 :&lt;/p&gt;
&lt;p data-end=&quot;2852&quot; data-start=&quot;2827&quot; data-ke-size=&quot;size16&quot;&gt;마찰 모델 부정확&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;&amp;gt; 룩업 테이블, 신경망(RBF), 또는 고도화된 마찰 모델(LuGre 등)을 사용&lt;br /&gt;센서 노이즈 &lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;&amp;gt; 저주파 통과 필터(Low-pass filter), 칼만 필터(Kalman filter), 또는 상태 관측기(Observer)를 통해 노이즈를 제거&lt;br /&gt;기구물의 유격&lt;br /&gt;&lt;/span&gt; &lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-processed=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;백래시 보상 알고리즘(Dead-zone inverse) 적용, 이중 엔코더(모터측 + 부하측) 사용, 기계적 프리로드(Preload).&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-processed=&quot;true&quot; data-wiz-uids=&quot;M0mXJb_2q,M0mXJb_2r&quot;&gt;&lt;span data-processed=&quot;true&quot; data-wiz-attrbind=&quot;class=M0mXJb_2p/TKHnVd&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span data-processed=&quot;true&quot; aria-hidden=&quot;true&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;</description>
      <category>산업 IoT &amp;amp; 스마트 팩토리 디지털트윈/로봇</category>
      <category>PID제어</category>
      <category>뉴턴오일러</category>
      <category>라그랑지안</category>
      <category>로봇공학심화</category>
      <category>로봇동역학</category>
      <category>로봇물리</category>
      <category>로봇제어</category>
      <category>로봇제어이론</category>
      <category>임피던스제어</category>
      <category>토크제어</category>
      <author>프로잉2</author>
      <guid isPermaLink="true">https://developer-archive.tistory.com/108</guid>
      <comments>https://developer-archive.tistory.com/108#entry108comment</comments>
      <pubDate>Mon, 9 Feb 2026 14:21:04 +0900</pubDate>
    </item>
  </channel>
</rss>