이 프로젝트에 사용된 것들
이야기
Factory I/O란 무엇인가요?
Factory I/O는 PLC(산업용 컨트롤러)에 연결하여 가상 환경에서 학습하고 훈련하도록 만들어진 공장 시뮬레이터입니다.
미리 정의된 장면이 있거나, 직접 팩토리를 만들어 프로그래밍하고 학습할 수 있습니다. 저는 PLC 컨트롤러와 함께 소프트웨어를 많이 사용했고 Arduino에 연결하고 싶었지만 프로그램에서 지원하지 않았습니다. 그래서 이 프로젝트에서는 Factory I/O를 Arduino에 연결하는 방법을 다룰 것입니다.
그리고 Factory I/O는 무료가 아니라 30일 체험판이 있다는 점을 알아두는 것이 중요합니다. 좋은 종류의 체험판인데, 신용카드 정보를 제공하지 않아도 됩니다 :-).
Factory I/O를 다운로드하고 자세한 내용을 알아보려면 웹사이트를 방문하세요.
비디오 튜토리얼
시작하려면 이 영상을 시청하세요. 아래에서 추가 세부 정보와 함께 자세한 단계별 가이드를 확인할 수 있습니다.
아두이노를 팩토리 I/O에 연결하는 방법은?
어떻게 시작되었을까요? (원하시면 이 부분은 건너뛸 수 있습니다).
Arduino는 Factory I/O에서 지원하지 않지만 Modbus TCP/IP 서버는 사용할 수 있다고 이전에 언급했습니다. Arduino용으로 작성된 Modbus 라이브러리가 있기 때문에 기뻤습니다. Modbus는 빠르기 때문에 자동화에 사용되는 통신 프로토콜입니다. Modbus에 대한 정보는 많이 있지만 이것은 Modbus에 대한 튜토리얼이 아니므로 여기서 마치겠습니다.

Factory I/OI에서 Arduino를 Modbus 서버에 연결하는 방법을 알아내려고 했을 때 직접 연결하는 것은 불가능하다는 결론에 도달했습니다. 그 이유는 Arduino Modbus가 USB 케이블을 통해 통신하기 때문에 통신이 직렬이어야 하기 때문입니다. 그리고 Factory I/O에서 사용하는 서버도 Modbus이지만 TCP/IP를 통한 Modbus를 사용하고 있습니다.
저는 일반 Arduino를 사용하여 이 작업을 수행하고 싶었기 때문에 Arduino의 직렬 Modbus 신호를 Modbus TCP/IP로 변환하는 소프트웨어 도구를 찾았지만 무료로 사용할 수 있는 도구가 없었습니다.
그래서 얼마나 어려울까 생각했습니다.
저에게는 도전이었습니다. 저는 메카트로닉스 기술자이고 IT에 대한 정식 교육을 받지 않았습니다. 그래서 Arduino에서 Modbus TCP/IP로 데이터를 구문 분석하는 Python을 사용하여 앱을 만들었습니다. 코드는 전문가 수준에 미치지 못할 수 있지만 일은 해냅니다. 또한 Python과 C++라는 두 언어를 끊임없이 전환하는 것도 답답했습니다.
최종 결과물은 작은 Exe. 파일(8MB)이며, 이를 다운로드하여 실행하면 둘을 연결할 준비가 됩니다.
공장 I/O 설정
우선, 컴퓨터에 Factory I/O를 다운로드하여 설치하세요.
https://factoryio.com/start-trial
그 후 Factory I/O를 엽니다. 시작 화면에서 "Scenes"를 클릭하고 열고 "2- A에서 B까지(설정 및 재설정)" 장면을 선택합니다.
이제 장면이 열립니다. Factory IO를 사용한 적이 없다면 카메라 설정을 탐색하고 주변을 둘러보는 것으로 시작할 수 있습니다. 카메라 사용 방법은 Factory I/O 매뉴얼에 잘 설명되어 있으며 1분 밖에 걸리지 않습니다. 기본 카메라 기능만 필요합니다. https://docs.factoryio.com/manual/navigation/

계속하려면 오른쪽 모서리에 있는 두 가지 기능("센서 태그 표시" 및 "액추에이터 태그 표시")을 활성화해야 합니다. 그런 다음 재생 버튼을 누르면 진입 컨베이어가 자동으로 실행되는 것을 알 수 있습니다. 이는 true로 강제 설정되었기 때문입니다. 이것은 버그가 아니라 기능이며 연습의 일부입니다.
따라서 상자가 센서 A에 도달했을 때만 컨베이어를 작동시키고 센서 B를 읽을 때 컨베이어를 멈추는 것에만 신경을 쓰면 됩니다. 구매한 센서는 주황색입니다. 반사경을 볼 때 "1" 또는 "참"이기 때문입니다. 따라서 앞에 상자가 있을 때는 "0" 또는 "거짓"이 됩니다.
지금은 중지 버튼을 누르고 창의 왼쪽에 있는 "파일" 버튼을 클릭한 다음 "드라이버"를 선택하세요(또는 단축키 F4를 사용해도 됩니다).
드라이버는 장면을 구동하는 것이며 모든 종류의 PLC를 선택할 수 있지만 Arduino에 연결하려면 Modbus TCP IP 서버를 선택해야 합니다.

