센브릭스(Senbrix) — 라즈베리파이로 만든 PLC, 게임기로 먼저 검증했다
센브릭스(Senbrix)는 라즈베리파이 기반의 소형 PLC입니다. 공장 설비를 움직이는 그 PLC를, 전용 하드웨어 대신 표준 보드와 .NET 런타임으로 만들었습니다.
이 글은 센브릭스가 무엇이고, 어디까지 동작하는지를 정리합니다. 마침 검증용으로 만든 것이 맥주 따르기 아케이드 게임기여서, 그 이야기가 그대로 근거가 됩니다.
프로젝트 하나에 들어가는 것
한 프로젝트는 세 가지로 구성됩니다.
메모리 영역 — 비트 영역 P·M, 타이머 T, 카운터 C, 워드 영역 D. 크기를 프로젝트마다 정합니다. 위 화면은 P·M 각 32768비트, T·C 각 2048워드, D 4096워드입니다.
통신 — 상위 시스템과 붙는 채널입니다. 위 화면의 HMI링크는 Modbus TCP 슬레이브로,
HMI가 마스터로 접속해 D 영역을 읽고 명령을 씁니다.
보드 — 슬롯 9개. 확장 보드를 꽂고 각 채널을 PLC 주소에 매핑합니다.
보드 라인업
확장 보드는 CAN 버스로 본체에 물립니다. 배선 한 쌍으로 여러 장을 데이지체인할 수 있습니다.
| 보드 | 역할 | 게임기에서 쓴 곳 |
|---|---|---|
| AD-4 | 아날로그 입력 4채널 (16비트) | 레버 위치, 조이스틱 X·Y, 버튼 |
| DA-4 | 아날로그 출력 4채널 | 진동 모터 세기 |
| IO-8 | 디지털 입출력 | 아케이드 버튼 4개, 표시 램프 |
위 프로젝트 화면에서 AD-4 #1은 입력이 D14D65에, P3·출력이 P4에,
IO-8 #2는 입력이 P0DA-4 #3은 출력이 D17에 매핑돼 있습니다. 슬롯 4~9는 비어 있습니다.
이름으로 쓰는 주소
P0 대신 BtnPlay, M33 대신 St30으로 씁니다. 심볼에는 설명과 경로(분류)를 달 수 있어서,
게임기 프로젝트는 게임기/블랙잭, 게임기/게임로직, 게임기/상태디코드 같은 트리로 정리했습니다.
유지 표시를 켠 심볼은 전원을 내려도 값이 남습니다. 순위표 기록이 여기 들어갑니다.
래더와 C#을 같이 쓴다
순서 제어와 인터록은 래더로 씁니다. 접점에 심볼 이름이 그대로 표시되고,
출력 자리에는 LeverPos = (LeverRaw - DeadBand) * 1000 / RawSpan 처럼 연산식을 바로 넣습니다.
래더로 쓰기 불편한 것 — 카드 덱 셔플, 물고기 종류 추첨, 점수 집계 같은 것 — 은 C# 으로 씁니다.
래더와 C#은 같은 메모리를 보고, 핸드셰이크 비트로 서로를 깨웁니다.
위 심볼 화면의 StartReq (C#→래더), GameInitDone (C#→래더) 같은 것이 그 신호입니다.
게임기 프로젝트는 래더가 18개 섹션, C#이 게임별로 나뉘어 있습니다.
검증을 게임기로 한 이유
PLC를 만들어놓고 나면 뭘로 검증할지가 문제가 됩니다. 실제 설비에 넣어보는 게 제일 정확한데, 그러기엔 위험하고 기회도 적습니다.
그래서 아케이드 게임기를 만들었습니다. 게임은 설비보다 요구가 까다로운 구석이 있습니다.
- 실시간성 — 사람이 손으로 조작하고 눈으로 보므로, 늦으면 바로 느껴집니다
- 아날로그 — 레버를 당긴 만큼 맥주가 차야 합니다. ON/OFF로 안 됩니다
- 여러 종류 IO 동시 — 아날로그 입력·출력, 디지털 입출력, 통신이 한 프로그램에서 동시에 돕니다
- 오래 돌려야 함 — 게임은 계속 반복됩니다. 며칠 켜두면 누적 오류가 드러납니다
게임 네 종(맥주 따르기·블랙잭·슈팅·낚시)을 한 프로젝트에서 돌리는 것으로 이걸 대신했습니다. 전 과정은 맥주 게임기 시리즈 일곱 편에 적어뒀습니다.
그 과정에서 실제로 잡은 것들이 있습니다. 아날로그 출력의 비선형성, 통신 갱신 간격이 만드는 화면 끊김, 확장 보드 주소 공간이 부족해 전체를 이사한 일 — 게임기가 아니었으면 납품 현장에서 만났을 문제들입니다.
지금 상태
게임기는 며칠째 켜져 있고 네 종이 다 돌아갑니다. 상위 HMI(센바스 터치)와는 Modbus TCP로 붙어 있습니다.
아직 남은 것도 있습니다. IO-8 릴레이 출력이 동작하지 않아 표시 램프를 못 켰고, DA-4 아날로그 출력은 실측 곡선이 심하게 비선형이어서 쓸 구간을 좁게 잡아 쓰고 있습니다. 둘 다 시리즈에 적어둔 대로 원인까지는 좁혀둔 상태입니다.
댓글
로그인 없이 이름만 적고 남기실 수 있어요. 남긴 댓글은 바로 게시됩니다.
댓글을 불러오는 중…