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(); }