그 후 "구성"을 클릭합니다. 다음 이미지와 동일하게 구성을 설정해야 합니다(팁: 자세한 내용은 이미지를 클릭하세요).

다시 돌아가면 Modbus 서버 드라이버는 다음과 같습니다.

따라서 센서 A는 입력 0에 연결되고 센서 B는 입력 1에 연결됩니다. 컨베이어는 코일 0(출력 0)에 연결됩니다.
너드 팩트: 코일은 디지털 출력과 동일합니다. 자동화된 기계가 릴레이로 작동하던 시절의 잔재입니다. 릴레이 로직에서 PLC로 전환하기 위해 디지털 출력으로 "코일"이라는 이름을 붙였습니다. Modbus는 PLC 간 통신을 위해 발명되었기 때문에 "코일"이라는 용어도 사용했습니다.
아니요, 우리는 모두 팩토리 I/O 쪽으로 설정되어 있습니다. 모든 장면에 대한 드라이버 설정을 사용할 수 있으며 16개 입력, 16개 출력 및 8개 아날로그 입력 및 출력으로 제한됩니다.
아두이노 설정하기
이를 위해서는 이 프로젝트에서 제공된 ZIP 파일이 필요합니다.
장면의 논리를 스스로 알아내려면 "Arduino_Link_To_FactoryIO_Firmware" 파일을 사용하세요.
기억해야 할 중요한 점은 코드에서 지연 함수를 사용할 수 없다는 것입니다. 그렇지 않으면 Modbus 통신이 시간 초과됩니다.
*이것은 실제 자동화 프로젝트에서는 수행되지 않습니다.
바로 연결하려면 ZIP 파일을 다운로드하세요.
"Arduino_Link_To_FactoryIO_Scene2"
압축 해제하는 것을 잊지 마세요. 그냥 열면 첨부된 코드가 없고 컴파일 오류가 발생합니다!
스크립트를 열면 탭이 몇 개 보이지만 필요한 탭은 메인 스크립트뿐입니다. 다른 탭에서는 통신을 처리하는 코드를 볼 수 있습니다. Modbus 통신을 위한 라이브러리 코드를 쓴 Andre Sarmento Barbosa에게 큰 감사를 전합니다.

따라서 시작하려면 변수에 입력을 저장할 수 있습니다. Factory I/O에서 사용되는 것과 동일한 변수를 사용하되 한 단어인지 확인하는 것이 좋습니다. 예를 들어:
// make sure you defined your variables in the void set-up. (bool Sensor_A = 0;, ...)
//reading the inputs
Sensor_A = FactoryIO_Input0;
Sensor_B = FactoryIO_Input1;
//The control logic
if.... then.... else...? You can check out the ZIP file "Arduino_Link_To_FactoryIO_Scene2" if you are stuck on the logic. Or you can just upload it to see if it works...
// writing the outputs
Conveyer = FactoryIO_Coil0;
* 저의 다음 프로젝트는 Factory I/O에서 더 복잡한 장면(장면 3)을 풀어가는 것이 될 겁니다. 놓치고 싶지 않으시다면 저를 팔로우해주세요.
그런 다음 스케치를 Arduino Uno, Nano 또는 Mega에 업로드합니다.
두 가지를 연결하다
이전에 말씀드린 대로 Arduino를 Factory IO에 직접 연결하는 방법은 없습니다. Arduino에서 PC로의 통신은 USB를 통해 이루어지고 직렬 연결과 서버는 Modbus TCP/IP를 통해 실행되기 때문입니다.
그래서 저는 Arduino에서 서버로 데이터를 구문 분석하고 Modbus 클라이언트처럼 작동하는 프로그램(파이썬)을 썼습니다.
관심 있는 사람들을 위해 Python 스크립트를 추가하겠습니다. 하지만 앞서 언급했듯이 저는 텍스트 기반 코딩에 대한 공식적인 교육을 받지 않았습니다(하지만 작동합니다). 하지만 8MB의 실행 파일로 컴파일했습니다.
따라서 프로젝트에 첨부된 이 파일을 다운로드하세요: "Software_converter_modbus"
먼저, 모든 것이 제대로 작동하는지 확인하기 위해 확인해야 할 몇 가지 기본 사항은 다음과 같습니다 .
- 공장 I/O가 열려 있고 드라이버가 구성되어 있는지 확인하세요.
- Arduino에서 프로그램을 작성했는지, COM 포트 번호를 알고 있는지 확인하세요.
- Arduino가 PC에 연결되어 있는지 확인하세요
- 직렬 모니터를 사용하지 마세요. 직렬 연결은 컴퓨터와 통신하는 데 필요하기 때문입니다.
그런 다음 프로그램을 실행합니다. 이 프로그램은 Windows에서 알려지지 않았기 때문에 알림이 표시됩니다(시간이 있으면 친구 빌 게이츠에게 전화해서 이 문제를 해결하겠습니다).
하지만 지금은 "더 많은 정보"를 클릭해야 합니다.

