예제 #1
0
        private bool IsTIO_Different(SRZ_CPU_Struct _CPU)
        {
            bool bRtn = false;

            for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
            {
                if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.TIO_8888)
                {
                    if (_CPU.Module_List[nModule].IsDifferent() == true)
                    {
                        bRtn = true;
                        break;
                    }
                }
            }
            return(bRtn);
        }
예제 #2
0
        private int IsDIO_Different(SRZ_CPU_Struct _CPU)
        {
            int nRtn          = 0;
            int nDioModuleCnt = 0;

            for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
            {
                if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.DIO)
                {
                    nDioModuleCnt += 1;
                    if (_CPU.Module_List[nModule].IsDifferent() == true)
                    {
                        nRtn = nDioModuleCnt;
                        break;
                    }
                }
            }
            return(nRtn);
        }
예제 #3
0
        private bool CheckDIO_Write(ref int[] nMagneticSetValue, bool bTop, int nDioModule)
        {
            bool           bRtn         = false;
            int            nModuleIndex = 0;
            SRZ_CPU_Struct _CPU         = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];

            for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
            {
                if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.DIO)
                {
                    nModuleIndex += 1;
                }
                else
                {
                    continue;
                }

                if (nDioModule == nModuleIndex)
                {
                    if (bTop == true)
                    {
                        nMagneticSetValue[3] = _CPU.Module_List[nModule].Set_Value[0].Value == 0 ? 0 : 1;
                        nMagneticSetValue[2] = _CPU.Module_List[nModule].Set_Value[1].Value == 0 ? 0 : 1;
                        nMagneticSetValue[1] = _CPU.Module_List[nModule].Set_Value[2].Value == 0 ? 0 : 1;
                        nMagneticSetValue[0] = _CPU.Module_List[nModule].Set_Value[3].Value == 0 ? 0 : 1;
                    }
                    else
                    {
                        nMagneticSetValue[3] = _CPU.Module_List[nModule].Set_Value[4].Value == 0 ? 0 : 1;
                        nMagneticSetValue[2] = _CPU.Module_List[nModule].Set_Value[5].Value == 0 ? 0 : 1;
                        nMagneticSetValue[1] = _CPU.Module_List[nModule].Set_Value[6].Value == 0 ? 0 : 1;
                        nMagneticSetValue[0] = _CPU.Module_List[nModule].Set_Value[7].Value == 0 ? 0 : 1;
                    }

                    bRtn = true;
                    break;
                }
            }

            return(bRtn);
        }
예제 #4
0
        private void SetDioCur(int[] nMagneticSetValue, bool bTop, int nDioModule)
        {
            int            nModuleIndex = 0;
            SRZ_CPU_Struct _CPU         = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];

            for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
            {
                if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.DIO)
                {
                    nModuleIndex += 1;
                }
                else
                {
                    continue;
                }

                if (nDioModule == nModuleIndex)
                {
                    if (bTop == true)
                    {
                        _CPU.Module_List[nModule].Set_Value[0].CurValue = nMagneticSetValue[3];
                        _CPU.Module_List[nModule].Set_Value[1].CurValue = nMagneticSetValue[2];
                        _CPU.Module_List[nModule].Set_Value[2].CurValue = nMagneticSetValue[1];
                        _CPU.Module_List[nModule].Set_Value[3].CurValue = nMagneticSetValue[0];
                    }
                    else
                    {
                        _CPU.Module_List[nModule].Set_Value[4].CurValue = nMagneticSetValue[3];
                        _CPU.Module_List[nModule].Set_Value[5].CurValue = nMagneticSetValue[2];
                        _CPU.Module_List[nModule].Set_Value[6].CurValue = nMagneticSetValue[1];
                        _CPU.Module_List[nModule].Set_Value[7].CurValue = nMagneticSetValue[0];
                    }
                    break;
                }
            }
        }
