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에서 해당 셀의 값을 읽거나 쓸 수 있습니다.
참고: 실제 $\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. 사용 방법 💡
$\text{GX Works2}$: 신호등 래더 프로그램에서 $\text{M0}$는 $\text{시작}$, $\text{M1}$는 $\text{정지}$ 동작과 연계되도록 제어 로직을 구성해야 합니다. $\text{Y20}$ 등은 실제 신호등 램프의 출력에 할당합니다.
$\text{MX Sheet}$: $\text{Excel}$에서 $\text{MX Sheet}$의 '도구' 메뉴 등을 이용해 $\text{A1, B1, C1}$ 등의 셀에 위에 표시된 디바이스 ($\text{M0, M1, Y20}$)와 읽기/쓰기 설정을 정확히 지정하고 $\text{PLC}$와의 통신을 시작합니다.
$\text{VBA}$ 매크로 실행: $\text{Excel}$ 워크시트에 버튼을 만들고, 해당 버튼에 위의 $\text{VBA}$ 코드(Control_TrafficLight_Start, Control_TrafficLight_Stop, Read_TrafficLight_Status)를 할당하여 실행할 수 있습니다.
혹시 신호등 상태를 읽어와 $\text{Excel}$ 시트에 실시간으로 목록화하는 코드가 필요하신가요?
댓글 없음:
댓글 쓰기