2025년 10월 30일 목요일

MX Sheet VBA 통신 코드 예시 (신호등 상태 모니터링 및 제어) /

https://docs.google.com/document/d/1bH__DGSUU9wZO5paONcck7Gqpv9H4uDJyU1IXMy3Rk8/edit?tab=t.0 


#ai___MX Sheet를 통해 MELSEC PLC의 출력(Y)내부 릴레이(M) 디바이스의 상태를 Excel VBA로 읽거나 쓸 수 있습니다. 신호등 프로그램에서 $\text{Y20}$부터 신호등 상태를 연결하셨다고 가정하고, $\text{M0}$와 $\text{M1}$을 시작정지 제어 신호로 사용한다고 가정하여 VBA 코드를 작성했습니다.


✅ MX Sheet VBA 통신 코드 예시 (신호등 상태 모니터링 및 제어)

MX Sheet를 통해 MELSEC PLC의 출력(Y)내부 릴레이(M) 디바이스의 상태를 Excel VBA로 읽거나 쓸 수 있습니다. 신호등 프로그램에서 $\text{Y20}$부터 신호등 상태를 연결하셨다고 가정하고, $\text{M0}$와 $\text{M1}$을 시작정지 제어 신호로 사용한다고 가정하여 VBA 코드를 작성했습니다.


1. 엑셀 워크시트 설정 ⚙️


$\text{MX Sheet}$는 워크시트 셀에 미리 통신 대상 디바이스를 설정해야 VBA에서 해당 셀의 값을 읽거나 쓸 수 있습니다.

설명

MX Sheet 설정 (가정)

$\text{A1}$

시작 제어 (쓰기)

$\text{M0}$ (쓰기)

$\text{B1}$

정지 제어 (쓰기)

$\text{M1}$ (쓰기)

$\text{C1}$

사거리 $\text{Y20}$ 상태 (읽기)

$\text{Y20}$ (읽기)

$\text{D1}$

사거리 $\text{Y21}$ 상태 (읽기)

$\text{Y21}$ (읽기)

$\text{E1}$

사거리 $\text{Y22}$ 상태 (읽기)

$\text{Y22}$ (읽기)

$\dots$

$\dots$

$\dots$

참고: 실제 $\text{Y}$ 디바이스 번호와 그 의미(예: $\text{Y20}$ = 동서 방향 적색, $\text{Y21}$ = 동서 방향 황색, $\text{Y22}$ = 동서 방향 녹색 등)는 $\text{GX Works2}$ 프로그램의 래더에 따라 다릅니다. 이 예시는 $\text{Y20}$부터 3개의 램프를 모니터링하는 것으로 가정합니다.


2. $\text{VBA}$ 코드: 신호등 상태 모니터링 및 제어 💻


$\text{Excel}$에서 Alt + F11을 눌러 $\text{VBA}$ 편집기를 열고, $\text{Module}$에 다음 코드를 붙여넣습니다.


A. 신호등 상태 모니터링 코드 (읽기)


이 코드는 주기적으로 셀 $\text{C1}$ ($\text{Y20}$)의 값을 읽어와 신호등의 현재 상태를 사용자에게 표시합니다.


VBA



Sub Read_TrafficLight_Status()
    ' 워크시트의 이름을 Sheets("Sheet1") 대신 실제 시트 이름으로 변경하세요.
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 예시 시트 이름

    Dim y20_status As Long
   
    On Error GoTo ErrorHandler
   
    ' MX Sheet에 설정된 셀의 값을 읽음 (Y20)
    ' MX Sheet가 PLC와 통신 중이라면, 셀 C1에는 Y20의 현재 상태가 표시됨 (0 또는 1)
    y20_status = ws.Range("C1").Value
   
    ' PLC 상태에 따른 메시지 출력
    If y20_status = 1 Then
        MsgBox "현재 신호등 Y20 (예: 동서 적색) ON 상태입니다.", vbInformation
    Else
        MsgBox "현재 신호등 Y20 (예: 동서 적색) OFF 상태입니다.", vbInformation
    End If
   
    Exit Sub

