示例#1
0
文件: Utils.cs 项目: PeterSev/Work
 public SignalParameters(uint _port, BoardSignal _signal, SIGNAL_SECTION _signal_type, ushort _delay)
 {
     port        = _port;
     delay       = _delay;
     signal      = _signal;
     signal_type = _signal_type;
     bPortbusy   = false;
 }
示例#2
0
 public GroupTestSignal(BoardSignal _signal, GroupSignals _group, int _index)
 {
     signal = _signal;
     group  = _group;
     index  = _index;
 }
示例#3
0
        public TestBoard openBoardXML(StandSignals standSignals, string XMLname)
        {
            BoardSignal  boardSignal  = null;
            BoardSignals boardSignals = new BoardSignals();
            //BoardConfig boardConfig = null;
            BoardConfig   boardConfig = new BoardConfig();
            BoardScenario scenario    = null;
            Periodic      periodic    = new Periodic();
            Manual        manual      = new Manual();
            Test          runTest     = new Test();
            //GroupSignals groupSignal = null;

            string commentString   = null;
            string imageLinkString = null;
            string str;

            bool bSectionSet    = false;
            bool bSectionGet    = false;
            bool bSectionConfig = false;

            //string name;
            string paramName     = "";
            string setSourceName = "";
            string getSourceName = "";



            string boardSignalName = null;
            string boardRSName     = null;

            UInt16 delay        = 1000;
            ushort numBytes     = 0;
            byte   marker       = 0x0;
            byte   setIndexByte = 0;
            byte   setIndexBit  = 0;
            byte   getIndexByte = 0;
            byte   getIndexBit  = 0;

            bool   bSetValueON  = true;
            bool   bGetValueON  = true;
            UInt32 uiSetValueON = 0xffffffff;
            UInt32 uiGetValueON = 0xffffffff;
            UInt32 uiGetMAX     = 0x0;
            UInt32 uiGetMIN     = 0xffffffff;

            ushort       setSizeByte    = 0;
            ushort       getSizeByte    = 0;
            UInt32       uiSetValueOFF  = 0xffffffff;
            TYPERSSIGNAL setRSignalType = TYPERSSIGNAL.NULL;
            TYPERSSIGNAL getRSignalType = TYPERSSIGNAL.NULL;
            //TYPERSSIGNAL rsSignalType = TYPERSSIGNAL.NULL;

            XmlTextReader reader        = new XmlTextReader(XMLname);
            Buttons       buttonsObj    = new Buttons();
            SysButton     sysButton     = null;
            double        dI27MAX       = 999;
            double        dI15MAX       = 999;
            double        dI12MAX       = 999;
            double        dI05MAX       = 999;
            double        dI03MAX       = 999;
            string        sysButtonName = string.Empty;

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XmlNodeType.Element:     // Узел является элементом.

                    if (reader.Name == "RS")
                    {
                        reader.MoveToNextAttribute();
                        if (reader.Name == "NAME")
                        {
                            if (bSectionConfig)
                            {
                                boardRSName = reader.Value;
                            }
                        }
                        setRSignalType = TYPERSSIGNAL.NULL;
                        getRSignalType = TYPERSSIGNAL.NULL;
                    }


                    paramName = reader.Name;
                    str       = "<" + reader.Name + ">";
                    if (reader.Name == "SIGNAL")
                    {
                        getSourceName = null;
                        setSourceName = null;

                        commentString   = string.Empty;
                        imageLinkString = string.Empty;

                        dI27MAX = 999;
                        dI15MAX = 999;
                        dI12MAX = 999;
                        dI05MAX = 999;
                        dI03MAX = 999;
                        reader.MoveToNextAttribute();
                        str += " " + reader.Name + "='" + reader.Value + "'" + ">";
                        if (reader.Name == "NAME")
                        {
                            //baseSignal = new BaseSignal(reader.Value);
                            boardSignalName = reader.Value;
                        }
                    }

                    //Console.Write("<" + reader.Name);
                    else
                    {
                        // while (reader.MoveToNextAttribute()) // Чтение атрибутов.
                        //     str += " " + reader.Name + "='" + reader.Value + "'" + ">";
                    }


                    if (reader.Name == "BUTTON")
                    {
                        reader.MoveToNextAttribute();
                        if (reader.Name == "NAME")
                        {
                            //baseSignal = new BaseSignal(reader.Value);
                            sysButtonName = reader.Value;
                            sysButton     = new SysButton(sysButtonName);
                            useSignalType = TYPESIGUSING.BUTTON;
                        }
                    }

                    if (reader.Name == "SET")
                    {
                        bSectionSet = true;
                    }
                    if (reader.Name == "GET")
                    {
                        bSectionGet   = true;
                        getSourceName = "";
                    }

                    if (reader.Name == "CONFIG")
                    {
                        bSectionConfig = true;
                    }

                    if (reader.Name == "PERIODIC")
                    {
                        useSignalType = TYPESIGUSING.PERIODIC;
                    }

                    if (reader.Name == "TEST")
                    {
                        useSignalType = TYPESIGUSING.TEST;
                    }

                    if (reader.Name == "MANUAL")
                    {
                        useSignalType = TYPESIGUSING.MANUAL;
                    }

                    str += ">";
                    //lstBxXML.Items.Add(str);
                    break;

                case XmlNodeType.Text:     // Вывести текст в каждом элементе.
                    str = reader.Value;

                    //lstBxXML.Items.Add(str);
                    //Console.WriteLine(reader.Value);

                    if (paramName == "SOURCE")
                    {
                        if (bSectionSet)
                        {
                            setSourceName = reader.Value;
                        }
                        if (bSectionGet)
                        {
                            getSourceName = reader.Value;
                        }
                    }


                    if (paramName == "VALUEOFF")
                    {
                        uint uValue = 0xffffffff;
                        if (str2uint(reader.Value, out uValue))
                        {
                            if (bSectionSet)
                            {
                                uiSetValueOFF = uValue;
                            }
                        }
                    }

                    if (paramName == "MIN")
                    {
                        uint uValue = 0;
                        if (str2uint(reader.Value, out uValue))
                        {
                            if (bSectionGet)
                            {
                                getRSignalType = TYPERSSIGNAL.ANALOG;
                                uiGetMIN       = uValue;
                            }
                        }
                    }

                    if (paramName == "MAX")
                    {
                        uint uValue = 0;
                        if (str2uint(reader.Value, out uValue))
                        {
                            if (bSectionGet)
                            {
                                getRSignalType = TYPERSSIGNAL.ANALOG;
                                uiGetMAX       = uValue;
                            }
                        }
                    }



                    if (paramName == "VALUEON")
                    {
                        bool bValue;
                        if (bool.TryParse(reader.Value, out bValue))
                        {
                            if (bSectionSet)
                            {
                                setRSignalType = TYPERSSIGNAL.BIT;
                                bSetValueON    = bValue;
                            }
                            if (bSectionGet)
                            {
                                getRSignalType = TYPERSSIGNAL.BIT;
                                bGetValueON    = bValue;
                            }
                        }
                        else
                        {
                            uint uValue = 0;
                            if (str2uint(reader.Value, out uValue))
                            {
                                if (bSectionSet)
                                {
                                    setRSignalType = TYPERSSIGNAL.ANALOG;
                                    uiSetValueON   = uValue;
                                }
                                if (bSectionGet)
                                {
                                    uiGetValueON = uValue;
                                }
                            }
                        }
                    }

                    if (paramName == "SIZEBYTE")
                    {
                        ushort val;
                        if (ushort.TryParse(reader.Value, out val))
                        {
                            if (bSectionSet)
                            {
                                setSizeByte = val;
                            }
                            if (bSectionGet)
                            {
                                getSizeByte = val;
                            }
                        }
                    }

                    if (paramName == "INDEXBYTE")
                    {
                        byte index;
                        if (byte.TryParse(reader.Value, out index))
                        {
                            if (bSectionSet)
                            {
                                setIndexByte = index;
                            }
                            if (bSectionGet)
                            {
                                getIndexByte = index;
                            }
                        }
                    }


                    if (paramName == "INDEXBIT")
                    {
                        byte index;
                        if (byte.TryParse(reader.Value, out index))
                        {
                            if (bSectionSet)
                            {
                                setIndexBit = index;
                            }
                            if (bSectionGet)
                            {
                                getIndexBit = index;
                            }
                        }
                    }


                    if (paramName == "COMMENT")
                    {
                        commentString = reader.Value;
                    }

                    if (paramName == "IMAGELINK")
                    {
                        imageLinkString = reader.Value;
                    }

                    if (paramName == "DELAY")
                    {
                        UInt16 _delay;
                        if (UInt16.TryParse(reader.Value, out _delay))
                        {
                            delay = _delay;
                        }
                    }


                    if (paramName == "RUN")
                    {
                        //runTestName = reader.Value;
                        //BoardSignal _boardSignal = getBoardSignal(runTestName, boardSignals);
                        BoardSignal _boardSignal = getBoardSignal(reader.Value, boardSignals);
                        if (_boardSignal != null)
                        {
                            switch (useSignalType)
                            {
                            case TYPESIGUSING.PERIODIC:
                                periodic.listRun.Add(_boardSignal);
                                break;

                            case TYPESIGUSING.TEST:
                                runTest.listRun.Add(_boardSignal);
                                break;

                            case TYPESIGUSING.MANUAL:
                                manual.listRun.Add(_boardSignal);
                                break;

                            case TYPESIGUSING.BUTTON:
                                sysButton.listRun.Add(_boardSignal);
                                break;
                            }
                        }
                    }

                    if (paramName == "D27MAX")
                    {
                        double dValue = 0;
                        if (str2double(reader.Value, out dValue))
                        {
                            dI27MAX = dValue;
                        }
                    }

                    if (paramName == "D15MAX")
                    {
                        double dValue = 0;
                        if (str2double(reader.Value, out dValue))
                        {
                            dI15MAX = dValue;
                        }
                    }

                    if (paramName == "D12MAX")
                    {
                        double dValue = 0;
                        if (str2double(reader.Value, out dValue))
                        {
                            dI12MAX = dValue;
                        }
                    }

                    if (paramName == "D5MAX")
                    {
                        double dValue = 0;
                        if (str2double(reader.Value, out dValue))
                        {
                            dI05MAX = dValue;
                        }
                    }

                    if (paramName == "D3MAX")
                    {
                        double dValue = 0;
                        if (str2double(reader.Value, out dValue))
                        {
                            dI03MAX = dValue;
                        }
                    }



                    /*
                     * if (paramName == "VALUE")
                     * {
                     *
                     * }
                     *
                     *
                     * paramName = "";
                     */
                    if (paramName == "NUMBYTES")
                    {
                        ushort _numBytes;
                        if (ushort.TryParse(reader.Value, out _numBytes))
                        {
                            if (bSectionConfig)
                            {
                                numBytes = _numBytes;
                            }
                        }
                    }

                    if (paramName == "MARKER")
                    {
                        byte _marker;
                        if (byte.TryParse(reader.Value.Substring(2), System.Globalization.NumberStyles.HexNumber, null, out _marker))
                        {
                            if (bSectionConfig)
                            {
                                marker = _marker;
                            }
                        }
                    }

                    break;

                case XmlNodeType.EndElement:     // Вывести конец элемента.
                    //Console.Write("</" + reader.Name);
                    if (reader.Name == "CONFIG")
                    {
                        bSectionConfig = false;
                    }

                    if (reader.Name == "RS")
                    {
                        if (bSectionConfig)
                        {
                            BaseRS baseRS;
                            if ((baseRS = getBaseRS(standSignals, boardRSName)) != null)
                            {
                                GroupSignals groupRS = new GroupSignals(baseRS.Name, numBytes);
                                if (groupRS.valueTX.Length > 0)
                                {
                                    if (marker != 0xff)
                                    {
                                        groupRS.valueTX[0] = marker;
                                    }
                                }
                                groupRS.valueRX = new byte[64];
                                baseRS.Group    = groupRS;
                                BoardRS boardRS = new BoardRS(boardRSName, numBytes, marker);
                                boardConfig.listBoardRS.Add(boardRS);
                            }
                        }
                    }


                    if (reader.Name == "SIGNAL")
                    {
                        bool err = false;
                        iSet set = null;
                        iGet get = null;
                        if (setSourceName != null)
                        {
                            if (setSourceName.Substring(0, 2) != "RS")
                            {
                                BaseSignal baseSignal = getBaseSignal(standSignals, setSourceName);
                                if (baseSignal != null)
                                {
                                    switch (baseSignal.type)
                                    {
                                    case SIGNALTYPE.LOGIC:
                                        set = new Set_STAND_BIT(baseSignal, commentString, imageLinkString);
                                        break;

                                    case SIGNALTYPE.ARRAY:
                                        set = new Set_ARRAY(baseSignal, commentString, imageLinkString);
                                        break;

                                    case SIGNALTYPE.ANALOG:
                                        set = new Set_STAND_ANALOG(baseSignal, uiSetValueON, commentString, imageLinkString, uiSetValueOFF);
                                        break;
                                    }
                                }
                                else
                                {
                                    err = true;
                                }
                            }
                            else
                            {
                                //BaseRS baseRS=getBaseRS
                                BaseRS  baseRS  = getBaseRS(standSignals, setSourceName);
                                BoardRS boardRS = getBoardRS(boardConfig, setSourceName);
                                if (setRSignalType == TYPERSSIGNAL.BIT)
                                {
                                    set = new Set_RS_BIT(baseRS, boardRS, bSetValueON, setIndexByte, setIndexBit, commentString, imageLinkString);
                                }
                                else
                                {
                                    if (setRSignalType == TYPERSSIGNAL.ANALOG)
                                    {
                                        set = new Set_RS_ANALOG(baseRS, boardRS, uiSetValueON, setSizeByte, setIndexByte, commentString, imageLinkString, uiSetValueOFF);
                                    }
                                    //baseRS, boardRS, bSetValueON, setIndexByte, setIndexBit, commentString, imageLinkString);
                                }
                            }
                        }
                        if (getSourceName != null)
                        {
                            if (getSourceName.Length >= 2)
                            {
                                if (getSourceName.Substring(0, 2) != "RS")
                                {
                                    BaseSignal baseSignal = getBaseSignal(standSignals, getSourceName);
                                    if (baseSignal != null)
                                    {
                                        switch (baseSignal.type)
                                        {
                                        case SIGNALTYPE.LOGIC:
                                            get = new Get_STAND_BIT(baseSignal);
                                            break;

                                        case SIGNALTYPE.ARRAY:
                                            get = new Get_ARRAY(baseSignal);
                                            break;

                                        case SIGNALTYPE.ANALOG:
                                            get = new Get_STAND_ANALOG(baseSignal, uiGetMIN, uiGetMAX);
                                            break;

                                        default:
                                            get = new Get_ARRAY(null);
                                            break;
                                        }
                                    }
                                }
                                else
                                {
                                    BaseRS  baseRS  = getBaseRS(standSignals, getSourceName);
                                    BoardRS boardRS = getBoardRS(boardConfig, getSourceName);
                                    if (getRSignalType == TYPERSSIGNAL.BIT)
                                    {
                                        get = new Get_RS_BIT(baseRS, boardRS, bGetValueON, getIndexByte, getIndexBit);
                                    }
                                    else
                                    {
                                        if (getRSignalType == TYPERSSIGNAL.ANALOG)
                                        {
                                            get = new Get_RS_ANALOG(baseRS, uiGetMIN, uiGetMAX, getSizeByte, getIndexByte);
                                        }
                                    }
                                }
                            }
                            if (get == null)
                            {
                                get = new Get_ARRAY(null);
                            }
                        }
                        if (!err)
                        {
                            boardSignal = new BoardSignal(boardSignalName, set, get, delay, dI27MAX, dI15MAX, dI12MAX, dI05MAX, dI03MAX);
                        }
                        else
                        {
                            boardSignal = null;
                        }
                        boardSignals.listBoardSignals.Add(boardSignal);


                        //boardSignals = new BoardSignals();
                    }

                    if (reader.Name == "BUTTON")
                    {
                        if (sysButton != null)
                        {
                            buttonsObj.listButtons.Add(sysButton);
                            useSignalType = TYPESIGUSING.NULL;
                            sysButton     = null;
                        }
                    }

                    if (reader.Name == "SET")
                    {
                        bSectionSet = false;
                    }
                    if (reader.Name == "GET")
                    {
                        bSectionGet = false;
                    }

                    str = "</" + reader.Name + ">";
                    //lstBxXML.Items.Add(str);

                    //Console.WriteLine(">");
                    //lstBxXML.Items.Add(">");
                    break;
                }
            }


            scenario = new BoardScenario(periodic, runTest, manual, buttonsObj);

            testBoard = new TestBoard(boardConfig, boardSignals, scenario);

            return(testBoard);
        }
