Exemplo n.º 1
0
        public virtual BlockResponse SendGetBlockStateCommand(int blockId)
        {
            Block block = DA.Current.Single <Block>(blockId);

            if (block == null)
            {
                throw new InvalidOperationException($"Block not found with BlockID = {blockId}");
            }

            using (var sender = Connect(block))
            {
                byte[] buffer = CreateGetBlockStateBuffer();

                Log.Write(block.BlockID, $"WagoConnection: Sending GetBlockState message to block: BlockID = {block.BlockID}, Data = {WagoUtility.GetDataString(buffer)}");

                byte[] recvBuffer = new byte[65];

                int bytesRecv = SendMessageToBlock(sender, buffer, recvBuffer, true);

                if (bytesRecv > 0)
                {
                    Log.Write(block.BlockID, $"WagoConnection: Received {bytesRecv} bytes [{WagoUtility.BytesToString(recvBuffer, bytesRecv)}] from block {block.BlockID}");
                }
                else
                {
                    Log.Write(block.BlockID, $"WagoConnection: Block {block.BlockID} did not return any data");
                }

                BlockResponse result = block.CreateBlockResponse();
                result.BlockState.Points = block.Points.Select(x => WagoUtility.GetPointState(x, recvBuffer)).ToArray();

                return(result);
            }
        }