Example #1
0
        /// <summary>
        /// Reads a string value from the KWLEC200.
        /// </summary>
        /// <param name="modbus">The Modbus master device.</param>
        /// <param name="slave">The slave ID of the Modbus device.</param>
        /// <param name="name">The Helios value name attribute.</param>
        /// <param name="size">The Helios value size attribute.</param>
        /// <param name="count">The Helios value count attribute.</param>
        /// <returns>The string value read from the KWLEC200.</returns>
        public (string Data, DataStatus Status) ReadRawData(IModbusMaster modbus, byte slave, string name, ushort size, ushort count)
        {
            string text = string.Empty;

            try
            {
                lock (_lock)
                {
                    _logger?.LogDebug($"ReadRawData write '{name}'.");
                    modbus.WriteStringAsync(slave, OFFSET, name + "\0\0").Wait();
                    Task.Delay(TimeSpan.FromMilliseconds(200)).Wait();
                    text = modbus.ReadStringAsync(slave, OFFSET, (ushort)(count * 2)).Result;
                    _logger?.LogDebug($"ReadRawData read: '{text}'.");
                }

                if (!string.IsNullOrEmpty(text))
                {
                    return(text, Good);
                }
                else
                {
                    _logger?.LogError($"ReadRawData invalid response.");
                    return(string.Empty, BadUnknownResponse);
                }
            }
            catch (Exception ex)
            {
                _logger?.LogError(ex, $"Exception in ReadRawData.");
                return(string.Empty, BadUnknownResponse);
            }
        }
Example #2
0
        public async Task TestString()
        {
            var           factory = new ModbusFactory();
            IModbusMaster modbus  = factory.CreateMaster(_client);
            await _client.ConnectAsync(MODBUS_IP, MODBUS_PORT);

            await modbus.WriteStringAsync(MODBUS_SLAVE, 0, "Hello");

            string text = await modbus.ReadStringAsync(MODBUS_SLAVE, 0, 5);

            Assert.Equal(5, text.Length);
            Assert.Equal("Hello", text);
            text = await modbus.ReadOnlyStringAsync(MODBUS_SLAVE, 0, 5);
        }