====== Modport를 이용한 ComfilePi 어플리케이션====== MODPORT는 데이터 수집용 필드 I/O 제품입니다. ComfilePi와 결합하여 산업현장의 각종 데이터 수집및 제어를 할 수 있습니다. 또한 모듈형식의 슬롯 보드로 구성되어 있어 사용자가 필요에따라 모듈을 확장하여 사용할 수있습니다. \\ 본 장에서는 ComfilePi를 이용하여 MODPORT의 모듈 사용법, 제어, 상태값을 표시하는 내용을 다루고 있습니다. {{ :comfilehmi:hmi_connection_modport:modport.png?nolink&400 |}} [[modport:index|산업용 필드 I/O MODPORT 사용설명서]]\\ \\ ===== 구성및 인터페이스 ====== * Modport는 RS485로 통신합니다. ComfilePI에 RS232-TO-RS485 컨버터를 사용해 통신합니다. * Modbus RTU 프로토콜를 사용합니다. * 보레이트도 57600,8,N,1 고정입니다 * 각 모듈별로 고유의 Start address가 있습니다. [[http://www.comfilewiki.co.kr/ko/doku.php?id=modport:modport_%EB%AA%A8%EB%93%88_%EC%8B%9C%EC%9E%91_%EC%96%B4%EB%93%9C%EB%A0%88%EC%8A%A4%EC%99%80_%EA%B4%80%EB%A0%A8%ED%8E%91%EC%85%98:index|시작 어드레스와 펑션]] 참고 * 모듈의 로터리 스위치로 Slave ID를 설정할 수 있습니다. {{ :comfilepi:modport_사용예제:modport_결선.png |}}\\ \\ ===== 예제1) In/Output 제어 ====== * 사용모듈 : MD-DIDC8-디지털 입력, MD-DORL8- 릴레이 출력 * MD-DIDC8 : SlaveID -> 1, StartAddress -> 0~7 * MD-DORL8 : SlaveID -> 1, StartAddress -> 3200 ~ 3207 * 예제프로그램 다운로드 {{ :comfilepi:modport_사용예제:ex1_modport_io_example.zip |}} ** 위 소스는 참고용으로 배포합니다. 저희 회사는 이에 대한 전화 기술지원은 제공하고 있지 않은점 양해부탁드립니다. ** {{ :comfilepi:modport_사용예제:예제1.png |}}\\ \\ Serial통신 설정은 아래와같이 프로그램합니다. ComfilePi의 COM0은 **/dev/serial0**로 설정합니다. string portName = Environment.OSVersion.Platform == PlatformID.Win32NT ? "COM1" : "/dev/serial0"; SerialPort port = new SerialPort(portName, 57600); port.ReadTimeout = 50; port.WriteTimeout = 50; port.Open(); MD-DORL8 출력 비트값을 제어합니다. master.WriteMultipleCoils(1, 3200, outputs); MD-DIDC8 입력 상태값을 읽어옵니다. var inputs = master.ReadCoils(1, 0, 8); \\ ===== 예제2) ADIn/Temp ====== * 사용모듈 : MD-ADIN4- AD 입력, MD-THRT4- 온도센서 * MD-ADIN4 : SlaveID -> 1, StartAddress -> 40101 ~ 40104 * MD-THRT4 : SlaveID -> 1, StartAddress -> 40301 ~ 40304 * 예제프로그램 다운로드. {{ :comfilepi:modport_사용예제:modport_adin_temp_example.zip |}} {{ :comfilepi:modport_사용예제:adin_temp.png |}} \\ MD-ADIN4 아날로}}그 상태값을 읽어옵니다. var AD_CH = master.ReadHoldingRegisters(1, 100, 4); MD-THRT4 온도값을 소수 1자리와 영하(-)의 값으로 읽어옵니다.. var TEMP_CH = master.ReadHoldingRegisters(1, 300, 4); double[] Ftemp = new double[4]; for (int i = 0; i < 4; i++){ Ftemp[i] = Convert.ToDouble(TEMP_CH[i]); if ((Ftemp[i] > 0x8000) ){ Ftemp[i] = Ftemp[i] - 0x8000; Ftemp[i] = Ftemp[i] * (-1); } Ftemp[i] = Ftemp[i] / 10.0; } [[comfilepi:index#.NET_(닷넷)_개발환경|이전 페이지로 이동]]