| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968 | 
using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.IO;using System.Threading;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.InteropServices;using System.Reflection;namespace FPER{    class Paket    {// 데몬 데이터 패킷 클래스        static byte[] RawSerialize(object anything)        {// 패킷 Serialize 함수             int rawsize = Marshal.SizeOf(anything);            IntPtr buffer = Marshal.AllocHGlobal(rawsize);            Marshal.StructureToPtr(anything, buffer, false);            byte[] rawdatas = new byte[rawsize];            Marshal.Copy(buffer, rawdatas, 0, rawsize);            Marshal.FreeHGlobal(buffer);            return rawdatas;        }        static object RawDeserialize(byte[] rawdatas, Type anytype)        {// 패킷 Deserialize 함수             object ret_obj;            int rawsize = Marshal.SizeOf(anytype);            if (rawsize > rawdatas.Length)                return null;            IntPtr buffer = Marshal.AllocHGlobal(rawsize);            Marshal.Copy(rawdatas, 0, buffer, rawsize);            ret_obj = Marshal.PtrToStructure(buffer, anytype);            Marshal.FreeHGlobal(buffer);            return ret_obj;        }        byte DoCalcs(byte[] bt, int size)        {// cs 계산 함수             byte ret_byte = 0x00;            try            {                int counter = 0;                do                {                    ret_byte = (byte)(ret_byte ^ bt[counter]);                    ret_byte++;                    counter++;                }                while (counter < size);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte;        }        public int DoCheckcs(byte[] bt, int size, byte cs)        {/// cs 체크 함수             int ret = 0;            try            {                byte calcs = 0x00;                calcs = DoCalcs(bt, size);                if (cs == calcs)                {                    ret = 1;                }                else                {                    ret = 0;                }            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret;        }        public byte[] CreatePKT_SayHello_To_Board(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type1 PKT = new PRTReceiver_Type1();                int psize = (byte)default_value_define.size_PRTReceiver_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.say_hello;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_ReadBoardStatus(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type1 PKT = new PRTReceiver_Type1();                int psize = (byte)default_value_define.size_PRTReceiver_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.resd_tbd_state;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_WriteBoardStatus(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID, byte RT_BaudRate, byte loop1_BaudRate, byte loop2_BaudRate, byte RT_Term, byte BD_Reset)        { //2010.3.24_moon            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type6 PKT = new PRTReceiver_Type6();                int psize = (byte)default_value_define.size_PRTReceiver_Type6;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.write_tbd_state;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = RT_BaudRate;                PKT.Option2 = loop1_BaudRate;                PKT.Option3 = loop2_BaudRate;                PKT.Option4 = RT_Term;                PKT.Option5 = BD_Reset;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_SearchRepeaterUNIT(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID, byte Repeater_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type2 PKT = new PRTReceiver_Type2();                int psize = (byte)default_value_define.size_PRTReceiver_Type2;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.search_repeater_unit;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = Repeater_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_SearchRepeaterAll(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type3 PKT = new PRTReceiver_Type3();                int psize = (byte)default_value_define.size_PRTReceiver_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.search_repeater_all;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = 0xff; //2010.3.24_moon All                PKT.Option2 = 0x00;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_ReadRepeaterPointAll(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type3 PKT = new PRTReceiver_Type3();                int psize = (byte)default_value_define.size_PRTReceiver_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.read_repeater_all;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = 0xff; //2010.3.24_moon All                PKT.Option2 = 0x00;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_WriteRepeaterOutputUNIT(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID, byte Repeater_ID, byte Repeater_Out_Value)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type3 PKT = new PRTReceiver_Type3();                int psize = (byte)default_value_define.size_PRTReceiver_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.write_repeater_output_unit;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = Repeater_ID;                PKT.Option2 = Repeater_Out_Value;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_ReadRepeaterInfoAll(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type3 PKT = new PRTReceiver_Type3();                int psize = (byte)default_value_define.size_PRTReceiver_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.read_repeater_info_all;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = 0xff; //2010.3.24_moon All                PKT.Option2 = 0x00;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_WriteRepeaterInfoUNIT(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID, byte Repeater_ID, byte Repeater_Out_Value)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type3 PKT = new PRTReceiver_Type3();                int psize = (byte)default_value_define.size_PRTReceiver_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.write_repeater_info_unit;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = Repeater_ID;                PKT.Option2 = Repeater_Out_Value;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        //2010.12.05, k.s.d, repeater information block write.        public byte[] CreatePKT_WriteRepeaterInfoAll(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID, byte Repeater_ID, RepeaterDataAll Repeater_Out_Value)        {            int psize = (byte)default_value_define.size_PRTReceiver_Type7;            byte[] PKT = new byte[psize + 1];            try            {                PKT[0] = (byte)default_value_define.prt_header_id;                PKT[1] = RPT_loop;                PKT[2] = TBD_ID;                PKT[3] = (byte)psize;                PKT[4] = (byte)prt_cmd_define.write_repeater_info_all;                PKT[5] = IVK_ID;                PKT[6] = RCV_ID;                PKT[7] = 0x01;                PKT[8] = 127;                //PKT[7] = Repeater_ID;                for (int i = 0; i < 127; i++)                {                    PKT[9 + i] = Repeater_Out_Value.Data[i].Repeater_Info;                }                //ret_byte_data = PKT;                PKT[psize] = DoCalcs(PKT, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return PKT;        }        public byte[] CreatePKT_ResetRepeaterUNIT(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID, byte Repeater_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type2 PKT = new PRTReceiver_Type2();                int psize = (byte)default_value_define.size_PRTReceiver_Type2;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.reset_repeater_unit;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = Repeater_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        // 중계기 모두 복구        public byte[] CreatePKT_ResetRepeaterAll(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type3 PKT = new PRTReceiver_Type3();                int psize = (byte)default_value_define.size_PRTReceiver_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.reset_repeater_all;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = 0xff; //2010.3.24_moon All                PKT.Option2 = 0x00;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        // cyim 2013.3.13        // 입력쓰기 테스트 이후 복구 버튼을 눌러서 중계기 별로 복구하도록 명령한다         // Function Overload : 중계기를 지정하여 복구        public byte[] CreatePKT_ResetRepeaterAll(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID, byte Repeater_ID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type3 PKT = new PRTReceiver_Type3();                int psize = (byte)default_value_define.size_PRTReceiver_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.reset_repeater_all;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = Repeater_ID; // cyim 2013.3.13                PKT.Option2 = 0x01;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_WriteRepeaterInputUNIT(byte RPT_loop, byte TBD_ID, byte IVK_ID, byte RCV_ID, byte Repeater_ID, byte Repeater_In_Value)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type3 PKT = new PRTReceiver_Type3();                int psize = (byte)default_value_define.size_PRTReceiver_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.TBD_ID = TBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.write_repeater_input_unit;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = Repeater_ID;                PKT.Option2 = Repeater_In_Value;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_SayHello_To_IOBoard(byte RPT_loop, byte IOBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTIO_Type1 PKT = new PRTIO_Type1();                int psize = (byte)default_value_define.size_PRTIO_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.BD_ID = IOBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.sayhello_to_ioboard;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_ReadIOBoardStatus(byte RPT_loop, byte IOBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTIO_Type1 PKT = new PRTIO_Type1();                int psize = (byte)default_value_define.size_PRTIO_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.BD_ID = IOBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.read_ioboard_status;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_WriteIOBoardStatus(byte RPT_loop, byte IOBD_ID, byte IVK_ID, byte RCV_ID, byte Brate, byte BD_Reset)        {            byte[] ret_byte_data = null;            try            {                PRTIO_Type3 PKT = new PRTIO_Type3();                int psize = (byte)default_value_define.size_PRTIO_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.BD_ID = IOBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.write_ioboard_status;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = Brate;                PKT.Option2 = BD_Reset;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_ReadIOBoardData(byte RPT_loop, byte IOBD_ID, byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTIO_Type1 PKT = new PRTIO_Type1();                int psize = (byte)default_value_define.size_PRTIO_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.BD_ID = IOBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.read_ioboard_data;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_WriteIOBoardData(byte RPT_loop, byte IOBD_ID, byte IVK_ID, byte RCV_ID, byte dbyte_outpoint, byte ubyte_outpoint)        {            byte[] ret_byte_data = null;            try            {                PRTIO_Type3 PKT = new PRTIO_Type3();                int psize = (byte)default_value_define.size_PRTIO_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.BD_ID = IOBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.write_ioboard_data;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = dbyte_outpoint;                PKT.Option2 = ubyte_outpoint;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_ReadIOBoardPointData(byte RPT_loop, byte IOBD_ID, byte IVK_ID, byte RCV_ID, byte POINT_ID)        {            byte[] ret_byte_data = null;            try            {                PRTIO_Type2 PKT = new PRTIO_Type2();                int psize = (byte)default_value_define.size_PRTIO_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.BD_ID = IOBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.read_ioboard_point_data;                PKT.IVK_ID = IVK_ID;                PKT.Option1 = POINT_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_WriteIOBoardPointData(byte RPT_loop, byte IOBD_ID, byte IVK_ID, byte RCV_ID, byte POINT_ID, byte POINT_STATUS)        {            byte[] ret_byte_data = null;            try            {                PRTIO_Type3 PKT = new PRTIO_Type3();                int psize = (byte)default_value_define.size_PRTIO_Type3;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = RPT_loop;                PKT.BD_ID = IOBD_ID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.write_ioboard_point_data;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.Option1 = (byte)(0x7F + POINT_ID);                PKT.Option2 = POINT_STATUS;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_SayHello_To_Demon(byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTDemon_Type1 PKT = new PRTDemon_Type1();                int psize = (byte)default_value_define.size_PRTDemon_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = 0x00;                PKT.BD_ID = 0x00;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.sayhello_to_demon;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_StartPolling(byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTDemon_Type1 PKT = new PRTDemon_Type1();                int psize = (byte)default_value_define.size_PRTDemon_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = 0x00;                PKT.BD_ID = 0x00;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.start_polling;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_StopPolling(byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTDemon_Type1 PKT = new PRTDemon_Type1();                int psize = (byte)default_value_define.size_PRTDemon_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = 0x00;                PKT.BD_ID = 0x00;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.stop_polling;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_ReadDemonStatus(byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTDemon_Type1 PKT = new PRTDemon_Type1();                int psize = (byte)default_value_define.size_PRTDemon_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = 0x00;                PKT.BD_ID = 0x00;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.read_demon_status;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        public byte[] CreatePKT_Notify_DBUpdated(byte IVK_ID, byte RCV_ID)        {            byte[] ret_byte_data = null;            try            {                PRTDemon_Type1 PKT = new PRTDemon_Type1();                int psize = (byte)default_value_define.size_PRTDemon_Type1;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = 0x00;                PKT.BD_ID = 0x00;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.notify_db_update;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        //누적카운트 읽기 명령 byte생성        public byte[] CreatePKT_ReadCommandStatus(byte IVK_ID, byte RCV_ID, int LoopNo, int BoardID, int repeaterID, int address, Char inOut            , Char CommandType1, Char CommandType2, Char SubType, Char ApplyRange, int Status, int commid)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type_CommandStatus PKT = new PRTReceiver_Type_CommandStatus();                int psize = 16;                PKT.head = (byte)default_value_define.prt_header_id;    //0x02                PKT.RPT_loop = (byte)LoopNo;        //ID 하위 바이트 (Loop 번호)                PKT.TBD_ID = (byte)BoardID;          //ID 상위 바이트 (통신보드 ID)                PKT.length = (byte)psize;   //0x0D, 전체 Packet 길이                PKT.cmd = (byte)prt_cmd_define.read_command_status;                PKT.IVK_ID = IVK_ID;  //Invoke ID                PKT.RCVR_ID = RCV_ID;                PKT.RepeaterID = (byte)repeaterID;                PKT.Address = (byte)address;                PKT.InOut = (byte)inOut;                PKT.CommId = (byte)commid;                PKT.CommandType1 = (byte)CommandType1;                PKT.CommandType2 = (byte)CommandType2;                PKT.SubType = (byte)SubType;                PKT.ApplyRange = (byte)ApplyRange;                PKT.Status = (byte)Status;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);      //cs            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        // cyim 2015.6.29 아날로그감지기 레벨값 쓰기 명령 프로토콜 추가        public byte[] CreatePKT_AnalogDetecterLevel_Write(byte IVK_ID, byte RCV_ID, int LoopNo, int BoardID, int repeaterID, byte Fault, byte PreFire, byte FireNight, byte FireDay)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type_AnalogDetecterLevel PKT = new PRTReceiver_Type_AnalogDetecterLevel();                int psize = (byte)default_value_define.size_PRTWrite_AnalogDetecter_Level;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = (byte)LoopNo;                PKT.TBD_ID = (byte)BoardID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.write_analogdetecter_level;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.RepeaterID = (byte)repeaterID;                PKT.Fault = Fault;                PKT.PreFire = PreFire;                PKT.FireNight = FireNight;                PKT.FireDay = FireDay;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        // cyim 2016.10.27 : 대용량 수신기 아날로그 감지기 트랜드 읽기        public byte[] CreatePKT_AnalogDetecterTrend_Read(byte IVK_ID, byte RCV_ID, int LoopNo, int BoardID, int repeaterID)        {            byte[] ret_byte_data = null;            try            {                PRTReceiver_Type_AnalogDetecterTrend PKT = new PRTReceiver_Type_AnalogDetecterTrend();                int psize = (byte)default_value_define.size_PRTReceiver_Type_AnalogDetecterTrend;                PKT.head = (byte)default_value_define.prt_header_id;                PKT.RPT_loop = (byte)LoopNo;                PKT.TBD_ID = (byte)BoardID;                PKT.length = (byte)psize;                PKT.cmd = (byte)prt_cmd_define.read_analogdetecter_trend;                PKT.IVK_ID = IVK_ID;                PKT.RCVR_ID = RCV_ID;                PKT.RepeaterID = (byte)repeaterID;                ret_byte_data = RawSerialize(PKT);                ret_byte_data[psize] = DoCalcs(ret_byte_data, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return ret_byte_data;        }        // LCH 2018.02.27 : 수정됨        // cyim 2016.10.28 : 대용량 수신기 아날로그 감지기 레벨 Block 쓰기        public byte[] CreatePKT_AnalogDetecterLevel_WriteAll(byte IVK_ID, byte RCV_ID, byte RPT_loop, byte TBD_ID, RepeaterDataAll AnalogDetecter)        {            int cnt = 0;            for (int i = 0; i < 127; i++)            {                if (AnalogDetecter.Data[i].AnalogDetecter == true)                {                    cnt++;                }            }            // 아날로그 감지기 개수에 따라 패킷길이가 틀려지는 가변 패킷이다!            // Length : 1개 라면 12, 2개 라면 17 (7 + 5n)            //int psize = (byte)(7 + 5 * cnt);            int psize = 9 + (5 * cnt);            byte[] PKT = new byte[psize + 1];            // 확장길이 구하는 방법            //int a = 300;            //byte b = ((byte)(a >> 0)); // 하위 : 0x2C            //byte c = ((byte)(a >> 8)); // 상위 : 0x01            try            {                PKT[0] = (byte)default_value_define.prt_header_id;                PKT[1] = RPT_loop;                PKT[2] = TBD_ID;                PKT[3] = 0x00; // 확장길이 사용 -> 300 이면 hex 값으로 0x012C 이며, 상위 0x01, 하위 0x2C 이다                PKT[4] = (byte)prt_cmd_define.write_analogdetecter_level_all;                PKT[5] = ((byte)(psize >> 0)); // 하위                PKT[6] = ((byte)(psize >> 8)); // 상위                PKT[7] = IVK_ID;                PKT[8] = RCV_ID;                cnt = 0;                for (int i = 0; i < 127; i++)                {                    if (AnalogDetecter.Data[i].AnalogDetecter == true)                    {                        int index = 9 + (5 * cnt);                        PKT[index + 0] = (byte)(i + 1);// 아날로그 감지기 아이디                        PKT[index + 1] = AnalogDetecter.Data[i].AnalogDetecterFault;                        PKT[index + 2] = AnalogDetecter.Data[i].AnalogDetecterPreFire;                        PKT[index + 3] = AnalogDetecter.Data[i].AnalogDetecterFireNight;                        PKT[index + 4] = AnalogDetecter.Data[i].AnalogDetecterFireDay;                        cnt++;                    }                }                PKT[psize] = DoCalcs(PKT, psize);            }            catch (Exception ex)            {                Util.UErrorMessage(ex, 0, 0);            }            return PKT;        }    }}
 |