예제 #1
0
        public void Init()
        {
            IOGroup.Children.Clear();

            #region Init BUS
            CTOP.Base.BackBusLeft busLeft = new CTOP.Base.BackBusLeft();
            IOGroup.Children.Add(busLeft);
            #endregion

            #region Init CPU
            cpu = new CPU();
            IOGroup.Children.Add(cpu);
            #endregion

            #region InitUI
            foreach (var node in Tool.UIlist)
            {
                if (node.m_typeCode == 2)
                {
                    DO15 temp = new DO15(node);
                    IOGroup.Children.Add(temp);

                    CTOP.Base.BackBusMiddle busMid = new CTOP.Base.BackBusMiddle();
                    IOGroup.Children.Add(busMid);
                }
                else if (node.m_typeCode == 22)
                {
                    DO8R temp = new DO8R(node);
                    IOGroup.Children.Add(temp);

                    CTOP.Base.BackBusMiddle busMid = new CTOP.Base.BackBusMiddle();
                    IOGroup.Children.Add(busMid);
                }
                else if (node.m_typeCode == 1)
                {
                    DI16 temp = new DI16(node);
                    IOGroup.Children.Add(temp);

                    CTOP.Base.BackBusMiddle busMid = new CTOP.Base.BackBusMiddle();
                    IOGroup.Children.Add(busMid);
                }
                else if (node.m_typeCode == 3)
                {
                    AI8 temp = new AI8(node);
                    IOGroup.Children.Add(temp);

                    CTOP.Base.BackBusMiddle busMid = new CTOP.Base.BackBusMiddle();
                    IOGroup.Children.Add(busMid);
                }
                else if (node.m_typeCode == 6)
                {
                    AO_4 temp = new AO_4(node);
                    IOGroup.Children.Add(temp);

                    CTOP.Base.BackBusMiddle busMid = new CTOP.Base.BackBusMiddle();
                    IOGroup.Children.Add(busMid);
                }
                else if (node.m_typeCode == 19)
                {
                    AI8C temp = new AI8C(node);
                    IOGroup.Children.Add(temp);

                    CTOP.Base.BackBusMiddle busMid = new CTOP.Base.BackBusMiddle();
                    IOGroup.Children.Add(busMid);
                }
            }
            if (Tool.UIlist.Count != 0)//有IO模块的需要添加结束导轨且删除原有的导轨
            {
                IOGroup.Children.RemoveAt(IOGroup.Children.Count - 1);
                CTOP.Base.BackBusRight busRight = new CTOP.Base.BackBusRight();
                IOGroup.Children.Add(busRight);
            }
            else//无IO模块的直接添加结束导轨
            {
                CTOP.Base.BackBusRight busRight = new CTOP.Base.BackBusRight();
                IOGroup.Children.Add(busRight);
            }
            #endregion
        }
예제 #2
0
        public void Update()
        {
            #region UpdateUI_IO

            /*查找界面上有多少IO,将数据list拆开分解后传入各IO模型界面类内部
             */
            foreach (var IO in IOGroup.Children)//界面全部刷新,全部遍历
            {
                if (IO is DO15)
                {
                    DO15 tIo = (DO15)IO;
                    foreach (var item in Tool.UIlist)
                    {
                        if (item.m_nodeID == tIo.IOData.m_nodeID)//找到后就退出内层遍历
                        {
                            //数据锁
                            if (tIo.IsUpdate)//从数据更新到UI
                            {
                                tIo.UpdateInputData(item);
                            }
                            else
                            {
                                tIo.UpdateAll();//从UI更新到数据
                            }
                            break;
                        }
                    }
                }
                else if (IO is DO8R)
                {
                    DO8R tIo = (DO8R)IO;
                    foreach (var item in Tool.UIlist)
                    {
                        if (item.m_nodeID == tIo.IOData.m_nodeID)//找到后就退出内层遍历
                        {
                            //数据锁
                            if (tIo.IsUpdate)//从数据更新到UI
                            {
                                tIo.UpdateInputData(item);
                            }
                            else//从UI更新到数据
                            {
                                tIo.UpdateAll();
                            }
                            break;
                        }
                    }
                }
                else if (IO is DI16)
                {
                    DI16 tIo = (DI16)IO;
                    foreach (var item in Tool.UIlist)
                    {
                        if (item.m_nodeID == tIo.IOData.m_nodeID)//找到后就退出内层遍历
                        {
                            tIo.UpdateInputData(item);
                            break;
                        }
                    }
                }
                else if (IO is AO_4)
                {
                    AO_4 tIo = (AO_4)IO;
                    foreach (var item in Tool.UIlist)
                    {
                        if (item.m_nodeID == tIo.IOData.m_nodeID)//找到后就退出内层遍历
                        {
                            tIo.UpdateInputData(item);
                            break;
                        }
                    }
                }
                else if (IO is AI8)
                {
                    AI8 tIo = (AI8)IO;
                    foreach (var item in Tool.UIlist)
                    {
                        if (item.m_nodeID == tIo.IOData.m_nodeID)//找到后就退出内层遍历
                        {
                            tIo.UpdateInputData(item);
                            break;
                        }
                    }
                }
                else if (IO is AI8C)
                {
                    AI8C tIo = (AI8C)IO;
                    foreach (var item in Tool.UIlist)
                    {
                        if (item.m_nodeID.ToString() == tIo.modelView.NodeID) //找到后就退出内层遍历
                        //不能再加上是否在线的标志,否则掉线后无法更新UI
                        {
                            //for (int i = 0; i < item.m_DataAI.Count; i++)
                            //{
                            //    item.m_DataAI[i] = T;
                            //}

                            tIo.UpdateInputData(item);
                            break;
                        }
                    }
                }
            }
            #endregion
        }