그리고 "어쨌든 실행"을 클릭하세요.
exe 파일이기 때문에 바이러스 백신 프로그램이 차단할 가능성이 있지만, 이렇게 하면 됩니다 .
그러면 다음과 같은 아름답고 미니멀한 디자인의 사용자 인터페이스가 나타납니다.

Arduino가 연결된 COM 포트를 선택하면 IP 주소가 적용됩니다(공장 I/O의 기본 IP 주소).
그런 다음 창을 닫으면 터미널에 다음 내용이 표시됩니다.

"입력 0 읽기"가 표시되는 이유는 파이썬 스크립트가 팩토리 I/O에서 입력이 변경된 경우에만 입력을 읽기 때문입니다. 처음에는 모든 입력이 0이고, 센서 A와 B가 상자가 없을 때 1이기 때문에 변경을 감지합니다. Arduino의 아날로그 입력을 팩토리 I/O의 입력으로 사용하면 불안정성 때문에 전체 스팸이 될 것이기 때문에 정수에 동일한 기능을 사용하지 않았습니다.
연결되면 Arduino의 RX와 TX 표시등이 빠르게 깜박여야 합니다.
통신을 중지하려면 터미널을 닫으면 됩니다. 또한 Arduino에 다운로드하려면 통신을 중지해야 합니다.
오류가 발생하면 내용을 읽고 다음 사항을 확인하세요.
Factory IO의 드라이버 구성, 프로그램이 Arduino에 성공적으로 업로드되었습니다. Arduino에 대한 직렬 연결이 아직 설정되지 않았습니다(직렬 모니터와 같음), 바이러스 백신이 스크립트를 승인했습니다(테스트용으로 비활성화할 수 있음), 프로그램이 올바르게 작성되었습니다(의심되는 경우 이 프로젝트에 첨부된 Scene 2용으로 작성된 프로그램을 사용하세요), Factory I/O가 재생 모드에 있습니다(정지 모드가 아님), PC에서 실행 중인 다른 Modbus 서버가 없습니다.
이제 Factory I/O에 연결되었고, 같은 방법으로 모든 장면에 대한 코드를 작성하거나 나만의 장면을 만들 수 있습니다.
Factory I/O와 산업 자동화에 대해 더 자세히 알고 싶다면 제 YouTube 채널을 방문하세요. 저는 Arduino 프로젝트와 산업용 제어 로직에 집중하고 있습니다. 이제 Arduino를 Factory I/OI에 연결할 수 있게 되었으므로 PLC(자동화를 위해 만들어진 산업용 컨트롤러)와 Arduino를 비교하여 예를 들어 차이점을 자세히 살펴보겠습니다.
당신이 그런 종류의 상황에 처해 있다면 이것을 확인해 볼 수 있습니다.
https://www.youtube.com/c/seafoxc
보너스 팁
Arduino 입력 및 출력을 코드에 포함하는 것은 매우 쉽습니다. 이렇게 하면 장면을 구동하는 제어판을 만들 수 있습니다.
시작 버튼이나 상태 표시등을 사용하는 것과 같습니다.

다음 프로젝트에서는 3번째 장면을 풀고 실제 버튼을 사용하여 장면을 제어합니다. 도전하고 싶다면 3번째 장면을 직접 풀어보세요...
장면이 어떻게 작동해야 하는지는 Factory I/O 설명서에서 확인할 수 있습니다.
https://docs.factoryio.com/manual/scenes/filling-tank/
내 작업을 지원할 수 있는 방법
저는 취미로 이 일을 하고 있지만, 가능하다면 손해를 보지 않고 영상과 튜토리얼을 만드는 데 더 많은 시간을 할애하고 싶으며, 그럴 수 있는 좋은 장비도 구입하고 싶습니다(지금은 휴대전화로 촬영하고 있습니다).
여러분이 나를 도울 수 있는 가장 쉬운 방법은 제 YouTube 채널을 구독하는 것입니다(물론 콘텐츠가 마음에 드신다면 말이죠).
https://www.youtube.com/c/seafoxc
나에게 ???????????? 또는 ☕를 사주는 것도 고려해 볼 수 있을 것 같아요.





