internal async Task ConnectByTCPAsync(string address, int port)
        {
            tcpClient = new TcpClient(address, port);

            var factory = new ModbusFactory();

            master = factory.CreateMaster(tcpClient);

            await master.ReadInputRegistersAsync(SLAVE_ADDRESS, 0, 1);
        }
Beispiel #2
0
        public async Task TestInputRegisters()
        {
            var           factory = new ModbusFactory();
            IModbusMaster modbus  = factory.CreateMaster(_client);
            await _client.ConnectAsync(MODBUS_IP, MODBUS_PORT);

            ushort[] data = await modbus.ReadInputRegistersAsync(MODBUS_SLAVE, 0, 5);

            Assert.Equal(5, data.Length);
        }
        internal async Task ConnectBySerialAsync(string comPort)
        {
            serialPort = new SerialPort()
            {
                PortName     = comPort,
                BaudRate     = 115200,
                DataBits     = 8,
                Parity       = Parity.Odd,
                StopBits     = StopBits.One,
                ReadTimeout  = 500,
                WriteTimeout = 500
            };
            serialPort.Open();

            var factory = new ModbusFactory();

            master = factory.CreateRtuMaster(serialPort);

            await master.ReadInputRegistersAsync(SLAVE_ADDRESS, 0, 1);
        }
        public async Task <ushort[]> ReadInputRegistersAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints, ushort blockSize, CancellationToken cancellationToken)
        {
            return(await PerformFuncAsync(async() =>
            {
                List <ushort> registers = new List <ushort>(numberOfPoints);

                int soFar = 0;
                int thisRead = blockSize;

                while (soFar < numberOfPoints)
                {
                    //If we're _not_ on the first run through here, wait for the min time
                    if (soFar > 0)
                    {
                        await Task.Delay(_minInterval, cancellationToken);
                    }

                    //Check to see if we've ben cancelled
                    cancellationToken.ThrowIfCancellationRequested();

                    if (thisRead > (numberOfPoints - soFar))
                    {
                        thisRead = numberOfPoints - soFar;
                    }

                    //Perform this operation
                    ushort[] registersFromThisRead = await _master.ReadInputRegistersAsync(slaveAddress, (ushort)(startAddress + soFar), (ushort)thisRead);

                    //Add these to the result
                    registers.AddRange(registersFromThisRead);

                    //Increment where we're at
                    soFar += thisRead;
                }

                return registers.ToArray();
            }, cancellationToken));
        }
Beispiel #5
0
        /// <inheritdoc/>
        public async Task <byte[]> Read(Register register)
        {
            MakeSureClientIsConnected();

            _logger.Information($"Getting data from slave {register.Unit} startingAdress {register.StartingAddress} size {register.Size} as DataType {Enum.GetName(typeof(DataType), register.DataType)}");

            ushort[] result;

            var size = Convert.ToUInt16(register.Size * GetDataSizeFrom(register.DataType));

            try
            {
                switch (register.FunctionCode)
                {
                case FunctionCode.HoldingRegister:
                    result = await _master.ReadHoldingRegistersAsync(register.Unit, register.StartingAddress, size);

                    break;

                case FunctionCode.InputRegister:
                    result = await _master.ReadInputRegistersAsync(register.Unit, register.StartingAddress, size);

                    break;

                default:
                    result = new ushort[0];
                    break;
                }
                var bytes = result.GetBytes(_configuration.Endianness);
                return(bytes);
            }
            catch (Exception ex)
            {
                _logger.Error(ex, $"Trouble reading register {register}");
                return(null);
            }
        }
Beispiel #6
0
 public async Task <ushort[]> ReadInputRegisters(ushort startAddress, ushort pointCount)
 {
     return(await m_modbusConnection.ReadInputRegistersAsync(m_unitID, startAddress, pointCount));
 }