Beispiel #1
0
        public static void BitsToData()
        {
            foreach (var typeBool in TypeBools)
            {
                //PlcWordModel targetWord = new PlcWordModel();//new
                PlcBitModel targetBit = new PlcBitModel();
                targetBit = BitMap.Find(m => m.DataName == typeBool.Name).Bit;
                if (targetBit.MemArea == "W" && targetBit.WordAddress == 1 && targetBit.BitAddress == 15 && targetBit.Value == 1)
                {
                    ;
                }


                typeBool.SetValue(PlcBits.Find(b => b.MemArea == targetBit.MemArea &&
                                               b.WordAddress == targetBit.WordAddress &&
                                               b.BitAddress == targetBit.BitAddress).Value);

                //targetWord = PlcWRWords.FirstOrDefault(w => w.MemoryArea == targetBit.MemArea && w.WordAddress == targetBit.WordAddress);//new
                //if (targetWord!=null)
                //{
                //    typeBool.SetValue(targetWord.plcBits.Find(b => b.BitAddress == targetBit.BitAddress).Value);//new
                //}
                //else
                //{
                //    targetWord=PlcHRWords.FirstOrDefault(w => w.MemoryArea == targetBit.MemArea && w.WordAddress == targetBit.WordAddress);
                //    typeBool.SetValue(targetWord.plcBits.Find(b => b.BitAddress == targetBit.BitAddress).Value);//new
                //}
            }
        }
Beispiel #2
0
        public static void UpdateStringToWords(PlcMemArea memArea, SortedList <int, string> sList)
        {
            string MemArea = null;
            List <PlcWordModel> listInUse    = new List <PlcWordModel>();
            List <PlcBitModel>  bitListInUse = new List <PlcBitModel>();

            switch (memArea)
            {
            case PlcMemArea.WR:
                listInUse = PlcDataMapper.PlcWRWords;
                MemArea   = "W";
                break;

            case PlcMemArea.HR:
                listInUse = PlcDataMapper.PlcHRWords;
                MemArea   = "H";
                break;

            case PlcMemArea.DM:
                listInUse = PlcDataMapper.PlcDMWords;
                MemArea   = "D";
                break;

            case PlcMemArea.CIO:
                break;

            case PlcMemArea.WR_bit:
                bitListInUse = PlcDataMapper.PlcBits;
                MemArea      = "W";
                break;

            case PlcMemArea.HR_bit:
                bitListInUse = PlcDataMapper.PlcBits;
                MemArea      = "H";
                break;

            case PlcMemArea.AR:
                break;

            default:
                //listInUse = new List<PlcWordModel>();
                break;
            }

            if (memArea == PlcMemArea.DM)
            {
                foreach (var addrStr in sList)
                {
                    int address = addrStr.Key;
                    for (int i = 0; i < addrStr.Value.Length / 4; i++)
                    {
                        listInUse.Find(x => x.WordAddress == address)
                        .SetValue(addrStr.Value.Substring(4 * i, 4));
                        address++;
                    }
                }
            }
            if (memArea == PlcMemArea.HR_bit || memArea == PlcMemArea.WR_bit)
            {
                foreach (var addrStr in sList)
                {
                    int wordAddress = addrStr.Key;
                    //int bitAddress = 0;
                    int    bitAddress = 15;//WRstr format is MSB->LSB
                    string binStr     = BinaryConvert16(addrStr.Value);
                    for (int i = 0; i < binStr.Length; i++)
                    {
                        PlcBitModel tempBit = PlcDataMapper.PlcBits.FirstOrDefault(x => x.MemArea == MemArea && x.WordAddress == wordAddress &&
                                                                                   x.BitAddress == bitAddress);
                        if (tempBit != null)
                        {
                            tempBit.SetValue(binStr.Substring(i, 1));
                        }
                        bitAddress--;
                        //if (bitAddress==16)
                        if (bitAddress == -1)
                        {
                            wordAddress++;
                            //bitAddress = 0;
                            bitAddress = 15;
                        }
                    }
                }
            }

            //  if (memArea == PlcMemArea.DM)
            // {


            //for (int i = 0; i < S.Length / 4 - 1; i++)
            //{
            //    PlcDataMapper.PlcDMWords.Find(x => x.MemoryArea == MemArea && x.WordAddress == OmronFINsClass.StartingId_DM + i)
            //        .SetValue(S.Substring(4 * i, 4));
            //    retList.Add(new PlcWordModel(memArea, i, S.Substring(4 + 4 * i, 4)));
            //}
            // }
            //else if (memArea == PlcMemArea.HR)
            //{
            //    foreach (var addrStr in sList)
            //    {
            //        int address = addrStr.Key;
            //        for (int i = 0; i < addrStr.Value.Length / 4; i++)
            //        {
            //            PlcDataMapper.PlcHRWords.Find(x => x.WordAddress == address)
            //                .SetValue(addrStr.Value.Substring(4 * i, 4));
            //            address++;
            //        }
            //    }
            //    //for (int i = 0; i < S.Length / 4 - 1; i++)
            //    //{
            //    //    PlcDataMapper.PlcHRWords.Find(x => x.MemoryArea == MemArea && x.WordAddress == OmronFINsClass.StartingId_HR + i)
            //    //        .SetValue(S.Substring(4 * i, 4));
            //    //    //retList.Add(new PlcWordModel(memArea, i, S.Substring(4 + 4 * i, 4)));
            //    //}
            //}
            //else if (memArea == PlcMemArea.WR)
            //{
            //    foreach (var addrStr in sList)
            //    {
            //        int address = addrStr.Key;
            //        for (int i = 0; i < addrStr.Value.Length / 4; i++)
            //        {
            //            PlcDataMapper.PlcWRWords.Find(x => x.WordAddress == address)
            //                .SetValue(addrStr.Value.Substring(4 * i, 4));
            //            address++;
            //        }
            //    }
            //}
        }