Beispiel #1
0
 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()));
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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));
        }
Beispiel #6
0
        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));
        }
Beispiel #7
0
        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);
        }
Beispiel #10
0
        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));
        }
Beispiel #11
0
            public IModbusMessage HandleSlaveRequest(IModbusMessage request, ISlaveDataStore dataStore)
            {
                Console.WriteLine("HMI Buffer Message Receieved");

                throw new NotImplementedException();
            }
Beispiel #12
0
        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);
Beispiel #14
0
 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));
        }