protected BlockMessage GetBlockMessage(String messageName)
        {
            foreach (BlockMessage msg in BlockMessages)
                if (msg.Name == messageName)
                    return msg;

            BlockMessage blockMsg = new BlockMessage();
            blockMsg.Name = messageName;
            blockMsg.Message = Protocol.GetMessage(Conversation.Name, blockMsg.Name);
            if (blockMsg.Message == null)
            {
                LogMessage("NonModbus LoadRegisters - Cannot find message: " + blockMsg.Name, LogEntryType.ErrorMessage);
                blockMsg.MessageType = MessageType.Unknown;
                blockMsg.PayloadByteVar = null;
                blockMsg.PayloadSizeByteVar = null;
            }
            else
            {
                blockMsg.MessageType = blockMsg.Message.MessageType;
                blockMsg.PayloadByteVar = (ByteVar)blockMsg.Message.GetVariable("%Payload_");
                blockMsg.PayloadSizeByteVar = (ByteVar)blockMsg.Message.GetVariable("%PayloadSize_");
            }

            blockMsg.MessageItems = new List<Register>();
            blockMsg.PayloadSize = 0;
            blockMsg.Payload = null;

            BlockMessages.Add(blockMsg);
            return blockMsg;
        }
        public void LoadDynamicRegisters(BlockMessage blockMsgData)
        {
            BlockMessage blockMsgDataSize = GetBlockMessage("ReceiveDataSize");

            XmlDocument doc = new XmlDocument();
            UInt16 size = 0;

            foreach (DynamicDataMap.MapItem item in blockMsgData.DynamicDataMap.Items)
            {
                Register registerItem = Device.GetRegister(this, item.templateRegisterSettings);

                if (registerItem == null)
                    LogMessage("LoadDynamicRegisters - Cannot find content: " + item.templateRegisterSettings.Content, LogEntryType.ErrorMessage);
                else
                {
                    registerItem.PayloadPosition = item.Position;
                    UInt16 minSize = (UInt16)(item.Position.Value + registerItem.CurrentSize);
                    if (size < minSize)
                        size = minSize;

                    BlockAllRegisters.Add(registerItem);
                    blockMsgData.MessageItems.Add(registerItem);
                }
            }

            blockMsgData.PayloadSize = size;
            if (blockMsgDataSize.PayloadSizeByteVar != null)
            {
                UInt32 sizeSize = (UInt32)blockMsgDataSize.PayloadSizeByteVar.Length;
                if (sizeSize != 1 && sizeSize != 2 && sizeSize != 4)
                {
                    LogMessage("LoadDynamicRegisters - Payload size must be 1, 2 or 4 bytes", LogEntryType.ErrorMessage);
                }
            }
            blockMsgData.Payload = new byte[blockMsgData.PayloadSize];
            blockMsgData.Payload.Initialize();
        }