62 Element는 일반적인 MSTN Element가 아닌 PDS용 특수 Element라 할수 있습니다.
특히 Equipment의 이름을 저장하는 Element이다.
이 Element에 대한 포맷은 문서화 되지 않았는데, 여기서 바이러니 분석을 통해 알아본 포맷을 적어보고자 합니다.
62 Element 역시 MSTN의 모든 Element가 가지는 헤더부분을 가지고 있습니다.
가장 중요한 Equipment Name을 저장하는 위치는
Element 시작 위치에서 18Words 떨어진 부분에서 30 Bytes 의 공간을 차지하고
그 다음으로 descr1 , descr2가 각각 40 , 48Bytes 차지합니다.
마지막으로 98 Words 떨어진 곳에 Equipment의 occurno가 위치합니다.
아래는 62 Element를 삽입하는 예제 코드입니다.
특히 Equipment의 이름을 저장하는 Element이다.
이 Element에 대한 포맷은 문서화 되지 않았는데, 여기서 바이러니 분석을 통해 알아본 포맷을 적어보고자 합니다.
62 Element 역시 MSTN의 모든 Element가 가지는 헤더부분을 가지고 있습니다.
가장 중요한 Equipment Name을 저장하는 위치는
Element 시작 위치에서 18Words 떨어진 부분에서 30 Bytes 의 공간을 차지하고
그 다음으로 descr1 , descr2가 각각 40 , 48Bytes 차지합니다.
마지막으로 98 Words 떨어진 곳에 Equipment의 occurno가 위치합니다.
아래는 62 Element를 삽입하는 예제 코드입니다.
LinkageHeader tLinkHdr;
int nStatus;
MSElement object;
//----------------------------------------------------------------------------------------------------------------------
// put equipment name element
memset(object , '\0' , sizeof(MSElement));
object.hdr.ehdr.type = 62; //! 0x3E
object.hdr.ehdr.words = 98; //! 0x62
object.hdr.ehdr.xhigh = 0xffffffff;
object.hdr.ehdr.yhigh = 0xffffffff;
object.hdr.ehdr.zhigh = 0xffffffff;
object.hdr.dhdr.attindx= 0x0050;
object.hdr.dhdr.props.b.a = 1; //! always new bit is setted.
memset((object.buf[18]) , ' ' , 30);
memcpy((object.buf[18]) , element->name , strlen(element->name)); //! equipment name
memset((object.buf[18 + 15]) , ' ' , 40); //! equip_descr_1
memset((object.buf[18 + 35]) , ' ' , 48); //! equip_descr_2
object.buf[18 + 62] = 0xC0E0;
object.buf[18 + 66] = 0xC0E0;
object.buf[18 + 70] = 0xC0E0;
///object.buf[18 + 73] = 0x8000;
object.buf[18 + 74] = 0xC0E0;
object.buf[18 + 77] = 0x0003;
object.buf[18 + 78] = 0x8000;
object.buf[18 + 79] = 0x0015;
object.buf[18 + 80] = element->occurno;
mdlElement_add (object);
댓글
댓글 쓰기