미쓰비시 PLC에서 콤마(,)로 나열된 문자열을 항목별로 분리하는 스플릿 함수를 XCALL로 만드는 방법을 다룹니다.
계측기·검사장비에서 수신하는 CSV 형태 데이터를 PLC에서 바로 잘라 쓸 수 있습니다.
계측기나 검사장비와 데이터를 주고받다 보면 콤마로 정리된 문자열을 자주 만납니다.
이를 매번 새로 파싱하지 않고 함수 하나로 처리하는 것이 목표입니다.

1. 문자열 스플릿의 원리
PLC에서 문자열 분리는 두 가지 명령을 조합해 구현합니다.
- INSTR — 원본 문자열에서 구분자(예:
,)의 위치를 찾습니다. - MIDR — 시작 위치와 길이를 지정해 그 사이 부분 문자열을 추출합니다.
즉 "다음 구분자가 어디 있는지(INSTR)" 찾고, "이전 구분자 다음부터 그 직전까지(MIDR)" 잘라내는 동작을 반복하면 한 항목씩 분리됩니다.
이 동작을 과거 글에서 INSTR·MIDR 명령으로 직접 다룬 적이 있습니다.
함께 보면 이해에 도움이 됩니다.
참고 — 콤마(,)로 나열된 데이터를 분리하는 방법 (INSTR·MIDR 명령어)
2. 함수 구조와 파라미터
이 함수는 문자열 데이터를 다루다 보니 많은 워드가 필요해, XCALL 로컬 인수(FD0·FX1·FY2)만으로는 부족합니다.
그래서 유닛 프로그램 끝부분의 빈 영역을 함수 전용 어드레스로 지정해 사용합니다.
예제에서는 통신 프로그램 영역을 D5000번대, XCALL 함수 영역을 D5900번대로 사용합니다.
실제 적용 시 사용 중인 디바이스와 겹치지 않는 빈 영역으로 바꿔 주면 됩니다.

| 디바이스 | 역할 |
|---|---|
| D5900 / FD0 | 문자열 스플릿 구분자 (예: , = 0x2C, 공백 = 0x20) |
| D5902 | 문자열 종료 문자 (예: ETX = 0x03, CR = 0x0D, LF = 0x0A) |
| D5904 | 문자열 추출 시작 위치 포인트 |
| D5905 | 추출할 캐릭터 개수 |
| D5906 | 추출 문자열의 다음 구분자(,) 위치 |
| D5909 | 원본 문자열의 길이 (LEN) |
| D5910 | 원본 문자열 (입력값) |
| D5950 | 추출한 문자열 (출력값) |
3. 예제 #1: 한 항목씩 직접 분리
구분자·종료코드·콤마 위치를 초기화하고 XCALL P50 함수를 연속 호출하면, 호출할 때마다 다음 항목을 하나씩 분리합니다.

테스트 문자열 "START,1,2,3,4,5,6,7,8,9,FINISH" 는 콤마로 11구역으로 나뉩니다.
함수를 10번 호출하면 "START", "1", "2" … "9" 까지 차례로 분리됩니다.

구분자(D5900)·종료코드(D5902)·콤마 위치(D5906)를 매번 초기화하지 않으면, 함수를 연속 호출해 이어지는 항목을 계속 잘라낼 수 있습니다.
4. 예제 #2: FOR 반복문으로 분리
한 항목씩 호출하는 특성을 이해했다면, 같은 동작을 FOR 반복문으로 묶을 수 있습니다.
테스트 문자열 "OK,STRING,SPLIT,TEXT,YEAH" 로 확인합니다.


FOR 반복 횟수를 항목 수에 맞춰 정확히 돌리고 싶다면, 먼저 원본 문자열의 콤마 개수를 세어 그만큼만 반복하도록 구성하면 빈 항목 처리를 깔끔하게 할 수 있습니다.
5. 예제 #3: 아스키 숫자를 정수로 분할 변환
계측기를 다룰 때 매우 편리한 응용입니다.
FOR 문으로 문자를 나눈 뒤, EVAL·DINT 명령으로 아스키 10진수 문자열을 정수형으로 변환합니다.

테스트 문자열 "1.464,2.412,3.575,4.164,7.123" 처럼 숫자만으로 구성된 데이터를 다룹니다.
소수점 3자리를 살리기 위해 EVAL 명령으로 아스키 10진수를 FLOAT 형태로 바꾸고, 1000을 곱해 자릿수를 올린 뒤 DINT 처리합니다.

숫자 문자열이 정수형으로 깔끔하게 정리됩니다.
수신한 측정값을 바로 연산·비교에 쓸 수 있는 형태가 됩니다.
마무리
문자열 스플릿을 함수로 만들어 두면 콤마 구분 데이터를 한 항목씩, FOR 반복으로, 또는 숫자 변환까지 묶어 처리할 수 있어 통신 데이터 파싱이 훨씬 간결해집니다.
다음 편에서는 시리얼 통신에서 데이터 무결성을 확인하는 함수화 3편: 체크섬 생성 을 다룹니다. 수신 문자열을 분리한 뒤 체크섬으로 검증하는 흐름으로 자연스럽게 이어집니다.
'PLC 전기제어 기술자료 > PLC를 함수화 해보자!' 카테고리의 다른 글
| PLC 범용 CRC-16 함수화 : 다항식 가변으로 CCITT·XMODEM·ARC까지 (함수화 7편) (0) | 2023.05.09 |
|---|---|
| 미쓰비시 PLC CRC-16/MODBUS 함수화: XCALL 재사용 라이브러리 (함수화 6편) (0) | 2023.03.01 |
| 미쓰비시 PLC 랜덤 문자열 생성 함수화 : 테스트 데이터 만들기 (함수화 5편) (0) | 2022.04.26 |
| 미쓰비시 PLC 범위지정 랜덤값 생성 함수화 : RND 한계 극복 (함수화 4편) (0) | 2022.04.25 |
| 미쓰비시 PLC 체크섬 생성 함수화 : 시리얼 통신 데이터 검증 (함수화 3편) (1) | 2022.02.28 |
| 미쓰비시 PLC 스케일 변환 함수화 : XCALL로 아날로그 환산 재사용 (함수화 1편) (0) | 2022.02.19 |