본문 바로가기
PLC 전기제어 기술자료/PLC를 함수화 해보자!

미쓰비시 PLC 범위지정 랜덤값 생성 함수화 : RND 한계 극복 (함수화 4편)

by 위치결정JP 2022. 4. 25.
728x90
반응형

이전 글 — 함수화 3편: 체크섬 생성

미쓰비시 PLC에서 원하는 최소·최대 범위의 랜덤값을 생성하는 함수를 XCALL로 만드는 방법을 다룹니다.
내장 RND 명령의 고정 범위 한계를 스케일 변환으로 극복해, 음수를 포함한 임의 구간의 난수를 바로 얻습니다.

각종 테스트·시뮬레이션을 하다 보면 간간이 랜덤값이 필요합니다. 이를 함수화해 두면 편리하게 호출해 쓸 수 있습니다.

 

1. 미쓰비시 RND 명령의 한계

미쓰비시 PLC가 제공하는 랜덤 명령(RND)은 0 ~ 32767 의 정수형 값만 생성합니다.

문제는 실제로 원하는 값은 그 범위가 아니라는 점입니다.
예를 들어 -5 ~ 10 같은 구간의 난수가 필요하면, RND 결과를 원하는 범위로 다시 환산하는 연산을 매번 직접 해야 합니다.
음수가 끼면 처리는 더 번거로워집니다.

📝 NOTE

핵심 아이디어는 단순합니다. RND 로 얻은 0 ~ 32767 값을 스케일 변환으로 [최소값, 최대값] 구간에 매핑하면 됩니다. 1편에서 만든 스케일 변환 로직이 그대로 재활용됩니다.

random()_220427.gxw
0.92MB

2. 함수 활용법

CALL 로 함수를 호출하고, 인수로 최소값·최대값·결과를 저장할 데이터 레지스터 어드레스를 지정하면 됩니다.
그러면 그 구간 안의 랜덤 정수가 지정한 레지스터에 저장됩니다.

 

 

이 함수는 앞서 포스팅한 스케일 변환음수 랜덤값 생성을 합친 구조입니다.
RND 로 생성된 값을 원하는 최소값·최대값 범위로 스케일 변환하는 것이 큰 맥락입니다.

 

3. 결과

최소·최대 인수만 바꿔 호출하면 지정한 구간의 난수가 생성되는 것을 확인할 수 있습니다.

 

💡 TIP

RND 는 시드(seed)에 따라 같은 순서가 반복될 수 있습니다. 매번 다른 패턴이 필요하면 스캔 카운터나 시각(time) 값처럼 변하는 값을 시드에 섞어 주면 분포가 한결 자연스러워집니다.

마무리

내장 RND 의 0 ~ 32767 한계를 스케일 변환으로 감싸 함수화하면, 음수를 포함한 어떤 구간의 랜덤값이든 인수 두 개로 바로 얻을 수 있습니다.

💡 TIP

다음 편에서는 숫자가 아닌 함수화 5편: 랜덤 문자열 생성 을 다룹니다. 테스트 데이터로 임의의 문자열이 필요할 때 유용합니다.

728x90
반응형