macro_command main()
// 1. 문자열 배열 변수 선언과 동시에 명시적 빈칸 초기화 실행! (= "" 필수 ⚠️)
// 한화면에서 비디오입력 오브젝트2개에 각각 CCTV 화면 입력 안됨. 한화면 하나만.
char url_stream2[128] = ""
char url_stream7[128] = ""
unsigned short play_cmd = 0
bool button_state = true
// 2. 주간(stream2) 주소와 야간(stream7) 주소를 공백 없이 문자로 완벽히 복사 정의
StringCopy("tapotapo1234:tapotapo321654987@192.168.0.2:554/stream2", url_stream2[0])
StringCopy("tapotapo1234:tapotapo321654987@192.168.0.2:554/stream7", url_stream7[0])
// 3. 토글 버튼(LB 50)의 현재 온/오프 상태를 읽어옴
GetData(button_state, "Local HMI", LB, 50, 1)
// [조건 1] 버튼을 한 번 눌러서 ON(true) 상태가 되었다면? ➡️ stream7(야간적외선) 주소 주입!
if button_state == true then
// 💡 안전 작동을 위해 현재 흐르던 비디오 소스를 완전히 OFF (값 0 전송)
play_cmd = 0
SetData(play_cmd, "Local HMI", LW, 0, 1)
DELAY(150)
// 시스템이 지정해준 LW 2번 방에 stream7 주소 글자 전체를 통째로 덮어쓰기! (64개 워드 데이터 전송)
SetData(url_stream7[0], "Local HMI", LW, 2, 64)
DELAY(150)
// 새로운 야간 주소로 비디오 창 전격 가동 개시! (값 1 전송)
play_cmd = 1
SetData(play_cmd, "Local HMI", LW, 0, 1)
end if
// [조건 2] 버튼을 한 번 더 눌러서 OFF(false) 상태가 되었다면? ➡️ stream2(주간컬러) 주소 주입!
if button_state == false then
// 기존 비디오 소스 OFF
play_cmd = 0
SetData(play_cmd, "Local HMI", LW, 0, 1)
DELAY(150)
// 시스템이 지정해준 LW 2번 방에 stream2 주소 글자 전체를 통째로 덮어쓰기! (64개 워드 데이터 전송)
SetData(url_stream2[0], "Local HMI", LW, 2, 64)
DELAY(150)
// 새로운 주간 주소로 비디오 창 전격 가동 개시! (값 1 전송)
play_cmd = 1
SetData(play_cmd, "Local HMI", LW, 0, 1)
end if
end macro_command

