Exemplo n.º 1
0
        public static IReadModbusFunction CreateReadModbusFunction(ModbusReadCommandParameters commandParameters)
        {
            IReadModbusFunction modbusFunction;

            if (FunctionFactory.scadaModel == null)
            {
                string message = $"CreateReadModbusFunction => SCADA model is null.";
                LoggerWrapper.Instance.LogError(message);
                //TODO: InternalSCADAServiceException
                throw new Exception(message);
            }

            switch ((ModbusFunctionCode)commandParameters.FunctionCode)
            {
            case ModbusFunctionCode.READ_COILS:
                modbusFunction = new ReadCoilsFunction(commandParameters, FunctionFactory.scadaModel);
                break;

            case ModbusFunctionCode.READ_DISCRETE_INPUTS:
                modbusFunction = new ReadDiscreteInputsFunction(commandParameters, FunctionFactory.scadaModel);
                break;

            case ModbusFunctionCode.READ_INPUT_REGISTERS:
                modbusFunction = new ReadInputRegistersFunction(commandParameters, FunctionFactory.scadaModel);
                break;

            case ModbusFunctionCode.READ_HOLDING_REGISTERS:
                modbusFunction = new ReadHoldingRegistersFunction(commandParameters, FunctionFactory.scadaModel);
                break;

            default:
                modbusFunction = null;
                string message = $"CreateReadModbusFunction => Wrong function code {(ModbusFunctionCode)commandParameters.FunctionCode}.";
                LoggerWrapper.Instance.LogError(message);
                break;
            }

            return(modbusFunction);
        }
        private void _read()
        {
            _header   = new MbapHeader(m_io, this, m_root);
            _function = ((ModbusFunctionCode)m_io.ReadU1());
            switch (Function)
            {
            case ModbusFunctionCode.ReadFileRecord: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new ReadFileRecordFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.ReadInputRegisters: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new ReadInputRegistersFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.WriteFileRecord: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new WriteFileRecordFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.ReadWriteMultiupleRegisters: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new ReadWriteMultiupleRegistersFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.ReadInputStatus: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new ReadInputStatusFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.MaskWriteRegister: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new MaskWriteRegisterFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.WriteSingleRegister: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new WriteSingleRegisterFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.ReadHoldingRegister: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new ReadHoldingRegistersFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.ReadFifoQueue: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new ReadFifoQueueFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.WriteSingleCoil: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new WriteSingleCoilFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.ReadDeviceIdentification: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new ReadDeviceIdentificationFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.WriteMultipleCoils: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new WriteMultipleCoilsFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.WriteMultipleRegisters: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new WriteMultipleRegistersFunction(io___raw_data, this, m_root);
                break;
            }

            case ModbusFunctionCode.ReadCoilStatus: {
                __raw_data = m_io.ReadBytes((Header.Length - 2));
                var io___raw_data = new KaitaiStream(__raw_data);
                _data = new ReadCoilStatusFunction(io___raw_data, this, m_root);
                break;
            }

            default: {
                _data = m_io.ReadBytes((Header.Length - 2));
                break;
            }
            }
        }