문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
ml-ntc2:index [2018/02/09 17:14] Comfile Technology [큐블록 연결 예제] |
ml-ntc2:index [2021/05/17 16:08] (현재) Comfile Technology [ML-NTC2의 사양] |
||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ======ML-NTC2 2채널 써미스터 온도변환 모듈 ====== | ||
+ | |||
+ | ML-NTC2 모듈은 NTC 써미스터 온도센서를 측정할 수 있는 2채널 소형 온도변환모듈 입니다. | ||
+ | |||
+ | {{ :ml-ntc2:ml_ntc2_a.jpg?nolink |}} | ||
+ | |||
+ | -40도 ~ 99도까지 측정할 수 있는 실용적인 저가형 온도변환 모듈입니다. 통신 방식은 RS485이며 MODBUS RTU 프로토콜을 이용하여 측정된 온도값을 읽어올 수 있습니다. 최대 15개까지 동일 선로에 연결할 수 있습니다. | ||
+ | |||
+ | 주로 큐블록/모아콘 또는 MCU와 연결하여 사용합니다. 여러분은 온도변환 테이블과 변환공식등은 신경쓰실 필요없이 직접 온도값을 읽어와서 사용하실 수 있습니다. 센서이상유무 (오픈과 쇼트등)도 체크합니다. | ||
+ | |||
+ | |||
+ | =====ML-NTC2의 사양 ===== | ||
+ | |||
+ | * 전원입력 : 5VDC | ||
+ | * 센서 TYPE : NTC 10K옴(3970) | ||
+ | * 측정범위 : -40℃ ~ 99℃ | ||
+ | * 사용습도 : 35 ~ 85%RH | ||
+ | * 정밀도 : ± 1% | ||
+ | * 크기 : 42mm X 26mm | ||
+ | * 통신방식 : RS485 **//(57600보레이트, 8비트, 1스톱비트)고정, NONE패리티//** / 변경불가 | ||
+ | * 프로토콜 : MODBUS-RTU | ||
+ | |||
+ | |||
+ | =====각부의 기능 ===== | ||
+ | |||
+ | {{ :ml-ntc2:1-4각부의_설명.png | }} | ||
+ | |||
+ | ^ID 설정 스위치 \\ (슬레이브 어드레스) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | ||
+ | ^ 1 | | on | | on | | on | | on | | on | | on | | on | | on | | ||
+ | ^ 2 | | | on | on | | | on | on | | | on | on | | | on | on | | ||
+ | ^ 3 | | | | | on | on | on | on | | | | | on | on | on | on | | ||
+ | ^ 4 | | | | | | | | | on | on | on | on | on | on | on | on | | ||
+ | |||
+ | * 1~15까지 사용가능, 0번은 사용할 수 없음 | ||
+ | * 공백은 OFF를 의미함 | ||
+ | |||
+ | =====측정온도 데이터처리 ===== | ||
+ | |||
+ | ML-NTC2 센서로부터 -40℃ ~ 99℃ 의 값을 2 Byte의 data값으로 반환하고 예외 상황이 발생하면 해당 에러코드를 반환합니다. | ||
+ | |||
+ | ==== 양수 데이터처리 ==== | ||
+ | |||
+ | 기본적으로 곱하기 100한 온도값을 반환합니다. 2054(0x0806) 을 반환한다면 20.54℃ 를 뜻하는 것입니다. | ||
+ | |||
+ | ==== 음수 데이터처리 ==== | ||
+ | -40℃ ~ 0℃의 음수의 온도 값은 data값의 최상위 비트가 1이 됩니다. | ||
+ | **즉, -20.54℃는 34822(0x8806) 값을 반환합니다.** | ||
+ | 음수의 온도 값을 처리하기 위해서는 최상위 비트를 비교하여 32768(0x8000)값을 빼주면 됩니다. | ||
+ | |||
+ | ==== 에러 데이터 ==== | ||
+ | * 온도센서 Open일 때 : 22222 | ||
+ | * 온도센서 Short일 때 : 22229 | ||
+ | * 측정온도 120도 이상일 때 : 22223 | ||
+ | * 측정온도 -40도 이하일 때 : 22224 | ||
+ | |||
+ | =====통신 패킷 ===== | ||
+ | ML-NTC2의 슬레이브 어드레스(Slave address)는 DIP스위치로 설정하며, | ||
+ | 센서 체널0, 1의 시작어드레스(Start address)는 500(0x01F4), 501(0x01F5) 이며, Function은 0x03(Word read)를 사용하여야 합니다. | ||
+ | 아래는 ML-NTC2의 온도 값을 읽기 위한 통신패킷 설명 및 예제 입니다. | ||
+ | |||
+ | **//☞기존 시작어드레스(Start address) 각 체널별로 0, 1주소값이 500, 501로 변경되었습니다. 기존 사용자는 유의하시기 바랍니다.//** | ||
+ | |||
+ | ====Request==== | ||
+ | {{:ml-ntc2:1-2_페킷_req_.png|}} | ||
+ | * Slave address(ID) : 읽어올 모듈의 ID스위치 값 사용합니다. | ||
+ | * Function : 1워드를 읽을 수 있는 0x03(Word Read)을 사용합니다. | ||
+ | * Start address : 체널0은 0x01F4(500), 체널1은 0x01F5(501)를 사용합니다. | ||
+ | * Length : 읽어올 체널수 1, 또는 2 사용합니다. | ||
+ | * CRC: Slave address부터 Length(low)까지의 CRC16의 값. | ||
+ | |||
+ | ==== Response==== | ||
+ | {{:ml-ntc2:1-3_페킷_rep_.png|}} | ||
+ | * Slave address(ID) : 읽어온 모듈의 ID스위치(Slave address) 값 | ||
+ | * Function : 0x03고정(Word Read) | ||
+ | * Byte count : DATA의 BYTE 개수 | ||
+ | * data : 측정된 온도의 값 (0x0806 = 2054 => 20.54℃) | ||
+ | * CRC : Slave address부터 Data(Low)까지의 CRC16의 값. | ||
+ | |||
+ | =====컴파일 제품군과의 결선 ===== | ||
+ | * MSB 제품군 결선 | ||
+ | {{ :ml-ntc2:msb제품군_결선:1-5_msb_.png | }} | ||
+ | * CUSB 제품군 결선 | ||
+ | {{ :ml-ntc2:cusb제품군_결선:1-6_cusb_.png | }} | ||
+ | * MOACON 결선 | ||
+ | {{ :ml-ntc2:moacon_견선:1-7_moacon_.png | }} | ||
+ | |||
+ | |||
+ | =====제품구성===== | ||
+ | |||
+ | * ML-NTC2 제품 (보드) | ||
+ | * NTC 서미스터 2개 | ||
+ | * 5선 케이블 1개 | ||
+ | |||
+ | {{ :ml-ntc2:ml_ntc2_full_a.jpg?nolink&400 |}} | ||
+ | |||
+ | MSB시리즈중 RS485포트가 있는 모델에는 바로 연결가능합니다. | ||
+ | |||
+ | {{ :ml-ntc2:dsc04031.jpg?nolink&400 |}} | ||
+ | |||
+ | 기본적으로 포함되어 있는 NTC서미스터를 케이블형 NTC서미스터(추가 구매) 로 바꾸면, 원격지에 있는 온도를 측정할 수 있습니다. | ||
+ | |||
+ | {{:ml-ntc2:ntc2.png?nolink|}} | ||
+ | |||
+ | 추가 구매한 케이블형 NTC서미스터 끝부분에 있는 모렉스 콘넥터 (본래 MSB시리즈에 결합할 수 있는 형태로 만든 제품이기 때문에 모렉스형으로 되어 있음)를 제거하신뒤 터미널 블록에 연결하시면 됩니다. 극성은 따로 없습니다. | ||
+ | |||
+ | {{ :ml-ntc2:ntccalbe.png?nolink |}} | ||
+ | |||
+ | |||
+ | =====큐블록 연결 예제===== | ||
+ | |||
+ | 큐블록 MSB 에서 RS485 채널3에 연결된 온도센서(NTC 서미스터)를 읽어와 DEBUG창에 표시하는 샘플 프로젝트입니다. | ||
+ | |||
+ | |||
+ | |||
+ | {{ :ml-ntc2:msb_ntc2_.zip |Cubloc 소스 다운로드}} | ||
+ | |||
+ | {{ :ml-ntc2:msb_ntc2.jpg?700 |}} | ||
+ | |||
+ | |||
+ | <html> | ||
+ | <center><iframe width="600" height="338" src="https://www.youtube.com/embed/Oon6LPdRO3I?ecver=1" frameborder="0" allowfullscreen></iframe></center> | ||
+ | </html> | ||
+ | |||
+ | ===== 소스코드 ===== | ||
+ | |||
+ | <code xbasic> | ||
+ | |||
+ | '================================================= | ||
+ | ' | ||
+ | ' MSB rs485 CH3 으로 ML-NTC2 온도변환모듈 연결후 HMI에 온도값 표시 | ||
+ | ' | ||
+ | '================================================= | ||
+ | |||
+ | ' 큐블록 제품에 rs485포트가 있는 제품은 ML-NTC2 바로연결 가능하며, rs232만 있다면 컨버터 사용하여 연결해야함. | ||
+ | |||
+ | #include "MSB6XX" | ||
+ | | ||
+ | Dim K As Byte | ||
+ | Dim txb(10) As Byte | ||
+ | Dim c As Integer | ||
+ | Dim data(10) As Byte | ||
+ | Dim data1 As Long | ||
+ | Dim Ch0 As String | ||
+ | Dim Ch1 As String | ||
+ | On Recv3 Gosub RCV_RTN ' ch3 수신 인터럽트, 데이터가 들어오면 RCV_RTN | ||
+ | Ramclear | ||
+ | |||
+ | Do | ||
+ | MLNTC_TX 1,500,2 ' *슬레이브어드레스 (ID설정), | ||
+ | ' *시작어드레스(Start address)채널0은 0, 채널1은 1 | ||
+ | ' *읽어올 채널수 1, 또는 2 | ||
+ | Delay 100 ' 100ms 주기 | ||
+ | Loop | ||
+ | |||
+ | RCV_RTN: '수신 데이터 값 | ||
+ | If Blen(3,0) > 0 Then '버퍼에 데이터 수신시 | ||
+ | data(K)=Get(3,1) '수신된 패킷중 9바이트 data()배열 변수에 저장 | ||
+ | Incr K | ||
+ | data1.BYTE3 =data(3) '온도값만 변수에 저장 | ||
+ | data1.BYTE2 =data(4) | ||
+ | data1.BYTE1 =data(5) | ||
+ | data1.BYTE0 =data(6) | ||
+ | |||
+ | Ch0=Dp(data1.Word1) | ||
+ | Ch1=Dp(data1.Word0) | ||
+ | |||
+ | Debug "CH0:", Left(Ch0,2),".",Right(Ch0,2) ,Cr | ||
+ | Debug "CH1:", Left(Ch1,2),".",Right(Ch1,2) ,Cr | ||
+ | Endif | ||
+ | If K=9 Then '9바이트 수신시 수신버퍼 clear | ||
+ | K=0 | ||
+ | Bclr 3,0 | ||
+ | Endif | ||
+ | Return | ||
+ | |||
+ | Sub MLNTC_TX( _slavead As Byte,_startad As Integer, _lench As Integer ) '송신 데이터 전송 값 | ||
+ | txb(0)= _slavead | ||
+ | txb(1)= 3 | ||
+ | txb(2)=_startad.Byte1 | ||
+ | txb(3)=_startad.Byte0 | ||
+ | txb(4)=_lench.Byte1 | ||
+ | txb(5)=_lench.Byte0 | ||
+ | Getcrc c,txb,6 ' ┐ | ||
+ | txb(6)=c.Byte1 ' │ 자동 계산하여 넣은 CRC값 | ||
+ | txb(7)=c.Byte0 ' ┘ | ||
+ | Puta 3,txb,8 ' 배열에 저장됐던 데이터값 송신 | ||
+ | End Sub | ||
+ | </code> | ||
+ | |||
+ | [[:index|Comfile Technology's Document Library]] | ||
+ | |||
+ | |||
+ | |||
+ | |||