Example #1
0
        public void In_Queue(int nIndex, short uVal)
        {
            int grp    = 0;
            int offset = 0;

            if (FindPosintion(nIndex, ref grp, ref offset))
            {
                WrReg_Coil wr = new WrReg_Coil(m_nFunc, (ushort)(m_scanArea[grp].start_adr + offset), uVal);
                queue.Enqueue(wr);
            }
        }
Example #2
0
        public bool ScanOnce()
        {
            bool bRet = true;

            WSMBS.Result sres;
            WSMBT.Result tres;

            sres = WSMBS.Result.SUCCESS;
            tres = WSMBT.Result.SUCCESS;
            for (int Index = 0; Index < m_scanArea.Count; Index++)
            {
                if (m_nProcotol == 2)
                {
                    //write register
                    if (queue.Count > 0)
                    {
                        WrReg_Coil node = queue.Dequeue();
                        bool       val  = (node.val != 0);
                        if (node.cmd == 0)
                        {
                            tres = tcp_svr.WriteSingleCoil((byte)m_nStation, node.adr, val);
                        }
                        if (node.cmd == 2)
                        {
                            tres = tcp_svr.WriteSingleRegister((byte)m_nStation, node.adr, node.val);
                        }
                    }
                    else
                    {
                        //read register
                        switch (m_nFunc)
                        {
                        case 0:
                            tres = tcp_svr.ReadCoils((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_bValue[Index]);
                            break;

                        case 1:
                            tres = tcp_svr.ReadDiscreteInputs((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_bValue[Index]);
                            break;

                        case 2:
                            tres = tcp_svr.ReadHoldingRegisters((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_sValue[Index]);
                            break;

                        case 3:
                            tres = tcp_svr.ReadInputRegisters((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_sValue[Index]);
                            break;
                        }
                    }
                    if (tres == WSMBT.Result.SUCCESS)
                    {
                        nSucc++;
                    }
                    else
                    {
                        nFail++;
                        err_msg = tres.ToString();
                        bRet    = false;
                    }
                }
                else
                {
                    //write register
                    if (queue.Count > 0)
                    {
                        WrReg_Coil node = queue.Dequeue();
                        bool       val  = (node.val != 0);
                        if (node.cmd == 0)
                        {
                            sres = ser_svr.WriteSingleCoil((byte)m_nStation, node.adr, val);
                        }
                        if (node.cmd == 2)
                        {
                            sres = ser_svr.WriteSingleRegister((byte)m_nStation, node.adr, node.val);
                        }
                    }
                    else
                    {
                        //read register
                        switch (m_nFunc)
                        {
                        case 0:
                            sres = ser_svr.ReadCoils((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_bValue[Index]);
                            break;

                        case 1:
                            sres = ser_svr.ReadDiscreteInputs((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_bValue[Index]);
                            break;

                        case 2:
                            sres = ser_svr.ReadHoldingRegisters((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_sValue[Index]);
                            break;

                        case 3:
                            sres = ser_svr.ReadInputRegisters((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_sValue[Index]);
                            break;
                        }
                        if (tres == WSMBT.Result.SUCCESS)
                        {
                            nSucc++;
                        }
                        else
                        {
                            nFail++;
                            err_msg = tres.ToString();
                            bRet    = false;
                        }
                    }
                }
            }
            return(bRet);
        }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="obj"></param>
        private static void Scan_Task(object obj)
        {
            Equipment eq = obj as Equipment;

            WSMBS.Result sres;
            WSMBT.Result tres;

            eq.bTaskStatus = true;
            while (eq.bWorking)
            {
                sres = WSMBS.Result.SUCCESS;
                tres = WSMBT.Result.SUCCESS;
                if (eq.queue.Count > 0)
                {
                    WrReg_Coil node = eq.queue.Dequeue();
                    bool       val  = (node.val != 0);
                    if (eq.m_nProcotol == 2)
                    {
                        if (node.cmd == 0)
                        {
                            tres = eq.tcp_svr.WriteSingleCoil((byte)eq.m_nStation, node.adr, val);
                        }
                        if (node.cmd == 2)
                        {
                            tres = eq.tcp_svr.WriteSingleRegister((byte)eq.m_nStation, node.adr, node.val);
                        }
                    }
                    else
                    {
                        if (node.cmd == 0)
                        {
                            sres = eq.ser_svr.WriteSingleCoil((byte)eq.m_nStation, node.adr, val);
                        }
                        if (node.cmd == 2)
                        {
                            sres = eq.ser_svr.WriteSingleRegister((byte)eq.m_nStation, node.adr, node.val);
                        }
                    }
                }

                for (int Index = 0; Index < eq.m_scanArea.Count; Index++)
                {
                    if (eq.m_nProcotol == 2)
                    {
                        //read register
                        switch (eq.m_nFunc)
                        {
                        case 0:
                            tres = eq.tcp_svr.ReadCoils((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_bValue[Index]);
                            break;

                        case 1:
                            tres = eq.tcp_svr.ReadDiscreteInputs((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_bValue[Index]);
                            break;

                        case 2:
                            tres = eq.tcp_svr.ReadHoldingRegisters((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_sValue[Index]);
                            break;

                        case 3:
                            tres = eq.tcp_svr.ReadInputRegisters((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_sValue[Index]);
                            break;
                        }
                        if (tres == WSMBT.Result.SUCCESS)
                        {
                            eq.nSucc++;
                        }
                        else
                        {
                            eq.nFail++;
                            eq.err_time = DateTime.Now.ToLongTimeString();
                            eq.err_msg  = "[Adr:" + eq.m_scanArea[Index].start_adr.ToString() + "-" + eq.m_scanArea[Index].end_adr.ToString() + "]" + tres.ToString();
                        }
                    }
                    else
                    {
                        //read register
                        switch (eq.m_nFunc)
                        {
                        case 0:
                            sres = eq.ser_svr.ReadCoils((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_bValue[Index]);
                            break;

                        case 1:
                            sres = eq.ser_svr.ReadDiscreteInputs((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_bValue[Index]);
                            break;

                        case 2:
                            sres = eq.ser_svr.ReadHoldingRegisters((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_sValue[Index]);
                            break;

                        case 3:
                            sres = eq.ser_svr.ReadInputRegisters((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_sValue[Index]);
                            break;
                        }
                        if (sres == WSMBS.Result.SUCCESS)
                        {
                            eq.nSucc++;
                        }
                        else
                        {
                            eq.nFail++;
                            eq.err_time = DateTime.Now.ToLongTimeString();
                            eq.err_msg  = "[Adr:" + eq.m_scanArea[Index].start_adr.ToString() + "-" + eq.m_scanArea[Index].end_adr.ToString() + "]" + sres.ToString();
                        }
                    }
                }
                Thread.Sleep(60);
            }
            eq.bTaskStatus = false;
        }