Rev 2.0
Page 2
Important Notice 위험 이제품을설치 / 사용하는중에현장의위험전압에대한취급부주의는사용자에게심각한피 해또는사망까지이르게할수있습니다. 특히 PT /CT의결선, 디지털출력 relay결선시에연결단자에고전압이인가되므로, 전력시스템분야의유경험숙련자가설치및작동을수행해야합니다. 사용자는제품을설치하기전에반드시제품매뉴얼을숙지해야합니다. 보다자세한관련사항은 RTM 200 사용자매뉴얼을참조바랍니다. 책임한계루텍은생산제품에대한수정권리와사전통보없이루텍제품문서에명시된사양을바꿀수있는권리를보유합니다. 루텍은항상고객이제품주문전에매뉴얼과사양에대한최신규격을검토할것을권고합니다. 루텍은고객과의별다른문서협의사항이없는경우에, 루텍제품응용에대한지원, 고객 시스템디자인, 또는서드파티의제품이용으로야기된특허또는저작권침해에대한책임 을지지않습니다. 운용법에서금지된한도를제외하고루텍은어떤상황하에서도필연적으로일어나는손실 에대하여책임을지지않습니다. RTM 010, RTM 050, RTM 100, RTM 110, RTM 200, RTM 210, RTM 300, LPU 300, RTP 300, PowerDX 는루텍의 trademark 입니다. 다른모든 trademark 는각소유자의자산입니다. 이문서에있는정보는내용의정확성에만전을기합니다. 그러나루텍은문서에있는오류 에대한책임을지지않으며사전통보없이수정할권리를보유합니다. Page 3
Warranty Information 루텍에서제품또는라이센스를구매한원구매자에대한보증 [Warranty] 은아래와같습니 다. 보증조건루텍제품의고객보증기간은 2년으로그기간내에제품자체문제에대한지원을받을수있습니다. 루텍프로그램은별도의보증기간이없으며문제발생시최근제품으로교체서비스를받을수있습니다. 루텍은다음의경우에야기된제품훼손에대한보증기간지원을책임지지않습니다. 제품매뉴얼에서명기된설치안내 [PT/CT 결선, 정격전원 ] 사항과디지털입 / 출력정격을고 려하지않고사용한경우 외부인위적요인이나제품이설치된환경적요인에의해제품에이상이생긴경우 원구매자는제품보증기간내에발생한제품문제사항을 루텍본사로즉시연락바랍니다. 보증기간내원구매자로부터제품문제가제기되면구매자지역에서제품문제를진단하거나당사로제품을배송받아직접확인하고제품에대한수리및교체서비스를지원합니다. 만약구매한제품이보증기간을초과하거나제품문제가지원조건에해당되지않는경우수리 / 교체및배송에대한관련비용을원구매자가부담해야합니다. 루텍은아래에명기된보증조건이행의제한사항들이현행응용법에의해위배되지않는한그어떤경우의법적인요구와주장-계약유무에관계없이, 배상, 보증, 불법행위 [ 과실및무과실책임포함 ]-에대하여원구매자의사업중단, 사용상의손실, 수익문제를포함한구매제품에대한특례적, 간접적, 우발적, 법적, 회사정리로인한결과적인피해나손실에대한책임을지지않습니다. 보증조건이행제한사항루텍은상기된보증조건의불이행에대한고객의요구사항을제외하고판매제품으로부터관련되거나초래된손실, 피해, 또는지출에대하여원구매자, 그관련자, 대리인, 또는계약자가주장하는어떠한요구에대해서도책임을지지않습니다. 상기된보증조건은원구매자의독점적권리입니다. 루텍은보증조건외에명시또는묵시 적인여타다른보증조건 - 특정목적을위한제품수정및제품매매상의묵시적인보증조건, Page 4
법적침해가없는보증조건도포함 - 에대한이행을거부합니다. 보증조건의이행은루텍의제품동작및유지에대한지침사항을정확하게따르지않고교체, 사고, 오용, 남용, 부주의등으로인한제품문제에는적용되지않습니다. 원구매자의시스템디자인에서루텍의인력과대리인에의해제공된기술적인도움은하나의제안이며추천사항은아닙니다. 그제안의실행결정에대한책임은원구매자에게있고원구매자에의해테스트되어야합니다. 고객의목적에맞는제품과그사용의적합성을결정하는것은원구매자의책임입니다. 보증조건에서기술된내용은실제로적용되고, 대리점, 회사또는다른독립체, 루텍또는 여타회사의개인이나직원은그어떤이유로도보증조건의내용을개정, 수정, 또는확장할 수있는권한을가지지않습니다. Standard Compliance ISO 9001:2001 인증 Copyright 2003, Rootech Inc. 주식회사루텍경남창원시성주동 27-1 한국전기연구원내 Tel : 055)267-0910 Fax : 055)267-0912 홈페이지 www.rootech.com 전자메일 rootech@rootech.com Page 5
Revision History RTM 200 프로토콜매뉴얼에대한 release 버전. Revision 1.0 2002. 12. 18 초기제작 Revision 1.1 2003. 01. 08 Modbus RTU 전체수정 Revision 1.2 2003. 03. 06 PT/CT Ratio 통신데이터수정 Revision 1.3 2003. 07. 01 통신 drawing 삽입 Revision 2.0 2004. 01. 08 Modbus Map 추가 [Demand, Max/Min] Page 6
Contents Chapter 1 INTRODUCTION... 9 Serial Communication... 9 RTM 200 Communication... 11 Communication Setup... 13 Chapter 2 Modbus RTU 프로토콜... 15 Packet Field of Modbus RTU... 15 Slave Address Field... 15 Function Field... 15 Data Field... 15 Error Check Field... 16 Exception Responses... 16 Broadcast Packets... 17 Packet 통신... 18 Function 03: Read Holding Registers... 18 Function 06: Write Single Register to Meter... 19 Function 16: Write Multiple Registers to Meter... 19 Chapter 3 Modbus RTU Map... 21 Address Map Section... 21 Setting Section... 21 Measurement Section... 22 Digital In/Out Section... 25 Digital Input Status Section[Address 40501]... 25 Digital Input Status Section[Address 40502]... 25 Digital Output Status Section[Address 40601, 40602]... 26 계측치계산... 27 Chapter 4 Rootech 프로토콜... 30 Rootech Protocol... 30 Packet Field of RTM 200 Rootech Protocol Request... 30 Request Packet Format... 31 Response Packet Format... 31 Broadcast Packets... 31 Packet Communications... 32 Polling Mode - Read all of measurements from RTM 200... 32 Page 7
Setting Mode - Write new data to RTM 200... 35 Comm Set & Digital In/Out Byte Definition... 36 계측치계산... 38 APPENDIX A CRC-16 Calculation... 41 CRC-16 Generation... 41 CRC 생성절차... 41 CRC table... 42 APPENDIX B Modbus RTU C Code Example... 43 Data Receiving and CRC Generation& Checking... 43 Request Packet Generation... 43 Response Packet Checking... 43 Response Packet Checking... 44 CRC functions... 44 Page 8
Chapter 1 INTRODUCTION Serial Communication RTM 200은 Master/Slave 간의통신을위하여 Multi-drop으로동작하는 RS485 통신포트를가진다. 상위프로그램과의통신을위하여 RTM 200이지원하는프로토콜은일반사용자를위한 Modbus RTU Protocol과루텍자체사용을위한 Rootech Protocol이다. Modbus RTU 프로토콜은일반 PC및 PLC 등과같은자동화장비와연계하기위한프로토콜로서 Slave[RTM 200] 와 Master[PC 또는 PLC 등 ] 간의계측및 Setup에대한데이터정보를효율적으로전송할수있는산업용일반프로토콜이다. Rootech 프로토콜은어드레스맵의할당없이고정된패킷에서원하는데이터를읽는방식이다. 전체데이터를간단히모니터링하는경우에효율적이다. Master/Slave Multi-drop 네트웍상의모든통신은 Master/Slave의방식으로이루어진다. Master는통신루프상에서모든정보의전달을시작하고제어한다. Slave 장치는 Master의요청이있을때에만응답동작을한다. 모든통신데이터는 Packet들로이루어지고한 Packet은바이트들로이루어진조합으로구성된다. Master에의해서전송된모든 Packet은 Request가되고 Slave에의해전송된모든 Packet은 Response가된다. Master/Slave 통신에서 Master로부터하나의 Request가오면하위에연결된 Slave중에오직하나만이 Response한다. Modbus RTU Protocol 일반사용자를위한범용프로토콜. 루텍제품과의통신은 Modbus RTU이용권장. Modicon사의 Modbus RTU 프로토콜에준해서설계한다. 메터의각계측데이터및설정파라미터에대한어드레스맵을이용하여각데이터에대한선별적인통신수행을가능하게한다. Modbus는산업현장의범용프로토콜로서 PLC나자동화프로그램등에서는통신드라이버를기본적으로지원한다. Rootech Protocol Page 9
루텍자체내에서만사용하기위한내부프로토콜 각데이터에대한어드레스할당없이송신 / 수신데이터의크기가고정됨 메터에서계측한모든데이터모니터링에효율적 Page 10
RTM 200 Communication RTM 200 의직렬통신설정은 8 data bits, even parity, 1 stop bit 를디폴트로한다. 자세한메 터통신설정방법은 RTM 200 Users Guide 참조 RS485 통신은다수의메터를연결하기위하여버스라인결선을한다. 기본적으로 32 대까지 연결가능하고리피터이용하면최대 247 개까지의메터를연결할수있다. 모든장치의연결 은 RS485 제한거리 [1.2km] 를넘지않도록연결한다. RS485 Multi-drop Connection Diagram RS485 통신라인과 PC-PC는 RS232 포트만지원-를연결하기위해서는 RS485를 RS232 로바꿔주는컨버터 [RTS/CTS 자동콘트롤이되어야함 ] 를사용한다. PC와 RTM 200의통신은 RTM 200의 Ta, Tb 단자를각각컨버터의 RS485 Data(TRX) +, Data(TRX) 로연결하고컨버터의 RS232 포트는사용자PC와일대일로연결한다. RS485 통신선은 AWG Page 11
22[0.33mm2] 이상의규격을가지는실드된 Twisted Pair 선을사용해야한다. RS485 Communication Timing Request Packet 과 Response Packet 사이의시간지연타이밍을보인다. Packet Recognition Time 상위프로그램과로컬메터사이에서송수신되는데이터 Packet 은아래의포맷으로구성된다. 하나의 Packet 은연속된다수의데이터 Frame 으로구성되며 Frame 간의거리가 10bits 이 내가되어야같은 Packet 의 Frame 으로인식된다. 한 Packet 과다음 Packet 까지는최소 10bit 이상의시간이필요하다. Holding Time before transmitting Request Packet PC[Master] 에서 Meter로부터데이터를받고난후최소 10msec[9600bps인경우 ] 의시간이지난후에다음데이터를위한 Request Packet을재전송해야한다. 고속데이터 Request를하는경우-Meter가데이터를수신하고곧바로 Request Packet을전송하는경우-에특히유의해야한다. Page 12
Communication Setup 메터의 Setup Mode 에서통신사양을먼저설정해야한다. 자세한내용은 RTM 200 Users Guide 참조 Serial Communication Setup LED Button Description 1. UP 과 DW 를동시에누르면 Setup Menu 로이동, 2. 맨처음 PT Ratio 메뉴표시 3. UP 과 DW 으로 Coun 메뉴찾기 4. Coun 메뉴표시 5. Coun 메뉴의세부메뉴로가기위하여 FS 를누른다. 6. 현재설정된 Baud Rate 표시 7. Baud Rate 를수정하기위하여 FS 를누른다. 8. 19200 으로수정된 Baud Rate 표시 9. FS 를다시누르면수정된 Baud Rate 값이저장된다. Parity bits 와 Stop bits 설정도위의순서를응용하면된 다. Meter ID[Addr] Setup LED Button Description 1. UP 과 DW 를동시에누르면 Setup Menu 로이동, 2. 맨처음 PT Ratio 메뉴표시 3. UP 과 DW 으로 Addr 메뉴찾기 4. 디폴트 Addr 1 로설정된메뉴표시 5. Addr 을수정하기위하여 FS 를누른다. BLINK 6. Addr 이설정가능 [ 깜박임 ] 한상태가된다. Page 13
7. UP 과 DW 으로 Addr 을 10 으로수정 8. 10 으로수정된 Addr 표시 9. FS 를다시누르면수정된 Addr 값이저장된다. Page 14
Chapter 2 Modbus RTU 프로토콜 RTM 200 에서지원하는 Modbus RTU 에대한세부규격은아래와같다. Packet Field of Modbus RTU Modbus RTU 는 4 가지필드로구성된다. Slave Address Field Function Field Data Field Error Check Field Slave Address Field Modbus RTU Packet의 slave address 필드는한바이트의크기를가지며통신중에 slave device인 RTM 200을지정하기위한 ID로이용된다. 유효한메터어드레스 ID는 1 ~ 247이다. 사용자는프로그램에서데이터를수신하고자하는 slave address[ 메터 ID] 를지정해서 Request해야한다. Function Field Modbus RTU Packet 의 function 필드는한바이트의크기를가지며사용자가보낸 Request 의명령내용을나타낸다. Function[Decimal] Meaning Description 03 Read Multiple register 하나이상의메터계측데이터읽기 06 Write Single register 한개의메터데이터를특정값으로설정 16 Write Multiple registers 여러개의메터데이터를특정값들로설정 Data Field Modbus RTU Packet의 data 필드는가변크기를가진다. 이필드는 Request Packet에서사용자가메터에명령하고자하는데이터를포함하며 Response Packet에서는메터에서사용자에게전달되는데이터를포함한다. 각데이터는 2 Bytes[16 bits] 의크기를가지며그순서는상위하위의 Big Endian 포맷을가진다. 예 ] Page 15
2 Byte 데이터가 3A12 hex 라면전송되는순서는 상위바이트 = 3A hex 하위바이트 = 12 hex Error Check Field Modbus RTU Packet의 error check 필드는 CRC-16 알고리즘을사용하여통신중에발생할수있는전송오류를체크한다. CRC-16은 2 Bytes[16 bits] 의크기를가지며그순서는상위하위의 Big Endian 포맷을가진다. 수신장치는전송받은 Packet 에 CRC 바이트를제외하고계산한값이 CRC 바이트와같다 면통신오류가발생하지않은것이고같지않다면통신중오류가발생한것이다. CRC-16 알고리즘에대한자세한설명은 Appendix A&B 를참조. Packet Format Slave address Function Data Error check 1 byte 1 byte N 2 bytes 2 bytes Exception Responses Master에서 Slave[RTM 200] 로유효하지않은 Command를보내거나유효하지않은 Holding Register를읽는경우에는 Slave로부터 Exception Response가발생이된다. Exception Response에서에러를나타내기위해서 Function code의 high order bit를 1로한다. Exception Response 의 data field 는 Exception error code 를포함한다. Exception Response Slave address Function Exception code Error check 1 byte 1 byte 1 byte 2 bytes Exception code Name Description 01 Illegal Function Request Packet에서유효하지못한명령어 02 Illegal Address Request Packet에서유효하지못한 Holding Address 03 Illegal Value Holding Address에서유효하지못한데이터값전송 Page 16
Broadcast Packets Broadcast Request Packet 은 Master 로부터하위에연결된많은 Slave[RTM 200] 로동시에 같은명령을전달하게한다. Broadcast Request Packet 은 Slave Address 가 0 인것을제외하 면일반적인 Request Packet 과동일하다. 모든 Slave 장치는 Broadcast Request 명령을수신하고실행한다. 그러나 Slave 장치가응 답은하지않는다. Page 17
Packet 통신 RTM 200 Modbus function 의세부사항은아래와같다. Function 03: Read Holding Registers 메터의파라미터값을읽기위해서 Master는 Slave 장치로 Read Holding Registers Request Packet을송신한다. Read Holding Registers Request Packet은수신대상인 Holding Register 의 Starting Address[ 시작어드레스 ] 와 Word Count[ 수신할 Register의개수 ] 를명기한다. Starting Address 는 40000 번지에서상대적인어드레스로나타낸다 [ 40001=0, 40002=1, 40101= 100, and etc.]. CRC 생성은 Appendix B 참조. 메터는 Request 에서요구된 Register 의값을포함하는 Packet 을응답한다. Request Slave Function Starting address Word count Error check 03 1 byte 1 byte 2 bytes 2 bytes 2 bytes 예 ] 메터 1 에 R 상전압 [ 주소 40101], S 상전압 [ 주소 40102] 을 Function 03 명령으로 Polling 하는실제전송코드는아래와같다. slave address = 1, starting address = 100, word count = 2, crc high = 85, crc low = D4 Slave Function Starting Address Word Count Error Check 01 03 00 64 00 02 85 D4 Response Slave Function Byte Count Data Word 1 --- Data Word N Error Check 03 --- 1 byte 1 byte 1 byte 2 bytes --- 2 bytes 2 bytes Data Word 는 Request 에서요구한데이터의내용을나타낸다. 예 ] 메터 1 에서 R 상전압값 = 1A1B, S 상전압값 =223B 를응답함. Page 18
slave address = 1, byte count = 4, crc high = D4, crc low = 5F Slave Function Byte Count Data Word 1 Data Word N Error Check 01 03 04 1A 1B 22 3B D4 5F Function 06: Write Single Register to Meter Function 06 은메터의한레지스터에데이터를쓰는 Request 포맷이다. Request Slave Function Starting Address Data Word Error Check 06 1 byte 1 byte 2 bytes 2 bytes 2 bytes 예 ] 메터 1의 PT Ratio[ 주소 40002] 에데이터 [120=0x78] 를쓰기명령 slave address = 1, starting address = 1, data word = 78, crc high =D8, crc low = 28 Slave Function Starting Address Data Word Error Check 01 06 00 01 00 78 D8 28 Response Function 06 에대한메터의응답은 Request 를 Packet 을재전송한다. 예 ] 위 Request Packet에대한응답은아래와같다. Slave Function Starting Address Data Word Error Check 01 06 00 01 00 78 D8 28 Function 16: Write Multiple Registers to Meter Function 16[decimal] 은메터의여러레지스터에데이터를쓰는 Request/Response 포맷이 다.[ 주의. 십진수 16 은 16 진수로 10 이된다.] Request Slave Function Starting Address Word Count Byte Count 10 1 byte 1 byte 2 bytes 2 bytes 1 byte Data Word 1 --- --- --- Data Word N Error Check Page 19
--- --- --- 2 bytes --- --- --- 2 bytes 2 bytes Starting Address 는설정할데이터의시작어드레스를나타내고 Word Count 는설정데이터 의개수, Byte Count 는 Word Count 의두배이다. 예 ] 메터 1의 PT Ratio[ 주소 40002], CT Ratio[ 주소 40003] 에데이터 [120=0x78], 데이터 [10=0xA] 를쓰기명령 slave address = 1, starting address = 1, word count = 2, byte count = 4, crc high = 32, crc low = 7D Slave Function Starting Address Word Count Byte Count Data Word1 01 10 00 01 00 02 04 00 78 Data Word2 Error Check 00 0A 32 7D Response Slave Function Starting Address Word Count Error Check 10 1 byte 1 byte 2 bytes 2 bytes 2 bytes 예 ] 메터 1의 PT Ratio, CT Ratio에쓰기명령에대한응답 Slave Function Starting Address Word Count Error Check 01 10 00 01 00 02 10 08 Page 20
Chapter 3 Modbus RTU Map Address Map Section RTM 200 에서지원하는 Modbus RTU 에대한어드레스맵은아래와같다. Setting Address 메터내에설정할수있는파라미터의어드레스를정의한다. Measurement Address 메터가계측하는모든데이터와관련스케일정보에대한어드레스를정의한다. Setting Section Address Attribute Value Format Descriptions 40001 R/W UINT16 Wiring Mode 0[ 1P2W ] 단상 2선식 1[ 1P3W ] 단상 3선식 2[ 3P3W, Open Delta] 삼상 3선식, 2 CTs 사용 3[ 3P3W, Open Delta ] 삼상 3선식, 3 CTs 사용 4[ 3P4W ] 삼상 4선식 40002 R/W 아래의주의 4 참조 UINT16 PT Ratio 40003 R/W UINT16 CT Ratio 40004 R/W UINT16 Communication Baud Rate 1[ 1200bps ] 2[ 2400bps ] 3[ 4800bps ] 4[ 9600bps ] Default 5[ 19200bps ] 40005 R/W UINT16 Communication Parity Bit 0[ Non Parity ] 1[ Odd Parity ] 2[ Even Parity ] Default 40006 UINT16 Communication Stop Bit 0[ 1 bit ] Default 1[ 1.5 bit ] Page 21
2[ 2 bit ] 40007 W 0xFFFF[ Reset ] UINT16 Real Energy Reset 40008 W 0xFFFF[ Reset ] UINT16 Imaginary Energy Reset 40009 W 0xFFFF[ Reset ] UINT16 RTC Reset 40010 W 0xFFFF[ Reset ] UINT16 Demand Power Reset 40011 W 0xFFFF[ Reset ] UINT16 Demand Current Reset 40012 W 0xFFFF[ Reset ] UINT16 Max Demand Power Reset 40013 W 0xFFFF[ Reset ] UINT16 Max Demand Current Reset 40014 W 0xFFFF[ Reset ] UINT16 All Max/Min Reset [ 주의 ] 1. Attribute 는 W/R[ 쓰기 / 읽기 ] 2. Value 는설정가능값표시, [ ] 는설정값의내용 3. UINT16: 16 bit unsigned Integer, INT16: 16 bit signed Integer 4. PT Ratio의실제데이터는소수점한자리까지표현된다. 통신에서전송하는 PT Ratio 데 이터는 [ 실제 PT Ratio 값 10 = PT Ratio 통신데이터값 ] 이되어야한다. 예로서, PT Ratio가 100.5 라면 10을시켜 1005의데이터를전송하게된다. Measurement Section Address Attribute Value Format Descriptions 40101 R UINT16 R Phase Voltage 40102 R UINT16 S Phase Voltage 40103 R UINT16 T Phase Voltage 40104 R UINT16 Reserved 40105 R UINT16 RS Line Voltage 40106 R UINT16 ST Line Voltage 40107 R UINT16 TR Line Voltage 40108 R UINT16 Reserved 40109 R UINT16 Voltage Scale Factor 40110 R UINT16 R Phase Current 40111 R UINT16 S Phase Current 40112 R UINT16 T Phase Current 40113 R UINT16 Reserved 40114 R UINT16 Current Scale Factor 40115 R UINT16 Reserved[ R Phase kw ] 40116 R UINT16 Reserved[ S Phase kw ] Page 22
40117 R UINT16 Reserved[ T Phase kw ] 40118 R INT16 Total kw 40119 R UINT16 Total kw Scale Factor 40120 R UINT16 Reserved[ R Phase kvar ] 40121 R UINT16 Reserved[ S Phase kvar ] 40122 R UINT16 Reserved[ T Phase kvar ] 40123 R INT16 Total kvar 40124 R UINT16 Total kvar Scale Factor 40125 R UINT16 Reserved[ R Phase PF ] 40126 R UINT16 Reserved[ S Phase PF ] 40127 R UINT16 Reserved[ T Phase PF ] 40128 R INT16 Total PF 40129 R UINT16 Reserved 40130 R UINT16 Frequency Hz 40131 R UINT16 Reserved 40132 R/W INT32 MWh 40134 R UINT16 Reserved 40135 R UINT16 Reserved 40136 R/W INT32 MVarh 40138 R UINT16 Reserved 40139 R UINT16 Reserved 40140 R/W UINT16 Max R Phase Voltage 40141 R/W UINT16 Max S Phase Voltage 40142 R/W UINT16 Max T Phase Voltage 40143 R/W UINT16 Max RS Line Voltage 40144 R/W UINT16 Max ST Line Voltage 40145 R/W UINT16 Max TR Line Voltage 40146 R/W UINT16 Min R Phase Voltage 40147 R/W UINT16 Min S Phase Voltage 40148 R/W UINT16 Min T Phase Voltage 40149 R/W UINT16 Min RS Line Voltage 40150 R/W UINT16 Min ST Line Voltage 40151 R/W UINT16 Min TR Line Voltage 40152 R/W UINT16 Max R Phase Current 40153 R/W UINT16 Max S Phase Current Page 23
40154 R/W UINT16 Max T Phase Current 40155 R UINT16 Reserved 40156 R UINT16 Reserved 40157 R UINT16 Reserved 40158 R/W INT16 Max kw 40159 R/W UINT16 Max kw Scale Factor 40160 R/W UINT16 Demand Time[Minute] 40161 R/W UINT16 Demand R Phase Current 40162 R/W UINT16 Demand S Phase Current 40163 R/W UINT16 Demand T Phase Current 40164 R UINT16 Reserved 40165 R UINT16 Reserved 40166 R UINT16 Reserved 40167 R/W INT16 Demand kw 40168 R/W UINT16 Demand kw Scale Factor 40169 R UINT16 Reserved 40170 R UINT16 Reserved 40171 R UINT16 Reserved 40172 R/W INT16 Demand kvar 40173 R/W UINT16 Demand kvar Scale Factor 40174 R/W INT16 Max Demand R Phase Current 40175 R/W INT16 Max Demand S Phase Current 40176 R/W INT16 Max Demand T Phase Current 40177 R UINT16 Reserved 40178 R UINT16 Reserved 40179 R UINT16 Reserved 40180 R/W INT16 Max Demand kw 40181 R/W UINT16 Max Demand kw Scale Factor 40182 R UINT16 Reserved 40183 R UINT16 Reserved 40184 R UINT16 Reserved 40185 R/W INT16 Max Demand kvar 40186 R/W UINT16 Max Demand kvar Scale Factor Page 24
Digital In/Out Section 40501 R UINT16 Digital Input Status 40502 R UINT16 Reserved 40601 R/W UINT16 Digital Output 1 40602 R/W UINT16 Digital Output 2 [ 주의 ] 1. Attribute 는 W/R[ 쓰기 / 읽기 ], 2. Value 는설정가능값표시, [ ] 는설정값의의미 Digital Input Status Section[Address 40501] Bit Attribute Descriptions 0 R 메터외부디지털입력 IN1 1 R 메터외부디지털입력 IN2 2 R 메터외부디지털입력 IN3 3 R 메터외부디지털입력 IN4 4 R 메터외부디지털입력 IN5 5 R 메터외부디지털입력 IN6 6 R 메터외부디지털입력 IN7 7 R Reserved[ Bit 7 ] 8 R Reserved[ Bit 8 ] 9 R Reserved[ Bit 9 ] 10 R Reserved[ Bit 10 ] 11 R Reserved[ Bit 11 ] 12 R Reserved[ Bit 12 ] 13 R Reserved[ Bit 13 ] 14 R Reserved[ Bit 14 ] 15 R Reserved[ Bit 15 ] [ 주의 ] Digital Input Status에서 Bit 값이 1이면메터의해당접점이 Off 이고 Bit값이 0이면해당접점 이 On이다. Digital Input Status Section[Address 40502] Bit Attribute Descriptions 0 R Reserved[ Bit 0 ] 1 R Reserved[ Bit 1 ] 2 R Reserved[ Bit 2 ] Page 25
3 R Reserved[ Bit 3 ] 4 R Reserved[ Bit 4 ] 5 R Reserved[ Bit 5 ] 6 R Reserved[ Bit 6 ] 7 R Reserved[ Bit 7 ] 8 R Reserved[ Bit 8 ] 9 R Reserved[ Bit 9 ] 10 R Reserved[ Bit 10 ] 11 R Reserved[ Bit 11 ] 12 R Reserved[ Bit 12 ] 13 R Reserved[ Bit 13 ] 14 R Reserved[ Bit 14 ] 15 R Reserved[ Bit 15 ] Digital Output Status Section[Address 40601, 40602] Address Value Descriptions 40601 0x00FF 메터외부디지털접점출력 [O1] ON 0x0000 메터외부디지털접점출력 [O1] OFF 40602 0x00FF 메터외부디지털접점출력 [O2] ON 0x0000 메터외부디지털접점출력 [O2] OFF Page 26
계측치계산 Response Packet[Function 03 으로 Read 하는경우 ] 에서원하는데이터를아래와같이계산 한다. Voltage Calculation Voltage Scale Factor Converted value 1 0.1 2 1 4 10.0 8 100.0 16 1000.0 실제 R상전압 = R Phase Voltage[addr 40101] Voltage Scale Factor[addr 40109] 실제 [S, T, RS, ST, TR] 전압 = [S,T, RS, ST, TR] Voltage Voltage Scale Factor 예 ] 통신데이터에서 R Phase Voltage= 2200이고 Voltage Scale Factor= 1 이면 220.0 = 2200 0.1 [ 주의 ] Max Voltages[addr 40140~ 40145], Min Voltages[addr 40146~ 40151] 의실제값도상기의공식으로계산한다. Current Calculation Current Scale Factor Converted value 1 0.001 2 0.01 4 0.1 8 1.0 실제 R상전류 = R Phase Current[addr 40110] Current Scale Factor[addr 40114] 실제 [S, T] 전류 = [S, T] Current Current Scale Factor 예 ] 통신데이터에서 R Phase Current= 150이고 Current Scale Factor= 2 이면 1.5 A = 150 0.01 [ 주의 ] Max Currents[addr 40152~ 40154] Demand Currents[addr 40161~ 40163] Page 27
Max Demand Currents[addr 40174~ 40176] 의실제값도상기의공식으로계산한다. kw/kvar, Max kw, Demand kw/kvar, Max Demand kw/kvar Calculation Total kw/kvar Scale Factor Converted value 1 0.001 2 0.01 4 0.1 8 1.0 16 10.0 실제 Total kw = Total kw[addr 40118] Total kw Scale Factor[addr 40119] 실제 Total kvar = Total kvar[addr 40123] Total kvar Scale Factor[addr 40124] 실제 Max kw = Max kw[addr 40158] Max kw Scale Factor[addr 40159] 실제 Demand kw = Demand kw[addr 40167] Demand kw Scale Factor[addr 40168] 실제 Demand kvar = Demand kvar[addr 40172] Demand kvar Scale Factor[addr 40173] 실제 Max Demand kw = Max Demand kw[addr 40180] Max Demand kw Scale Factor[addr 40181] 실제 Max Demand kvar = Max Demand kvar[addr 40185] Max Demand kvar Scale Factor[addr 40186] 예 ] 통신데이터에서 Total kw= 1500 이고 Total kw Scale Factor= 2 이면 15 kw = 1500 0.01 PF/Frequency Calculation 실제 Total PF = Total PF[addr 40128] 0.001 [ 주의 ] 1. PF > 0 는지상 [ 전압이전류보다앞섬 ] 을나타낸다. 2. PF < 0 는진상 [ 전류가전압보다앞섬 ] 을나타낸다. 실제 Frequency = Frequency[addr 40130] 0.1 예 ] 통신데이터에서 Total PF= 900 이면 0.9 PF = 900 0.001 Page 28
통신데이터에서 Total Freq= 600 이면 60.0 Hz = 600 0.1 MWh/MVarh Calculation 실제 MWh = MWh[addr 40132, 40133] 0.001 실제 MVarh = MVarh[addr 40136, 40137] 0.001 예 ] 통신데이터에서 MWh = 15000 이면 15 MWh = 15000 0.001 통신데이터에서 MVarh = 15000 이면 15 MVarh = 15000 0.001 Page 29
Chapter 4 Rootech 프로토콜 Rootech Protocol RTM 200은일반데이터통신을효율적으로지원하는전용 RTM 200 Protocol을가진다. Modbus RTU와같이각데이터별어디레스를가지지않고한번의 Polling으로메터가계측한모든데이터를수신할수있다. Packet Field of RTM 200 Rootech Protocol Request Rootech Protocol Request 는 4 가지필드로구성된다. Slave Address Field Function Field Data Field Error Check Field Slave Address Field Request Packet의 slave address 필드는한바이트의크기를가지고, 통신중에 slave device인 RTM 200을지정하기위한 ID로이용된다. 유효한메터어드레스 ID는 1 ~ 255이다. 사용자는프로그램에서데이터를수신하고자하는 slave address[ 메터 ID] 를지정해서 Request해야한다. Function Field Request Packet 의 function 필드는한바이트의크기를가지고, 사용자가보낸 Request 의 명령내용을나타낸다. Function[Decimal] Meaning Description FF hex Polling Command 메터가계측한전체데이터 Polling 00 hex Setting Command 메터에설정파라미터 [PT Ratio 등 ] 를 Setting Data Field Request Packet 의 data 필드는 8 바이트의크기를가진다. Setting Mode 시설정할데이터를 포함한다. Error Check Field Page 30
Request Packet의 error check 필드는통신중에발생할수있는전송오류를체크한다. 송신장치는전송할 Packet 바이트에대하여 CRC-16 알고리즘을사용해서계산된 CRC 값을 Packet 끝에삽입한다. 수신장치는전송받은 Packet에 CRC 바이트를제외하고계산한값이 CRC 바이트와같다면오류가발생하지않은것이고같지않다면통신중오류가발생한것이다. Request Packet Format Slave Address Function Data Error Check 1 byte 1 byte 8 bytes 2 bytes Response Packet Format Slave Address Data Error Check 1 byte 45 bytes 2 bytes Broadcast Packets Broadcast Request Packet은 Master로부터하위에연결된많은 Slave[RTM 200] 로동시에같은명령을전달하게한다. Broadcast Request Packet은 Slave Address가 0인것을제외하면일반적인 Request Packet과동일하다. 모든 Slave 장치는 Broadcast Request 명령을수신하고실행한다. 그러나 Slave 장치가응답은하지않는다. Page 31
Packet Communications Rootech Protocol 은 Polling Mode 와 Setting Mode 로나뉜다. Polling Mode - Read all of measurements from RTM 200 Function FF 는메터에있는모든계측데이터를읽기위한 Request 명령이다. 특히 PT Ratio등의설정값들은특별한역할 [Setting Mode시에만값이이용됨 ] 을하지않으며 Request Packet에서자리만채우면된다. Request Byte No Field Value[hex] Format Description 0 Meter ID UINT8 특정 Meter ID를나타냄 1 Function 0xFF UINT8 Polling 명령 2 0x0000 UINT16 Reserved 4 0x0000 UINT16 Reserved 6 0x00 UINT8 Reserved 7 0x00 UINT8 Reserved 8 0x00 UINT8 Reserved 9 DOUT0 UINT8 디지털출력 [ 아래테이블참조 ] 10 0x00 UINT8 Reserved 11 0x00 UINT8 Reserved 12 0x00 UINT8 Reserved 13 0x00 UINT8 Reserved 14 Error Check UINT8 Forward CRC 16 bit 상위바이트 15 Error Check UINT8 Forward CRC 16 bit 하위바이트 [ 주의 ] Reserved 는당장사용하지않는바이트이다. 편의상그자리수만큼 0으로채워서 사용한다. MeterID 는 1부터시작한다. MeterID 0은 Broadcast Packet이다. Response Byte No Field Format Description 0 Meter ID UINT8 Meter ID를나타냄 1 PT Ratio UINT16 PT Ratio 3 CT Ratio UINT16 CT Ratio 5 Comm State UINT8 메터에설정된직렬통신사양정보 6 Vr UINT16 R상전압 Page 32
8 Vs UINT16 S상전압 10 Vt UINT16 T상전압 12 Vrs UINT16 RS상전압 14 Vst UINT16 ST상전압 16 Vtr UINT16 TR상전압 18 V scale UINT8 전압 scale factor 19 Ir UINT16 R상전류 21 Is UINT16 S상전류 23 It UINT16 T상전류 25 I scale UINT8 전류 scale factor 26 Total kw INT16 Total kw 28 kw scale UINT8 Total kw scale factor 29 Total kvar INT16 Total kvar 31 kvar scale UINT8 Total kvar scale factor 32 Total PF INT16 Total PF 34 MWh INT32 MWh 38 MVarh INT32 MVarh 42 Frequency Hz UINT16 주파수 44 DIN0 UINT8 디지털입력 [ 아래테이블참조 ] 45 DOUT0 Status UINT8 디지털출력상태 46 Demand kw INT16 Demand kw 48 Demand kw scale UINT8 Demand kw scale factor 49 Demand Ir UINT16 Demand R phase current 51 Demand Is UINT16 Demand S phase current 53 Demand It UINT16 Demand T phase current 55 Max Demand kw INT16 Max Demand kw 57 Max Demand kw scale UINT8 Max Demand kw Scale 58 Max Demand Ir UINT16 Max Demand R phase current 60 Max Demand Is UINT16 Max Demand S phase current 62 Max Demand It UINT16 Max Demand T phase current 64 Max Vr UINT16 Max R phase voltage 66 Max Vs UINT16 Max S phase voltage 68 Max Vt UINT16 Max T phase voltage 70 Max Vrs UINT16 Max RS line voltage 72 Max Vst UINT16 Max ST line voltage Page 33
74 Max Vtr UINT16 Max TR line voltage 76 Max Ir UINT16 Max R phase current 78 Max Is UINT16 Max S phase current 80 Max It UINT16 Max T phase current 82 Max kw INT16 Max kw 84 Max kw scale UINT8 Max kw scale 85 Min Vr UINT16 Min R phase voltage 87 Min Vs UINT16 Min S phase voltage 89 Min Vt UINT16 Min T phase voltage 91 Min Vrs UINT16 Min RS phase voltage 93 Min Vst UINT16 Min ST phase voltage 95 Min Vtr UINT16 Min TR phase voltage 97 UINT16 Reserved 99 UINT16 Reserved 101 Error Check UINT8 Forward CRC 16 bit 상위바이트 102 Error Check UINT8 Forward CRC 16 bit 하위바이트 [ 주의 ] 1. Value 는설정가능값표시, [ ] 는설정값의의미 2. UINT16: 16 bit unsigned Integer, INT16: 16 bit signed Integer 3. UINT8: 8 bit unsigned Integer, INT8: 8 bit signed Integer 4. 2 byte 데이터 [ UINT16, INT16] 는 Big Endian 즉, 상위, 하위순으로데이터가전송된다. Page 34
Setting Mode - Write new data to RTM 200 Function 00 는설정데이터 [PT Ratio, CT Ratio 등 ] 를메터에쓰는 Request 명령이다. Request Byte No Field Value[hex] Format Description 0 Meter ID UINT8 0x01 ~ 0xFF 0x00 특정 Meter ID 를나타냄 연결된모든 Meter ID 를나타냄 1 Function 0x00 UINT8 Setting 명령 2 PT Ratio UINT16 0xFFFF 0x0000 PT Ratio 를특정값으로설정 PT Ratio 를설정하지않음 4 CT Ratio UINT16 0xFFFF 0x0000 CT Ratio 를특정값으로설정 CT Ratio 를설정하지않음 6 MWh Reset UINT8 0xFF 0x00 메터에적산된 MWh 리셋 메터에적산된 MWh 리셋하지않음 7 MVarh Reset UINT8 0xFF 0x00 메터에적산된 MVarh 리셋 메터에적산된 MVarh 리셋하지않음 8 Comm Set UINT8 메터의통신사양설정 [ 아래참조 ] 9 UINT8 Reserved 10 Demand Reset UINT8 0xFF 0x00 모든 Demand 값리셋 모든 Demand 값리셋하지않음 11 Max Demand Reset UINT8 0xFF 0x00 Max Demand 값리셋 Max Demand 값리셋하지않음 12 Max/Min Reset UINT8 0xFF 0x00 모든 Max/Min 값리셋 모든 Max/Min 값리셋하지않음 13 UINT8 Reserved 14 Error Check UINT8 Forward CRC 16 bit 상위바이트 15 Error Check UINT8 Forward CRC 16 bit 하위바이트 Page 35
Response 응답없음. Comm Set & Digital In/Out Byte Definition Comm Set Byte Definition Setting Mode 시 Request Packet 내에있는직렬통신설정을지시하는바이트 Comm Spec Bits Bit Value Description Remark Bit[7 ~ 0] 00000000 No Setting Baud Rate Bit[3 ~0] 0001 1200 bps 0010 2400 bps 0011 4800 bps 0100 9600 bps Default 0101 19200 bps 0110 38400 bps 0111 57600 bps 1000 115200 bps Parity Bit Bit[5 ~ 4] 00 Non 01 Odd 10 Even Default Stop Bit Bit[7 ~ 6] 00 1 bit Default 01 1.5 bits 10 2 bits DOUT0 Byte Definition Setting Mode 시 Request Packet 내에있는디지털출력을지시하는바이트 Digital Output Bits Bit Value Description O1 Bit[1 ~0] 00 메터외부디지털접점출력 [O1] Off Page 36
10 출력에영향을주지않음 11 메터외부디지털접점출력 [O1] On O2 Bit[3 ~2] 00 메터외부디지털접점출력 [O2] Off 10 출력에영향을주지않음 11 메터외부디지털접점출력 [O2] On Bit[7~4] Reserved DOUT0 Status Byte Definition Polling Mode 시 Response Packet 내에서메터의디지털출력상태를나타내는바이트 Digital Output Bits Bit Value Description O1 Bit[1 ~0] 00 디지털접점출력 [O1] Off 11 디지털접점출력 [O1] On O2 Bit[3 ~2] 00 디지털접점출력 [O2] Off 11 디지털접점출력 [O2] On Bit[7~4] Reserved DIN0 Byte Definition Polling Mode 시 Response Packet 내에있는디지털입력상태를나타내는바이트 Digital Input Bits Bit Value Description IN1 Bit0 0/1 메터디지털접점입력 IN1 On/ Off IN2 Bit1 0/1 메터디지털접점입력 IN2 On/ Off IN3 Bit2 0/1 메터디지털접점입력 IN3 On/ Off IN4 Bit3 0/1 메터디지털접점입력 IN4 On/ Off IN5 Bit4 0/1 메터디지털접점입력 IN5 On/ Off IN6 Bit5 0/1 메터디지털접점입력 IN6 On/ Off IN7 Bit6 0/1 메터디지털접점입력 IN7 On/ Off Bit7 Reserved [ 주의 ] DIN0 에서 Bit 값이 1 이면메터의해당접점이 Off 이고 Bit 값이 0 이면해당접점이 On 이다. Page 37
계측치계산 Response Packet[Function 03 으로 Read 하는경우 ] 에서원하는데이터를아래와같이계산 한다. Polling Mode 의 Response Packet 에서원하는데이터를아래와같이계산한다. Voltage Calculation Voltage Scale Factor Converted value 1 0.1 2 1 4 10.0 8 100.0 실제 R상전압 = R 상전압 전압 Scale Factor 실제 [S, T, RS, ST, TR] 전압 = [S,T, RS, ST, TR] 전압 전압 Scale Factor 예 ] 통신데이터에서 R 상전압 = 2200이고 Voltage Scale Factor= 1 이면 220.0 = 2200 0.1 [ 주의 ] Max [R, S, T, RS, ST, TR] 전압과 Min [R, S, T, RS, ST, TR] 전압실제값도상기의공식으로계산한다. Current Calculation Current Scale Factor Converted value 1 0.001 2 0.01 4 0.1 8 1.0 실제 R상전류 = R 상전류 전류 Scale Factor 실제 [S, T] 전류 = [S,T] 전류 Current 전류 Scale Factor 예 ] 통신데이터에서 R 상전류 = 150이고전류 Scale Factor= 2 이면 1.5 A = 150 0.01 [ 주의 ] Max [R, S, T] 전류, Demand [R, S, T] 전류, Max Demand [R, S, T] 전류실제값도상기의공식으로계산한다. Page 38
kw/kvar, Max kw, Demand kw, Max Demand kw Calculation Total kw/kvar Scale Factor Converted value 1 0.001 2 0.01 4 0.1 8 1.0 실제 Total kw = Total kw Total kw Scale Factor 실제 Total kvar = Total kvar Total kw Scale Factor 실제 Max kw = Max kw Max kw Scale Factor 실제 Demand kw = Demand kw Demand kw Scale Factor 실제 Max Demand kw = Max Demand kw Max Demand kw Scale Factor 예 ] 통신데이터에서 Total kw= 1500 이고 Total kw Scale Factor= 2 이면 15 kw = 1500 0.01 MWh/MVarh Calculation 실제 MWh = MWh 0.001 실제 MVarh = MVarh 0.001 예 ] 통신데이터에서 MWh = 15000 이면 15 MWh = 15000 0.001 통신데이터에서 MVarh = 15000 이면 15 MVarh = 15000 0.001 PF/Frequency Calculation 실제 Total PF = Total PF 0.001 [ 주의 ] 1. PF > 0 는지상 [ 전압이전류보다앞섬 ] 을나타낸다. 2. PF < 0 는진상 [ 전류가전압보다앞섬 ] 을나타낸다. 실제 Frequency = Frequency 0.1 예 ] Page 39
통신데이터에서 Total PF= 900 이면 0.9 PF = 900 0.001 통신데이터에서 Total Freq= 600 이면 60.00 Hz = 600 0.1 Page 40
APPENDIX A CRC-16 Calculation CRC-16 Generation Modbus RTU Protocol 은 Reverse CRC Generation 알고리즘을사용한다. CRC 생성절차 자세한 C code 는 Appendix B 참조. 1. Load a 16-bit register with FFFF hex(all 1 s). Call this the CRC register 2. Exclusive OR the first 8-bit byte of the message with the low-order byte of the 16-bit CRC register, putting the result in the CRC register. 3. Shift the CRC register one bit to the right (toward the LSB), zero-filling the MSB. Extract and examine the LSB. 4. (if the LSB was 0 ): Repeat Step 3(another shift) 5. (if the LSB was 1): Exclusive OR the CRC register with the polynomial value A))1 hex (1010 0000 0000 0001) 6. Repeat Steps 3 and 4 until 8 shifts have been performed. When this is done, a complete 8-bit byte will have been processed. Page 41
CRC table 0000 c0c1 c181 0140 c301 03c0 0280 c241 c601 06c0 0780 c741 0500 c5c1 c481 0440 cc01 0cc0 0d80 cd41 0f00 cfc1 ce81 0e40 0a00 cac1 cb81 0b40 c901 09c0 0880 c841 d801 18c0 1980 d941 1b00 dbc1 da81 1a40 1e00 dec1 df81 1f40 dd01 1dc0 1c80 dc41 1400 d4c1 d581 1540 d701 17c0 1680 d641 d201 12c0 1380 d341 1100 d1c1 d081 1040 f001 30c0 3180 f141 3300 f3c1 f281 3240 3600 f6c1 f781 3740 f501 35c0 3480 f441 3c00 fcc1 fd81 3d40 ff01 3fc0 3e80 fe41 fa01 3ac0 3b80 fb41 3900 f9c1 f881 3840 2800 e8c1 e981 2940 eb01 2bc0 2a80 ea41 ee01 2ec0 2f80 ef41 2d00 edc1 ec81 2c40 e401 24c0 2580 e541 2700 e7c1 e681 2640 2200 e2c1 e381 2340 e101 21c0 2080 e041 a001 60c0 6180 a141 6300 a3c1 a281 6240 6600 a6c1 a781 6740 a501 65c0 6480 a441 6c00 acc1 ad81 6d40 af01 6fc0 6e80 ae41 aa01 6ac0 6b80 ab41 6900 a9c1 a881 6840 7800 b8c1 b981 7940 bb01 7bc0 7a80 ba41 be01 7ec0 7f80 bf41 7d00 bdc1 bc81 7c40 b401 74c0 7580 b541 7700 b7c1 b681 7640 7200 b2c1 b381 7340 b101 71c0 7080 b041 5000 90c1 9181 5140 9301 53c0 5280 9241 9601 56c0 5780 9741 5500 95c1 9481 5440 9c01 5cc0 5d80 9d41 5f00 9fc1 9e81 5e40 5a00 9ac1 9b81 5b40 9901 59c0 5880 9841 8801 48c0 4980 8941 4b00 8bc1 8a81 4a40 4e00 8ec1 8f81 4f40 8d01 4dc0 4c80 8c41 4400 84c1 8581 4540 8701 47c0 4680 8641 8201 42c0 4380 8341 4100 81c1 8081 4040 Page 42
APPENDIX B Modbus RTU C Code Example Data Receiving and CRC Generation& Checking Modbus RTU Protocol 의 Packet 생성과체크에대한간단한 C code 예제를보인다. Request Packet Generation main module, Read Holding Registers Request Example #define CRC_16 0xA001 unsigned int CrcTable[256]; main() { unsigned char send_byte[12]; unsigned short crc_out; MakeCrcTable(CRC_16); send_byte[0]= 0x01 send_byte[1]= 0x03 send_byte[2]= 0x00; send_byte[3]= 0x64; send_byte[4]= 0x00; send_byte[5]= 0x02; crc_out=makecrc(send_byte,6); } send_byte[6]= ( crc_out >> 8 )& 0xFF; send_byte[7]= crc_out & 0xFF; Page 43
Response Packet Checking main module, Read Holding Registers Response Example #define PacketLen 9 int status; unsigned char receive_byte[packetlen]; receive_byte 는수신된데이터버퍼 수신데이터크기는 9 Bytes status =CheckCrc(receive_byte,PacketLen); If( status == 0 ) Else CRC Succeful CRC Error CRC functions sub functions unsigned int GenCrc( unsigned int Data, unsigned int Polynomial, unsigned int crc ) { unsigned int ccc; /* Reverse CRC >> Modicon Crc */ for(ccc=0; ccc<8; ccc++){ if( (Data ^ crc ) & 1 ){ crc = ( crc>>1 ) ^ Polynomial; } else{ crc >>= 1; } Data >>= 1; } return( crc&0xffff ); } Page 44
void MakeCrcTable( unsigned int Polynomial ) { unsigned int ccc; for( ccc=0; ccc<256; ccc++ ) CrcTable[ccc] = GenCrc( ccc, Polynomial, 0 ); } unsigned int MakeCrc(unsigned char *buff, unsigned int CrcCount) { unsigned int crc; crc = CRC16(buff, CrcCount); return crc; } unsigned short CRC16( unsigned char *puchmsg, unsigned short usdatalen ) { unsigned char uchcrchi = 0xFF; unsigned char uchcrclo = 0xFF; unsigned uindex; while( usdatalen-- ) { uindex = uchcrchi ^ *puchmsg++; uchcrchi = uchcrclo ^ ( CrcTable[uIndex] & 0xFF ); uchcrclo = ( CrcTable[uIndex] >> 8 ) & 0xFF; } return( ( uchcrchi << 8 ) uchcrclo ); } unsigned int CheckCrc(unsigned char *buff, unsigned int CrcCount) { unsigned int crc; CrcCount -= 2; crc = CRC16(buff, CrcCount); buff += CrcCount; if(( (*buff++ & 0xff)!= (( crc>>8) & 0xff)) ( ( *buff & 0xff )!= (crc & 0xff ))) { /* Error occured */ return 1; } else { /* Error did not occur */ return 0; } } Page 45
Rev 2.0