Example #1
0
    private void ParseBlock(ModbusReadBlockConfiguration readBlock, byte[] data)
    {
        foreach (var tag in readBlock.Tags)
        {
            var value = data.Parser(tag.Format, tag.BlockIndex * RowSize);

            if (value is string valStr)
            {
                Console.WriteLine("Write String Tag {0} => {1}", tag.TagName, valStr);

                connector.SetText(tag.TagName, valStr);
            }
            else
            {
                var valDbl = Convert.ToDouble(value);
                Console.WriteLine("Write Numeric Tag {0} => {1}", tag.TagName, valDbl);
                connector.SetNumeric(tag.TagName, valDbl);
            }
        }
    }
Example #2
0
    private async Task <byte[]> ReadBlockAsync(ModbusReadBlockConfiguration readBlock)
    {
        switch (readBlock.Function)
        {
        case ModbusFunctions.ReadCoilStatus:
        {
            var result = await modbusClient.ReadCoilsAsync(readBlock.AddressOffset, readBlock.Count);

            return(result);
        }

        case ModbusFunctions.ReadInputStatus:
        {
            var result = await modbusClient.ReadInputsAsync(readBlock.AddressOffset, readBlock.Count);

            return(result);
        }

        case ModbusFunctions.ReadHoldingRegister:
        {
            var result = await modbusClient.ReadHoldingRegistersAsync(readBlock.AddressOffset, readBlock.Count);

            return(readBlock.ByteSwap ? result.ReadDataByteSwap() : result.RawData);
        }

        case ModbusFunctions.ReadInputRegister:
        {
            var result = await modbusClient.ReadInputRegistersAsync(readBlock.AddressOffset, readBlock.Count);

            return(readBlock.ByteSwap ? result.ReadDataByteSwap() : result.RawData);
        }

        default:
            return(null);
        }
    }