public Tag(ISlaveDataStore slaveStorage) { SlaveStorage = slaveStorage; Name = "NewTag"; Address = 0; ValueType = ModbusValueType.Int16; Region = ModbusRegion.HoldingRegisters; }
public IModbusSlave CreateSlave(byte unitId, ISlaveDataStore dataStore = null) { if (dataStore == null) { dataStore = new DefaultSlaveDataStore(); } return(new ModbusSlave(unitId, dataStore, GetAllFunctionServices())); }
protected override IModbusMessage Handle(ReadCoilsInputsRequest request, ISlaveDataStore dataStore) { bool[] discretes = dataStore.CoilDiscretes.ReadPoints(request.StartAddress, request.NumberOfPoints); DiscreteCollection data = new DiscreteCollection(discretes); return(new ReadCoilsInputsResponse( request.FunctionCode, request.SlaveAddress, data.ByteCount, data)); }
public ModbusSlave(byte unitId, ISlaveDataStore dataStore, IEnumerable <IModbusFunctionService> handlers) { if (handlers == null) { throw new ArgumentNullException(nameof(handlers)); } _unitId = unitId; _dataStore = dataStore ?? throw new ArgumentNullException(nameof(dataStore)); _handlers = handlers.ToDictionary(h => h.FunctionCode, h => h); }
public IModbusMessage HandleSlaveRequest(IModbusMessage request, ISlaveDataStore dataStore) { //Attempt to cast the message TRequest typedRequest = request as TRequest; if (typedRequest == null) { throw new InvalidOperationException($"Unable to cast request of type '{request.GetType().Name}' to type '{typeof(TRequest).Name}"); } //Do the implementation specific logic return(Handle(typedRequest, dataStore)); }
protected override IModbusMessage Handle(WriteMultipleCoilsRequest request, ISlaveDataStore dataStore) { bool[] points = request.Data .Take(request.NumberOfPoints) .ToArray(); dataStore.CoilDiscretes.WritePoints(request.StartAddress, points); return(new WriteMultipleCoilsResponse( request.SlaveAddress, request.StartAddress, request.NumberOfPoints)); }
public Tag(TagInfo tagInfo, ISlaveDataStore slaveStorage) { SlaveStorage = slaveStorage; Name = tagInfo.Name; Description = tagInfo.Description; Address = tagInfo.Address; ValueType = tagInfo.ValueType; Region = tagInfo.Region; if (tagInfo.Value != default) { Value = tagInfo.Value; } }
protected override IModbusMessage Handle(WriteMultipleRegistersRequest request, ISlaveDataStore dataStore) { ushort[] registers = request.Data.ToArray(); dataStore.HoldingRegisters.WritePoints(request.StartAddress, registers); return(new WriteMultipleRegistersResponse( request.SlaveAddress, request.StartAddress, request.NumberOfPoints)); }
protected override IModbusMessage Handle(WriteSingleCoilRequestResponse request, ISlaveDataStore dataStore) { bool[] values = new bool[] { request.Data[0] == Modbus.CoilOn }; dataStore.CoilDiscretes.WritePoints(request.StartAddress, values); return(request); }
protected override IModbusMessage Handle(ReadHoldingInputRegistersRequest request, ISlaveDataStore dataStore) { ushort[] registers = dataStore.InputRegisters.ReadPoints(request.StartAddress, request.NumberOfPoints); RegisterCollection regsiterCollection = new RegisterCollection(registers); return(new ReadHoldingInputRegistersResponse(request.FunctionCode, request.SlaveAddress, regsiterCollection)); }
public IModbusMessage HandleSlaveRequest(IModbusMessage request, ISlaveDataStore dataStore) { Console.WriteLine("HMI Buffer Message Receieved"); throw new NotImplementedException(); }
protected override IModbusMessage Handle(WriteSingleRegisterRequestResponse request, ISlaveDataStore dataStore) { ushort[] points = request.Data .ToArray(); dataStore.HoldingRegisters.WritePoints(request.StartAddress, points); return(request); }
protected abstract IModbusMessage Handle(TRequest request, ISlaveDataStore dataStore);
protected override IModbusMessage Handle(IModbusMessage request, ISlaveDataStore dataStore) { return(request); }
protected override IModbusMessage Handle(WriteFileRecordRequest request, ISlaveDataStore dataStore) { throw new NotImplementedException("WriteFileRecordService::Handle"); }
protected override IModbusMessage Handle(ReadWriteMultipleRegistersRequest request, ISlaveDataStore dataStore) { ushort[] pointsToWrite = request.WriteRequest.Data .ToArray(); dataStore.HoldingRegisters.WritePoints(request.ReadRequest.StartAddress, pointsToWrite); ushort[] readPoints = dataStore.HoldingRegisters.ReadPoints(request.ReadRequest.StartAddress, request.ReadRequest.NumberOfPoints); RegisterCollection data = new RegisterCollection(readPoints); return(new ReadHoldingInputRegistersResponse( request.FunctionCode, request.SlaveAddress, data)); }