public static IWriteModbusFunction CreateWriteModbusFunction(ModbusWriteCommandParameters commandParameters, CommandOriginType commandOrigin) { IWriteModbusFunction modbusFunction; if (FunctionFactory.scadaModel == null) { string message = $"CreateWriteModbusFunction => SCADA model is null."; LoggerWrapper.Instance.LogError(message); //TODO: InternalSCADAServiceException throw new Exception(message); } switch ((ModbusFunctionCode)commandParameters.FunctionCode) { case ModbusFunctionCode.WRITE_SINGLE_COIL: modbusFunction = new WriteSingleCoilFunction(commandParameters, commandOrigin); break; case ModbusFunctionCode.WRITE_SINGLE_REGISTER: modbusFunction = new WriteSingleRegisterFunction(commandParameters, commandOrigin); break; default: modbusFunction = null; string message = $"CreateWriteModbusFunction => 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; } } }