// 2015.02.25
        //public int GetWordOldDI(int nAddress) { return m_pnOldDI[nAddress]; }


        public int SetBitDO(int nAddress, int n, bool bVal)
        {
            int nR = -1;
            int nTemp;

            lock (m_AClientSocketPlcSiemensWrite)
            {
                // 2014.10.09
                nTemp = m_pnOldDO[nAddress];
                m_pnOldDO[nAddress] = m_pnDO[nAddress];

                if (bVal == true)
                {
                    m_pnDO[nAddress] |= (1 << n);
                }
                else
                {
                    m_pnDO[nAddress] &= (0xFFFF ^ (1 << n));
                }
                AClientSocketPlcSiemens._stCfgSocketPlcSiemens stCfg;
                stCfg        = new AClientSocketPlcSiemens._stCfgSocketPlcSiemens();
                stCfg.nORG   = 1;
                stCfg.nDBNR  = m_stWriteAddress.nDB;
                stCfg.nStart = m_stWriteAddress.nDW * 2 + nAddress * 2;
                stCfg.nLen   = 1;

                m_AClientSocketPlcSiemensWrite.m_pnDataWrite[0] = m_pnDO[nAddress];

                // 2011.04.28
                for (int i = 0; i < _RETRY; i++)
                {
                    nR = m_AClientSocketPlcSiemensWrite.WritePlc(stCfg);
                    if (nR == 1)
                    {
                        break;
                    }
                }
            }
            if (nR == 1)
            {
                AUtil.PostMessage(m_hParent, _WM_SOCKET_WRITE_OK, 0, m_nID);

                /* 2015.02.25
                 * if (m_pnOldDO[nAddress] != m_pnDO[nAddress])
                 * {
                 *                      AUtil.PostMessage(m_hParent, ASDef._WM_CHANGE_DO + m_nID, nAddress, m_pnDO[nAddress]);
                 * }
                 */
            }
            else
            {
                m_pnDO[nAddress]    = m_pnOldDO[nAddress];
                m_pnOldDO[nAddress] = nTemp;

                AUtil.PostMessage(m_hParent, _WM_SOCKET_WRITE_NG, nR, m_nID);
            }

            return(nR);
        }
        public int SetWordDOLen(int nStartAddress, int nLen, int[] pnVal)
        {
            int nR = -1;

            lock (m_AClientSocketPlcSiemensWrite)
            {
                // 2014.10.09
                AClientSocketPlcSiemens._stCfgSocketPlcSiemens stCfg;
                stCfg        = new AClientSocketPlcSiemens._stCfgSocketPlcSiemens();
                stCfg.nORG   = 1;
                stCfg.nDBNR  = m_stWriteAddress.nDB;
                stCfg.nStart = m_stWriteAddress.nDW * 2 + nStartAddress * 2;
                stCfg.nLen   = nLen;


                for (int i = 0; i < nLen; i++)
                {
                    m_pnOldDO[nStartAddress + i] = m_pnDO[nStartAddress + i];
                    m_pnDO[nStartAddress + i]    = pnVal[i];
                    m_AClientSocketPlcSiemensWrite.m_pnDataWrite[i] = m_pnDO[nStartAddress + i];
                }
                // 2011.04.28
                for (int i = 0; i < _RETRY; i++)
                {
                    nR = m_AClientSocketPlcSiemensWrite.WritePlc(stCfg);
                    if (nR == 1)
                    {
                        break;
                    }
                }
            }
            if (nR == 1)
            {
                AUtil.PostMessage(m_hParent, _WM_SOCKET_WRITE_OK, 0, m_nID);
            }
            else
            {
                AUtil.PostMessage(m_hParent, _WM_SOCKET_WRITE_NG, nR, m_nID);
            }

            /* 2015.02.25
             * for (int i = 0; i < nLen; i++)
             * {
             *  if (m_pnOldDO[nStartAddress + i] != m_pnDO[nStartAddress + i])
             *  {
             *                          AUtil.PostMessage(m_hParent, ASDef._WM_CHANGE_DO + m_nID, nStartAddress + i, m_pnDO[nStartAddress + i]);
             *  }
             * }
             */

            return(nR);
        }
        public int SetWordDBDW(int nDB, int nDW, int nVal)
        {
            int nR = -1;

            lock (m_AClientSocketPlcSiemensWrite)
            {
                // 2014.10.09
                AClientSocketPlcSiemens._stCfgSocketPlcSiemens stCfg;
                stCfg        = new AClientSocketPlcSiemens._stCfgSocketPlcSiemens();
                stCfg.nORG   = 1;
                stCfg.nDBNR  = nDB;
                stCfg.nStart = nDW * 2;
                stCfg.nLen   = 1;


                m_AClientSocketPlcSiemensWrite.m_pnDataWrite[0] = nVal;
                // 2011.04.28
                for (int i = 0; i < _RETRY; i++)
                {
                    nR = m_AClientSocketPlcSiemensWrite.WritePlc(stCfg);
                    if (nR == 1)
                    {
                        break;
                    }
                }
            }
            if (nR == 1)
            {
                AUtil.PostMessage(m_hParent, _WM_SOCKET_WRITE_OK, 0, m_nID);
            }
            else
            {
                AUtil.PostMessage(m_hParent, _WM_SOCKET_WRITE_NG, nR, m_nID);
            }

            return(nR);
        }
        public void Run()
        {
            int nR = 0;

            AClientSocketPlcSiemens._stCfgSocketPlcSiemens stCfg;
            stCfg        = new AClientSocketPlcSiemens._stCfgSocketPlcSiemens();
            stCfg.nORG   = 1;                       //DB
            stCfg.nDBNR  = m_stReadAddress.nDB;     //DB
            stCfg.nStart = m_stReadAddress.nDW * 2; //DW
            stCfg.nLen   = ASDef._MAX_PLC_DI;

            // 2011.07.18
#if _USE_PC_RUN
            int nPcRun = 0;
#endif
            while (!m_bStop)
            {
                try
                {
                    // 2014.08.10
                    if (m_bReConnecting == true)
                    {
                        // 2015.04.13
                        Thread.Sleep(1000);
                        //AUtil.Delay(1000, true);

                        continue;
                    }

                    lock (m_AClientSocketPlcSiemensFetch)
                    {
                        // 2014.11.12
                        for (int j = 0; j < _RETRY; j++)
                        {
                            nR = m_AClientSocketPlcSiemensFetch.ReadPlc(stCfg);
                            if (nR == 1)
                            {
                                for (int i = 0; i < ASDef._MAX_PLC_DI; i++)
                                {
                                    // 2015.02.25
                                    //m_pnOldDI[i] = m_pnDI[i];

                                    m_pnDI[i] = m_AClientSocketPlcSiemensFetch.m_pnDataRead[i];
                                }

                                // 2015.03.01
                                if (++m_nReadCount > 9999)
                                {
                                    m_nReadCount = 0;
                                }

                                break;
                            }
                        }
                    }
                    if (nR == 1)
                    {
                        AUtil.PostMessage(m_hParent, _WM_SOCKET_FETCH_OK, 0, m_nID);

                        /* 2015.02.25
                         * for (int i = 0; i < ASDef._MAX_PLC_DI; i++)
                         * {
                         *  if (m_pnOldDI[i] != m_pnDI[i])
                         *  {
                         *      //AUtil.SendMessage(m_hParent, ASDef._WM_CHANGE_DI + m_nID, i, m_pnDI[i]);
                         *      AUtil.PostMessage(m_hParent, ASDef._WM_CHANGE_DI + m_nID, i, m_pnDI[i]);
                         *  }
                         * }
                         */
#if _USE_PC_RUN
                        if (AVisionProBuild.Auto)
                        {
                            if (nPcRun > 4)
                            {
                                nPcRun = 0;
                                if (((GetWordDO(ASDef._DO_PC_RUN) >> ASDef._DO_BIT_PC_RUN) & 0x01) == 0x01)
                                {
                                    // 2014.07.17
                                    if (SetBitDO(Convert.ToInt32(ASDef._DO_PC_RUN), Convert.ToInt32(ASDef._DO_BIT_PC_RUN), false) == 1)
                                    {
                                        // 2015.02.11
                                        AVisionProBuild.WriteLogFile("O_Off:PC Run", ".PcRun.txt");
                                    }
                                }
                                else
                                {
                                    // 2014.07.17
                                    if (SetBitDO(Convert.ToInt32(ASDef._DO_PC_RUN), Convert.ToInt32(ASDef._DO_BIT_PC_RUN), true) == 1)
                                    {
                                        // 2015.02.11
                                        AVisionProBuild.WriteLogFile("O:PC Run", ".PcRun.txt");
                                    }
                                }
                            }
                            else
                            {
                                nPcRun++;
                            }
                        }
#endif
                    }
                    else
                    {
                        AUtil.PostMessage(m_hParent, _WM_SOCKET_FETCH_NG, nR, m_nID);
                    }
                }
                catch
                {
                }

                // 2015.04.13
                Thread.Sleep(m_nDelayTime);
                //AUtil.Delay(m_nDelayTime, true);
            }
        }