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; } } }