예제 #5
0
        private void Sequence_SRZ()
        {
            if (SRZ_IO_List.SRZ_Cpu.Count <= 0)
            {
                return;
            }

            int    nSeqNum = _SeqItem.SeqNum;
            int    nRet    = 0;
            string strBuf  = "";

            float[] fGetDatas         = _SeqItem.GetDatas;
            float[] fGetOutDatas      = _SeqItem.GetOutDatas;
            int[]   nGetDatas         = _SeqItem.nGetDatas;
            int[]   nSetDatas         = _SeqItem.SetDatas;
            int[]   nMagneticSetValue = _SeqItem.MagneticSetValue;
            switch (nSeqNum)
            {
            case 0:
            {                             //INIT
                for (int i = 0; i < fGetDatas.Length; i++)
                {
                    fGetDatas[i] = 0;
                }
                for (int i = 0; i < nSetDatas.Length; i++)
                {
                    nSetDatas[i] = 0;
                }
                nSeqNum = 100;
            } break;

            case 100:
            {                             //ATUO:리모트로 변경한다.
                nRet = m_RKC.SeqWriteData(_SeqItem.CpuIndex, "J1", ref nSetDatas, nSetDatas.Length, 1, 1);
                if (nRet > 0)
                {
                    _SeqItem.CpuIndex += 1;
                    if (_SeqItem.CpuIndex >= SRZ_IO_List.SRZ_Cpu.Count)
                    {
                        _SeqItem.CpuIndex = 0;
                        nSeqNum           = 200;
                    }
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("SRZ Auto Setting Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            case 200:
            {                             //RUN 시킨다.
                nRet = m_RKC.SeqSRZRun(_SeqItem.CpuIndex, true);
                if (nRet > 0)
                {
                    _SeqItem.CpuIndex += 1;
                    if (_SeqItem.CpuIndex >= SRZ_IO_List.SRZ_Cpu.Count)
                    {
                        _SeqItem.CpuIndex = 0;
                        nSeqNum           = 300;
                    }
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("Write Run Start Command Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            case 300:                    // 상태 변경 체크 (TIO, DIO)
            {
                //DateTime dt = DateTime.Now;
                //TIO 변경 체크.
                if (_SeqItem.CpuIndex >= SRZ_IO_List.SRZ_Cpu.Count)
                {                                //끝..
                    _SeqItem.CpuIndex = 0;
                    // DIO 변경 체크
                    nSeqNum = 900;
                }
                else
                {                                //셋팅..
                    while (_SeqItem.CpuIndex < SRZ_IO_List.SRZ_Cpu.Count)
                    {
                        int            srzDataIndex = 0;
                        SRZ_CPU_Struct _CPU         = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];
                        if (IsTIO_Different(_CPU) == true)
                        {
                            for (int i = 0; i < nSetDatas.Length; i++)
                            {
                                nSetDatas[i] = 0;
                            }

                            for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
                            {
                                if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.TIO_8888)
                                {
                                    for (int nIO = 0; nIO < _CPU.Module_List[nModule].Set_Value.Count; nIO++)
                                    {
                                        nSetDatas[srzDataIndex++] = (int)_CPU.Module_List[nModule].Set_Value[nIO].Value;
                                    }
                                }
                            }
                        }
                        if (srzDataIndex != 0)
                        {
                            nSeqNum = 400;
                            break;
                        }
                        else
                        {
                            _SeqItem.CpuIndex += 1;
                        }
                    }
                }
                //long nTime = (dt.Ticks - DateTime.Now.Ticks) / 10000;
                //Console.WriteLine(nTime);
            } break;

            case 400:
            {                             //Set Temp
                nRet = m_RKC.SeqWriteData(_SeqItem.CpuIndex, "S1", ref nSetDatas, nSetDatas.Length, 1, 7);
                if (nRet > 0)
                {
                    int            srzDataIndex = 0;
                    SRZ_CPU_Struct _CPU         = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];
                    for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
                    {
                        if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.TIO_8888)
                        {
                            for (int nIO = 0; nIO < _CPU.Module_List[nModule].Set_Value.Count; nIO++)
                            {
                                if (nSetDatas.Length > srzDataIndex)
                                {
                                    _CPU.Module_List[nModule].Set_Value[nIO].CurValue = nSetDatas[srzDataIndex++];
                                }
                            }
                        }
                    }

                    _SeqItem.CpuIndex += 1;
                    nSeqNum            = 300;
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("SRZ Write Command(S1) Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            case 500:
            {                             // SRZ Read Env and Cur Value
                nRet = m_RKC.SeqReadData(_SeqItem.CpuIndex, "M1", ref fGetDatas);
                if (nRet > 0)
                {
                    int            srzDataIndex = 0;
                    SRZ_CPU_Struct _CPU         = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];

                    for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
                    {
                        if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.TIO_8888 ||
                            _CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.TIO_VVVV)
                        {
                            List <SRZ_IO> _Ios = _CPU.Module_List[nModule].Read_Value;
                            for (int nIO = 0; nIO < _Ios.Count; nIO++)
                            {
                                _Ios[nIO].Value = fGetDatas[srzDataIndex++];
                            }
                        }
                    }

                    _SeqItem.CpuIndex += 1;
                    if (_SeqItem.CpuIndex >= SRZ_IO_List.SRZ_Cpu.Count)
                    {
                        _SeqItem.CpuIndex = 0;
                        nSeqNum           = 600;
                    }
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("Read Command(Cur & ENV) Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            case 600:
            {                             // SRZ Read Out Value
                nRet = m_RKC.SeqReadData(_SeqItem.CpuIndex, "O1", ref fGetDatas);
                if (nRet > 0)
                {
                    int            srzDataIndex = 0;
                    SRZ_CPU_Struct _CPU         = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];
                    for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
                    {
                        if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.TIO_8888)
                        {
                            List <SRZ_IO> _Ios = _CPU.Module_List[nModule].Read_Out_Value;
                            for (int nIO = 0; nIO < _Ios.Count; nIO++)
                            {
                                _Ios[nIO].Value = fGetDatas[srzDataIndex++];
                            }
                        }
                    }

                    _SeqItem.CpuIndex += 1;
                    if (_SeqItem.CpuIndex >= SRZ_IO_List.SRZ_Cpu.Count)
                    {
                        _SeqItem.CpuIndex = 0;
                        nSeqNum           = 700;
                    }
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("Read Command(Out Value) Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            case 700:
            {                            // Read IO 상단.
                nRet = m_RKC.SeqReadData(_SeqItem.CpuIndex, "L1", ref nGetDatas);
                if (nRet > 0)
                {
                    try
                    {
                        int            srzDataIndex = 0;
                        string         strTemp      = "";
                        SRZ_CPU_Struct _CPU         = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];
                        for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
                        {
                            if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.DIO)
                            {
                                strTemp = string.Format("{0:d04}", nGetDatas[srzDataIndex++]);
                                _CPU.Module_List[nModule].Read_Value[0].Value = (strTemp.Substring(3, 1) == "1") ? 1 : 0;
                                _CPU.Module_List[nModule].Read_Value[1].Value = (strTemp.Substring(2, 1) == "1") ? 1 : 0;
                                _CPU.Module_List[nModule].Read_Value[2].Value = (strTemp.Substring(1, 1) == "1") ? 1 : 0;
                                _CPU.Module_List[nModule].Read_Value[3].Value = (strTemp.Substring(0, 1) == "1") ? 1 : 0;
                            }
                        }
                    }
                    catch                                    // (System.Exception ex)
                    {
                        strBuf = string.Format("Read IO (L1) Exception Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                        LogTextOut(strBuf);
                    }

                    _SeqItem.CpuIndex += 1;
                    if (_SeqItem.CpuIndex >= SRZ_IO_List.SRZ_Cpu.Count)
                    {
                        _SeqItem.CpuIndex = 0;
                        nSeqNum           = 800;
                    }
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("Read Command (L1) Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            case 800:
            {                            // Read IO 하단.
                nRet = m_RKC.SeqReadData(_SeqItem.CpuIndex, "L6", ref nGetDatas);
                if (nRet > 0)
                {
                    try
                    {
                        int            srzDataIndex = 0;
                        string         strTemp      = "";
                        SRZ_CPU_Struct _CPU         = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];
                        for (int nModule = 0; nModule < _CPU.Module_List.Count; nModule++)
                        {
                            if (_CPU.Module_List[nModule].IO_Type == SRZ_IO_TYPE.DIO)
                            {
                                strTemp = string.Format("{0:d04}", nGetDatas[srzDataIndex++]);
                                _CPU.Module_List[nModule].Read_Value[4].Value = (strTemp.Substring(3, 1) == "1") ? 1 : 0;
                                _CPU.Module_List[nModule].Read_Value[5].Value = (strTemp.Substring(2, 1) == "1") ? 1 : 0;
                                _CPU.Module_List[nModule].Read_Value[6].Value = (strTemp.Substring(1, 1) == "1") ? 1 : 0;
                                _CPU.Module_List[nModule].Read_Value[7].Value = (strTemp.Substring(0, 1) == "1") ? 1 : 0;
                            }
                        }
                    }
                    catch                                    // (System.Exception ex)
                    {
                        strBuf = string.Format("Read IO (L6) Exception Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                        LogTextOut(strBuf);
                    }

                    _SeqItem.CpuIndex += 1;
                    if (_SeqItem.CpuIndex >= SRZ_IO_List.SRZ_Cpu.Count)
                    {
                        _SeqItem.CpuIndex = 0;
                        nSeqNum           = 300;
                    }
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("Read Command (L6) Error = {0}, cpu:{1}", nSeqNum, _SeqItem.CpuIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            case 900:                     //Write IO 체크
            {
                //DateTime dt = DateTime.Now;
                // DIO 변경 체크
                if (_SeqItem.CpuIndex >= SRZ_IO_List.SRZ_Cpu.Count)
                {                                //끝..
                    _SeqItem.CpuIndex    = 0;
                    _SeqItem.ModuleIndex = 0;
                    nSeqNum = 500;
                }
                else
                {
                    while (_SeqItem.CpuIndex < SRZ_IO_List.SRZ_Cpu.Count)
                    {
                        SRZ_CPU_Struct _CPU       = SRZ_IO_List.SRZ_Cpu[_SeqItem.CpuIndex];
                        int            nDioModule = IsDIO_Different(_CPU);
                        if (nDioModule != 0)
                        {
                            if (CheckDIO_Write(ref nMagneticSetValue, true, nDioModule))
                            {
                                _SeqItem.ModuleIndex = nDioModule;
                                nSeqNum = 1000;
                                break;
                            }
                        }
                        else
                        {
                            _SeqItem.CpuIndex   += 1;
                            _SeqItem.ModuleIndex = 0;
                        }
                    }
                }
                //long nTime = dt.Ticks - DateTime.Now.Ticks;
                //Console.WriteLine("DIO "+ nTime);
            } break;

            case 1000:                   //Q4
            {                            //Write 상단
                nRet = m_RKC.SeqWriteDataForDIO(_SeqItem.CpuIndex, "Q4", ref nMagneticSetValue, nMagneticSetValue.Length, _SeqItem.ModuleIndex, 7);
                if (nRet > 0)
                {
                    SetDioCur(nMagneticSetValue, true, _SeqItem.ModuleIndex);
                    if (CheckDIO_Write(ref nMagneticSetValue, false, _SeqItem.ModuleIndex))
                    {
                        nSeqNum = 1100;
                    }
                    else
                    {
                        nSeqNum = 900;
                    }
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("Write DIO (Q4) Error = {0}, cpu:{1}, module:{2}", nSeqNum, _SeqItem.CpuIndex, _SeqItem.ModuleIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            case 1100:
            {                            //Write 하단
                nRet = m_RKC.SeqWriteDataForDIO(_SeqItem.CpuIndex, "Q5", ref nMagneticSetValue, nMagneticSetValue.Length, _SeqItem.ModuleIndex, 7);
                if (nRet > 0)
                {
                    SetDioCur(nMagneticSetValue, false, _SeqItem.ModuleIndex);
                    nSeqNum = 900;
                }
                else if (nRet < 0)
                {
                    strBuf = string.Format("Write DIO (Q5) Error = {0}, cpu:{1}, module:{2}", nSeqNum, _SeqItem.CpuIndex, _SeqItem.ModuleIndex);
                    LogTextOut(strBuf);
                    SetAlarm(strBuf);
                }
            } break;

            default:
                break;
            }
            _SeqItem.SeqNum = nSeqNum;
        }