예제 #1
0
        public bool[] readOutput_Map()
        {
            short nIndex = 0;
            uint  uDataHigh = 0, uDataLow = 0, uFlagHigh = 0, uFlagLow = 0, uModuleID = 0;
            int   nBoardNo = 0, nModulePos = 0;

            int boolArrayQuentity = this.m_Otp_Module_Quentity * 32;

            bool[] m_bReadResultIOMap = new bool[boolArrayQuentity];

            for (int moduleNo = 0; moduleNo < this.m_Otp_Module_Quentity; moduleNo++)
            {
                CAXD.AxdInfoGetModule(moduleNo + 3, ref nBoardNo, ref nModulePos, ref uModuleID);
                CAXD.AxdoReadOutportWord(moduleNo + 3, 0, ref uDataHigh);
                CAXD.AxdoReadOutportWord(moduleNo + 3, 1, ref uDataLow);

                for (nIndex = 0; nIndex < 16; nIndex++)
                {
                    int wIndex = nIndex + 32 * moduleNo;
                    // Verify the last bit value of data read
                    uFlagHigh = uDataHigh & 0x0001;
                    uFlagLow  = uDataLow & 0x0001;

                    // Shift rightward by bit by bit
                    uDataHigh = uDataHigh >> 1;
                    uDataLow  = uDataLow >> 1;

                    // Updat bit value in control
                    if (uFlagHigh == 1)
                    {
                        m_bReadResultIOMap[wIndex] = true;
                    }
                    else
                    {
                        m_bReadResultIOMap[wIndex] = false;
                    }

                    if (uFlagLow == 1)
                    {
                        m_bReadResultIOMap[wIndex + 16] = true;
                    }
                    else
                    {
                        m_bReadResultIOMap[wIndex + 16] = false;
                    }
                }
            }
            return(m_bReadResultIOMap);
        }
예제 #2
0
        public void Read()
        {
            int    i     = 0;
            UInt32 value = 0;

            lock (this)
            {
                if (Type == EAxtDio.DI)
                {
                    foreach (AxtDioWordModule module in modules)
                    {
                        i = module.ModuleNo * 2;
                        Validate(CAXD.AxdiReadInportWord(module.ModuleNo, module.Offset, ref value));

                        oldValue.Word(i, nowValue.Word(i));
                        nowValue.Word(i, (UInt16)value);
                    }

                    foreach (KeyValuePair <int, UlTripState> trip in trips)
                    {
                        if (trip.Value.Tripped(nowValue[trip.Key]) == true)
                        {
                            TripCode = trip.Value.Code;
                            break;
                        }
                    }

                    foreach (KeyValuePair <int, UlRelayTimer> timer in timers)
                    {
                        timer.Value.IN = nowValue[timer.Key];
                    }
                }
                else
                {
                    foreach (AxtDioWordModule module in modules)
                    {
                        i = module.ModuleNo * 2;
                        Validate(CAXD.AxdoReadOutportWord(module.ModuleNo, module.Offset, ref value));

                        oldValue.Word(i, nowValue.Word(i));
                        nowValue.Word(i, (UInt16)value);
                        tempValue.Word(i, (UInt16)value);
                    }
                }
            }
        }
예제 #3
0
파일: CDio.cs 프로젝트: zoro-008/Works
 public void Update()
 {
     for (int i = 0; i < m_iModuleCnt; i++)
     {
         if (m_aModuleInfo[i].iCntIn == 32 || m_aModuleInfo[i].iCntOut == 32)
         {
             CAXD.AxdoWriteOutportDword(i, 0, m_aModuleInfo[i].uDataOutSet);
             CAXD.AxdoReadOutportDword(i, 0, ref m_aModuleInfo[i].uDataOutGet);
             CAXD.AxdiReadInportDword(i, 0, ref m_aModuleInfo[i].uDataIn);
         }
         else if (m_aModuleInfo[i].iCntIn == 16 || m_aModuleInfo[i].iCntOut == 16)
         {
             CAXD.AxdoWriteOutportWord(i, 0, m_aModuleInfo[i].uDataOutSet);
             CAXD.AxdoReadOutportWord(i, 0, ref m_aModuleInfo[i].uDataOutGet);
             CAXD.AxdiReadInportWord(i, 0, ref m_aModuleInfo[i].uDataIn);
         }
         //m_aModuleInfo[i].uDataOutSet = 0;// m_aModuleInfo[i].uDataOutGet;
     }
 }