示例#4
0
        private void CreateAndSendSignal(BoardSignal signal,int index,SET_OR_GET set_or_get)
        {
            if (bCommandBusy)
            {
                return;
            }
            ushort addr     = 0;
            ushort cnt      = 0;
            uint   port     = 0;
            uint   groupVal = 0;

            byte[] buf = null;
            Udp    udp = null;

            //lastSignal1 = signal;

            switch (set_or_get)
            {
            case SET_OR_GET.SET:
            {
                //if (signal.set.source == null) return;
                addr = (ushort)signal.set.source.address;
                cnt  = signal.set.sizebyte;
                port = signal.set.source.port;
                buf  = signal.set.source.group.valueTX;

                //собираем из буфера группы число
                for (int i = 0; i < buf.Length; i++)
                {
                    groupVal += (uint)(buf[i] << (8 * i));
                }

                //делаем ИЛИ с отправляемым сигналом
                groupVal |= signal.set.valueon;
            }
            break;

            case SET_OR_GET.GET:
            {
                addr = (ushort)signal.get.source.address;
                cnt  = signal.get.sizebyte;
                port = signal.get.source.port;
                buf  = signal.get.source.group.valueTX;

                //собираем из буфера группы число
                for (int i = 0; i < buf.Length; i++)
                {
                    groupVal += (uint)(buf[i] << (8 * i));
                }

                //делаем ИЛИ с отправляемым сигналом
                //groupVal |= signal.get.valueon;
            }
            break;

            case SET_OR_GET.DESET:
            {
                addr = (ushort)signal.set.source.address;
                cnt  = signal.set.sizebyte;
                port = signal.set.source.port;
                buf  = signal.set.source.group.valueTX;

                //собираем из буфера группы число
                for (int i = 0; i < buf.Length; i++)
                {
                    groupVal += (uint)(buf[i] << (8 * i));
                }

                //делаем И с отправляемым сигналом на выключение
                groupVal &= signal.set.valueoff;
            }
            break;
            }


            //выбираем порт для отправки
            if (port == uint.Parse(_frmMainWindow._frmSettings.txtIPPort1.Text))
            {
                udp = udpPU; lastSignal1 = signal;
            }
            if (port == uint.Parse(_frmMainWindow._frmSettings.txtIPPort2.Text))
            {
                udp = udpPK; lastSignal2 = signal;
            }
            if (port == uint.Parse(_frmMainWindow._frmSettings.txtIPPort3.Text))
            {
                udp = udpPTVC; lastSignal3 = signal;
            }

            //собираем обратно получившееся значение в групповой буфер
            for (int i = 0; i < buf.Length; i++)
            {
                buf[i] = (byte)((groupVal >> (8 * i)) & 0xFF);
            }

            //создаем команду с определенным адресом и количеством байт данных
            Command com = new Command(addr,cnt,set_or_get,index,CommandType.TYPICAL);

            //заполняем буфер данных значением группы
            com.data = buf;

            //отображаем уходящий пакет на форме
            ShowBuf(com.GetCommandByteBuf(),BUF_TO_SHOW.TX);

            //команда уходит
            if (udp != null)
            {
                bCommandBusy = true;
                udp.SendCommand(com);
            }
            else
            {
                MessageBox.Show("Проверьте соединение!","7600",MessageBoxButtons.OK,MessageBoxIcon.Error); return;
            }

            while (bCommandBusy)
            {
                this.Cursor = Cursors.AppStarting; Application.DoEvents();
            }
            this.Cursor = Cursors.Default;
        }