ErrorHandler:
    MsgBox "오류가 발생했거나 MX Sheet가 PLC와 연결되지 않았을 수 있습니다. (" & Err.Description & ")", vbCritical
End Sub


B. 신호등 시작/정지 제어 코드 (쓰기)


이 코드는 $\text{M0}$ (시작) 또는 $\text{M1}$ (정지) 디바이스에 값을 써서 $\text{PLC}$의 신호등 동작을 제어합니다. $\text{MX Sheet}$는 셀에 값이 쓰이면 해당 디바이스로 그 값을 전송합니다.


시작 (M0 ON) 코드



VBA



Sub Control_TrafficLight_Start()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 예시 시트 이름
   
    On Error GoTo ErrorHandler
   
    ' A1 셀 (M0)에 1을 기록하여 PLC의 신호등 프로그램 시작
    ws.Range("A1").Value = 1
   
    ' 정지 신호 M1은 0으로 클리어 (선택적)
    ws.Range("B1").Value = 0
   
    MsgBox "신호등 작동을 시작 신호 (M0=1)를 보냈습니다.", vbInformation
   
    ' PLC 래더 프로그램에서 M0로 자기 유지 및 동작 시작 래더가 구성되어 있어야 합니다.
    ' 펄스 스위치처럼 사용하려면 잠시 후 M0를 다시 0으로 리셋해주는 코드를 추가할 수 있습니다.
    ' Application.Wait Now + TimeValue("00:00:01") ' 1초 대기
    ' ws.Range("A1").Value = 0                  ' M0 리셋 (필요 시)
   
    Exit Sub

ErrorHandler:
    MsgBox "오류가 발생했거나 MX Sheet가 PLC와 연결되지 않았을 수 있습니다. (" & Err.Description & ")", vbCritical
End Sub


정지 (M1 ON) 코드



VBA



Sub Control_TrafficLight_Stop()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 예시 시트 이름
   
    On Error GoTo ErrorHandler
   
    ' B1 셀 (M1)에 1을 기록하여 PLC의 신호등 프로그램 정지
    ws.Range("B1").Value = 1
   
    ' 시작 신호 M0은 0으로 클리어 (선택적)
    ws.Range("A1").Value = 0
   
    MsgBox "신호등 작동을 정지 신호 (M1=1)를 보냈습니다.", vbInformation
   
    ' 시작과 마찬가지로 펄스 사용 시 리셋 코드 추가 가능
    ' Application.Wait Now + TimeValue("00:00:01") ' 1초 대기
    ' ws.Range("B1").Value = 0                  ' M1 리셋 (필요 시)
   
    Exit Sub

ErrorHandler:
    MsgBox "오류가 발생했거나 MX Sheet가 PLC와 연결되지 않았을 수 있습니다. (" & Err.Description & ")", vbCritical
End Sub


3. 사용 방법 💡


  1. $\text{GX Works2}$: 신호등 래더 프로그램에서 $\text{M0}$는 $\text{시작}$, $\text{M1}$는 $\text{정지}$ 동작과 연계되도록 제어 로직을 구성해야 합니다. $\text{Y20}$ 등은 실제 신호등 램프의 출력에 할당합니다.

  2. $\text{MX Sheet}$: $\text{Excel}$에서 $\text{MX Sheet}$의 '도구' 메뉴 등을 이용해 $\text{A1, B1, C1}$ 등의 셀에 위에 표시된 디바이스 ($\text{M0, M1, Y20}$)와 읽기/쓰기 설정을 정확히 지정하고 $\text{PLC}$와의 통신을 시작합니다.

  3. $\text{VBA}$ 매크로 실행: $\text{Excel}$ 워크시트에 버튼을 만들고, 해당 버튼에 위의 $\text{VBA}$ 코드(Control_TrafficLight_Start, Control_TrafficLight_Stop, Read_TrafficLight_Status)를 할당하여 실행할 수 있습니다.

혹시 신호등 상태를 읽어와 $\text{Excel}$ 시트에 실시간으로 목록화하는 코드가 필요하신가요?


댓글 없음:

젠스파크 AI

  [Full] 젠스파크 사용법 | Genspark.ai 무료/유료 사용법 총정리