예제 #4
0
        private bool SelectModule()
        {
            int nModuleCount = 0;

            CAXD.AxdInfoGetModuleCount(ref nModuleCount);

            if (nModuleCount > 0)
            {
                int   nBoardNo   = 0;
                int   nModulePos = 0;
                uint  uModuleID  = 0;
                short nIndex     = 0;
                uint  uDataHigh  = 0;
                uint  uDataLow   = 0;
                uint  uFlagHigh  = 0;
                uint  uFlagLow   = 0;
                uint  uUse       = 0;

                CAXD.AxdInfoGetModule(comboModule.SelectedIndex, ref nBoardNo, ref nModulePos, ref uModuleID);

                switch ((AXT_MODULE)uModuleID)
                {
                case AXT_MODULE.AXT_SIO_DI32:
                case AXT_MODULE.AXT_SIO_RDI32:
                    groupHigh.Text = "INPUT  0bit ~ 15Bit";
                    groupLow.Text  = "INPUT 16bit ~ 31Bit";

                    if (((AXT_MODULE)uModuleID) == AXT_MODULE.AXT_SIO_RDI32)
                    {
                        checkInterrupt.Checked   = false;
                        radioCallback.Enabled    = false;
                        radioMessage.Enabled     = false;
                        radioEvent.Enabled       = false;
                        checkRigingEdge.Checked  = false;
                        checkFallingEdge.Checked = false;
                    }
                    else
                    {
                        checkInterrupt.Checked   = true;
                        radioCallback.Enabled    = true;
                        radioMessage.Enabled     = true;
                        radioEvent.Enabled       = true;
                        checkRigingEdge.Checked  = true;
                        checkFallingEdge.Checked = true;

                        CAXD.AxdiInterruptGetModuleEnable(comboModule.SelectedIndex, ref uUse);
                        if (uUse == (uint)AXT_USE.ENABLE)
                        {
                            checkInterrupt.Checked = true;
                            SelectMessage();
                        }
                        else
                        {
                            checkInterrupt.Checked = false;
                        }

                        CAXD.AxdiInterruptEdgeGetWord(comboModule.SelectedIndex, 0, (uint)AXT_DIO_EDGE.UP_EDGE, ref uDataHigh);
                        CAXD.AxdiInterruptEdgeGetWord(comboModule.SelectedIndex, 1, (uint)AXT_DIO_EDGE.UP_EDGE, ref uDataLow);
                        if (uDataHigh == 0xFFFF && uDataLow == 0xFFFF)
                        {
                            checkRigingEdge.Checked = true;
                        }
                        else
                        {
                            checkRigingEdge.Checked = false;
                        }

                        CAXD.AxdiInterruptEdgeGetWord(comboModule.SelectedIndex, 0, (uint)AXT_DIO_EDGE.DOWN_EDGE, ref uDataHigh);
                        CAXD.AxdiInterruptEdgeGetWord(comboModule.SelectedIndex, 1, (uint)AXT_DIO_EDGE.DOWN_EDGE, ref uDataLow);
                        if (uDataHigh == 0xFFFF && uDataLow == 0xFFFF)
                        {
                            checkFallingEdge.Checked = true;
                        }
                        else
                        {
                            checkFallingEdge.Checked = false;
                        }
                    }

                    for (nIndex = 0; nIndex < 16; nIndex++)
                    {
                        checkHigh[nIndex].Text = String.Format("{0:D2}", nIndex);
                        checkLow[nIndex].Text  = String.Format("{0:D2}", nIndex + 16);
                    }
                    break;

                case AXT_MODULE.AXT_SIO_DO32P:
                case AXT_MODULE.AXT_SIO_DO32T:
                case AXT_MODULE.AXT_SIO_RDO32:
                    groupHigh.Text = "OUTPUT  0bit ~ 15Bit";
                    groupLow.Text  = "OUTPUT 16bit ~ 31Bit";

                    checkInterrupt.Checked   = false;
                    radioCallback.Enabled    = false;
                    radioMessage.Enabled     = false;
                    radioEvent.Enabled       = false;
                    checkRigingEdge.Checked  = false;
                    checkFallingEdge.Checked = false;

                    //++
                    // Read outputting signal in WORD
                    CAXD.AxdoReadOutportWord(comboModule.SelectedIndex, 0, ref uDataHigh);
                    CAXD.AxdoReadOutportWord(comboModule.SelectedIndex, 1, ref uDataLow);

                    for (nIndex = 0; nIndex < 16; nIndex++)
                    {
                        // Verify the last bit value of data read
                        uFlagHigh = uDataHigh & 0x0001;
                        uFlagLow  = uDataLow & 0x0001;

                        // Shift rightward by bit by bit
                        uDataHigh = uDataHigh >> 1;
                        uDataLow  = uDataLow >> 1;

                        // Updat bit value in control
                        if (uFlagHigh == 1)
                        {
                            checkHigh[nIndex].Checked = true;
                        }
                        else
                        {
                            checkHigh[nIndex].Checked = false;
                        }

                        if (uFlagLow == 1)
                        {
                            checkLow[nIndex].Checked = true;
                        }
                        else
                        {
                            checkLow[nIndex].Checked = false;
                        }

                        checkHigh[nIndex].Text = String.Format("{0:D2}", nIndex);
                        checkLow[nIndex].Text  = String.Format("{0:D2}", nIndex + 16);
                    }
                    break;

                case AXT_MODULE.AXT_SIO_DB32P:
                case AXT_MODULE.AXT_SIO_DB32T:
                case AXT_MODULE.AXT_SIO_RDB128MLII:
                    groupHigh.Text = "INPUT  0bit ~ 15Bit";
                    groupLow.Text  = "OUTPUT  0bit ~ 15Bit";

                    // Only Digital Input was used
                    checkInterrupt.Enabled   = true;
                    checkRigingEdge.Enabled  = true;
                    checkFallingEdge.Enabled = true;

                    CAXD.AxdiInterruptGetModuleEnable(comboModule.SelectedIndex, ref uUse);
                    if (uUse == (uint)AXT_USE.ENABLE)
                    {
                        checkInterrupt.Checked = true;
                        SelectMessage();
                    }
                    else
                    {
                        checkInterrupt.Checked = false;
                    }

                    CAXD.AxdiInterruptEdgeGetWord(comboModule.SelectedIndex, 0, (uint)AXT_DIO_EDGE.UP_EDGE, ref uDataHigh);
                    if (uDataHigh == 0xFFFF)
                    {
                        checkRigingEdge.Checked = true;
                    }
                    else
                    {
                        checkRigingEdge.Checked = false;
                    }

                    CAXD.AxdiInterruptEdgeGetWord(comboModule.SelectedIndex, 0, (uint)AXT_DIO_EDGE.DOWN_EDGE, ref uDataHigh);
                    if (uDataHigh == 0xFFFF)
                    {
                        checkFallingEdge.Checked = true;
                    }
                    else
                    {
                        checkFallingEdge.Checked = false;
                    }

                    //++
                    // Read outputting signal in WORD
                    CAXD.AxdoReadOutportWord(comboModule.SelectedIndex, 0, ref uDataLow);

                    for (nIndex = 0; nIndex < 16; nIndex++)
                    {
                        // Verify the last bit value of data read
                        uFlagLow = uDataLow & 0x0001;

                        // Shift rightward by bit by bit
                        uDataLow = uDataLow >> 1;

                        // Updat bit value in control
                        if (uFlagLow == 1)
                        {
                            checkLow[nIndex].Checked = true;
                        }
                        else
                        {
                            checkLow[nIndex].Checked = false;
                        }

                        checkHigh[nIndex].Text = String.Format("{0:D2}", nIndex);
                        checkLow[nIndex].Text  = String.Format("{0:D2}", nIndex);
                    }
                    break;
                }
            }

            return(true);
        }