이전 글에서 FH 매크로의 SetUnitData로 임계값을 수정하기 전에 확인해야 할 사항들을 정리했습니다. 거기서는 측정 실행과 프로그램 초기화 레이블에 대해서만 언급했습니다. 이 글에서는 측정한 값을 화면에 출력하는 쪽을 다룹니다.
기본 자료로는 FH 매크로용으로 만든 스킬(fh-macro)의 '표시 (유닛 매크로)'와 '서브루틴 (처리 이벤트) 및 실행 타이밍' 항목을 참고했습니다. 스킬의 함수명, 서식, 제약 사항은 SDNB-721 (매크로 커스터마이징 기능 프로그래밍 매뉴얼)에 기재된 내용을 그대로 옮겼습니다. 여기에 포함된 코드는 기사용 골격이며, 실제 장비에서는 작동하지 않습니다.
描画できるのはユニットマクロだけ
FH 매크로에는 유닛 연산 매크로 (Unit Operation Macro), 씬 제어 매크로 (Scene Control Macro), 통신 명령어 매크로 (Communication Command Macro), 그리고 유닛 매크로 (Unit Macro)의 네 종류가 있습니다. 스킬에서는 DrawText와 같은 그리기 계열 함수는 오직 유닛 매크로에서만 사용할 수 있다고 명시하고 있습니다. 사용 불가능한 종류의 매크로에 작성하면 오류가 발생합니다.
표시 기능을 추가하려면, 먼저 작성하려는 매크로가 유닛 매크로인지 확인하는 과정이 필요합니다. 함수별로 사용할 수 있는 매크로 종류는 SDNB-721의 8-1-1 표에 나와 있습니다. 또한, 함수에는 대응 버전 규정이 있어 실제 장비의 버전보다 새로운 기능을 사용하면 오류가 발생한다고 스킬에 적혀 있습니다. 사용하는 함수별로 사용할 수 있는 매크로 종류는 8-1-1 표를 참고하고, 대응 버전은 해당 함수의 설명에서 확인해야 합니다.
表示はラベルごとに分かれている
유닛 매크로에서는 정해진 이름의 레이블 아래에 처리를 작성합니다. 스킬표에서 유닛 매크로로 사용할 수 있는 레이블을 추출하면 다음과 같습니다.
*MCRINIT 프로그램 초기화 (로드 직후)
*MEASUREINIT 측정 초기화
*MEASUREPROC 측정 실행
...
표시용 레이블은 이미지 표시, 텍스트 표시, 그래픽 표시 세 가지입니다. 같은 표를 보면 다른 세 종류의 매크로에는 이 세 가지 레이블이 없습니다. 유닛 연산 매크로와 통신 명령어 매크로에서는 측정 실행 레이블만 사용할 수 있으며, 씬 제어 매크로는 프로그램 초기화 레이블만 사용 가능합니다.
스킬 골격은 측정 실행 레이블에서 측정을 수행하고 값을 추출하며, 텍스트 표시 레이블에서 그 값을 출력하는 형태로 작성되어 있습니다.
位置一覧表示がONだと、2つのラベルが動かない
스킬표 아래에 다음 주의사항이 있습니다. 위치 목록 표시 (Position List Display)가 ON 상태일 때는 이미지 표시와 텍스트 표시 레이블은 실행되지 않습니다. 표시하고 싶다면 위치 목록 표시를 OFF로 설정해야 합니다. 그래픽 표시 레이블은 실행됩니다.
매크로 내용에 오류가 없더라도, 이 설정 때문에 표시가 안 될 수 있습니다. Claude에게 '표시되지 않는다'고 상담할 때는 코드를 수정하게 하기 전에, 작성한 레이블이 무엇인지와 위치 목록 표시의 설정을 먼저 확인하도록 해야 합니다.
위치 목록 표시를 화면의 어느 곳에서 전환하는지는 스킬에 적혀있지 않습니다. 매뉴얼로 반드시 확인해야 합니다.
DrawTextとDrawTextGの書式
텍스트 표시 창에 문자를 출력하는 것은 DrawText입니다. 스킬에 있는 서식은 다음과 같습니다.
DrawText <string>, <color>, <newLine>
스킬 골격의 주석에는 color에 JUDGE_NC (회색), JUDGE_OK (녹색), JUDGE_NG (빨간색) 또는 RGB 함수로 만든 색을 전달하고, newLine은 0이면 줄 바꿈하지 않고, 1이면 줄 바꿈한다고 되어 있습니다. 스킬의 함수 목록 항목에는 이 설명이 없으므로, 인수의 의미는 SDNB-721의 8-2 DrawText 항목에서 반드시 확인해야 합니다.
이미지 표시 창에 문자를 출력하는 것은 다른 함수인 DrawTextG를 사용합니다.
DrawTextG <string>, <x>, <y>, <imageNo>[, <unitNo>]
스킬에는 이 외에도 그리기 함수의 이름(DrawLine, DrawBox, DrawCircle 등)과 SetDrawStyle, SetTextStyle이 나열되어 있습니다. 다만 인수의 서식은 나와있지 않습니다. 사용할 때는 SDNB-721의 8-2에서 서식을 확인해야 합니다. 또한 DrawTextG나 도형 그리기를 어느 표시 레이블 아래에 작성할지도 스킬에는 적혀있지 않으므로, 이 역시 확인이 필요합니다.
数値は文字列にしてから渡す
DrawText의 첫 번째 인수는 문자열(string)입니다. 문자열에 숫자를 그대로 더하면 Type mismatch가 되는 점은 연재 4번째 글에서 작성했습니다. 스킬의 '문자열 연결 시 타입 오류' 항목 예시도 그대로 사용할 수 있습니다.
MSG$ = "Result=" + IVAL& Rem ✗ Type mismatch
MSG$ = "Result=" + Str$(IVAL&) Rem ◯
문자열 타입은 255자까지이며, 초과하면 'String too long'이 됩니다. 표시하고 싶은 항목이 많을 때는 하나의 문자열에 모두 담지 않고, DrawText를 행별로 나누어 호출할 계획입니다.
기본 골격
스킬의 기본 골격에서 표시와 관련된 부분을 추출하여 판정(判定)으로 색상을 변경하는 형태로 만들었습니다. (기사용이며, 데이터 번호는 임시 상태입니다.)
Rem ==============================================================
Rem 프로그램명 : SampleDisp
Rem 레비전 : 1.0
...
UnitJudge의 반환값은 스킬 기본 골격에서 주석으로 1이 OK, 0이 미측정임을 나타냅니다. 위의 예시에서는 1 이외를 모두 빨간색으로 처리했기 때문에, 미측정이나 에러도 빨간색으로 표시됩니다. 만약 미측정을 다른 색상으로 하려면, 0인 경우를 분리해야 합니다.
계측 실행 레이블에서 가져온 X#・Y#・JG&을 텍스트 표시 레이블에서 그대로 사용하고 있습니다. 스킬 표에서는 임시 변수의 범위(Scope)가 처리 유닛 내부로 설정되어 있습니다. 같은 유닛 매크로 내이므로 라벨을 넘어서도 값이 사용 가능하다는 전제 하에 기본 골격을 만들었으며, 이것이 실제 장비에서 어떻게 작동할지는 아직 확인하지 못했습니다.
작성시키기 전에 반드시 확인시켜야 할 것
Claude에게 표시 매크로를 작성하게 할 때는, 작성하기 전에 다음 사항들을 반드시 확인시켜야 합니다.
- 작성하려는 매크로가 유닛 매크로인지 여부
- 사용하는 드로잉 함수(drawing function)가 표 8-1-1에서 유닛 매크로에 사용할 수 있다고 되어 있는지. 대응 버전은 무엇인지
- 이미지 표시 레이블인지 텍스트 표시 레이블인지에 따라 위치 목록 표시(位置一覧表示)가 꺼져 있는지 여부
- DrawText의 첫 번째 인자(第1引数)에 숫자를 그대로 전달하고 있지는 않은지
확인할 수 없었던 부분은 스킬의 '모를 때 대응' 방식과 같이, 찾은 절을 첨부하여 '알 수 없음'이라고 작성하게 합니다.
아직 확인하지 못한 것
위치 목록 표시의 전환 위치, DrawText 인자의 의미, DrawLine 등의 서식, DrawTextG나 도형의 드로잉을 작성하는 표시 레이블, Str$ 앞의 공백(空白), 라벨을 넘어서 사용하는 임시 변수의 처리는 아직 확인하지 못한 부분입니다. 실제 장비에서 표시를 띄워보면, 알게 된 것을 스킬에 추가할 것입니다.
질문이나 지적 사항은 댓글로 남겨주세요.
연재 '터미널도 Git도 없는 FA 개발 환경에서의 AI 코딩'
-
터미널 없이 AI 코딩 — PLC 엔지니어가 Claude Code 대신 Claude Desktop을 선택한 이유
-
Claude에게 PLC 전문 지식을 상주시키기 — '스킬'로 허가 명령 리스트와 어려움 포인트 모음 가지게 하는 방법
-
AI가 작성하는 ST 코드가 Sysmac Studio에서 통하지 않는 전형적인 패턴 — 타입 지정 리터럴(typed literal)・배열 INDEX・Execute 타입 FB
-
FH 매크로를 AI에게 맡기기 어려운 이유 — VBA처럼 보이지만 VBA는 아닌 경우
-
AI의 코드를 공장에서 사용하기 전 검증 프로토콜 — 사양 추적(仕様トレース)・책상 위 추적(机上トレース)・독립 리뷰
-
세션을 넘나들며 지식을 쌓기 — Claude Desktop의 메모리와 폴더 연결을 FA 개발에 사용하는 법
-
코드보다 문서가 많은 경우 — FA 업무의 비코드 공정을 AI에게 맡기기
-
이미지 센서와 PLC를 연결하기 — Omron FH×NX 통신을 AI와 설계할 때의 함정
-
스킬은 버리지 않고, 키우기 — 어려움 포인트를 자산으로 바꾸는 운영 방식
-
FA 현장에 AI를 도입하는 현실적인 해결책 — 제약과 정보 관리를 어떻게 조화시킬 것인가
-
OMRON 매뉴얼을 Claude Desktop에 참조시키기 — 자료 번호・절・페이지를 첨부하여 답하게 하는 참조 절차
-
Sysmac Studio・NX PLC 현장 가동 시 Claude에게 상담받기 — 확정된 사항을 다시 묻게 하거나, 추측으로 답하게 하지 않도록 지원하는 규칙
-
FH 이미지 센서 유무 판정을 표준 처리 항목만으로 구성하기 — 임계값은 OK/NG 이미지와 전용 측정 플로우로 결정
-
Claude Desktop에서 '확인한 후에 단정하기'를 모든 발언에 적용하기 — FA 개발에서 사용하고 있는 상시 규칙의 스킬
-
FH 매크로에서 임계값을 수정하기 전에 확인해야 할 것 — SetUnitData로 판정 조건을 업데이트할 때 Claude에게 맡길 절차
-
Sysmac Studio ST의 FB 호출을 Claude Desktop의 스킬로 타입 지정하기 — FB 연쇄・R_TRIG・리셋
-
FA 프로젝트 사양서를 Claude Desktop에 전체 읽히기 — docx는 본문과 표를 문서 순서대로, xlsx는 모든 시트를 읽는 절차
-
Sysmac Studio ST의 상태 천이(状態遷移)를 Claude Desktop에게 작성하게 할 세부 규칙
-
FH 매크로의 유닛 매크로를 사용하여 측정 결과를 화면에 출력하는 방법 — 표시용 레이블(display labels), DrawText, 위치 목록 표시가 켜져 있을 경우 작동하지 않는 처리 (본문)
논의 (Discussion)