public Conversation(Converse converse, String conversationName, IUtilityLog log) { Converse = converse; UtilityLog = log; Name = conversationName; Messages = new List<Message>(); }
public Message(Conversation conversation, MessageType messageType, String name) { Conversation = conversation; Converse = conversation.Converse; MessageType = messageType; Name = name; Elements = new List<Element>(); if (MessageType == Conversations.MessageType.Extract && Elements.Count > 1 && Elements[0].GetType() == typeof(DynamicByteVar)) MessageType = Conversations.MessageType.ExtractDynamic; }
public MainWindow() { InitializeComponent(); Services = new SystemServices(); GenThreadManager = new GenThreadManagement.GenThreadManager(Services); Services.LogMessageContent = true; Services.LogDetailTrace = true; Services.LogTrace = true; Converse = null; liveElement = null; histElements = null; rootElement = null; EmulatorThread = null; butSendHist.Visibility = System.Windows.Visibility.Hidden; buttonStop.IsEnabled = false; Emulators = new List<String>(EmulatorMatrix.GetLength(0)); for (int i = 0; i < EmulatorMatrix.GetLength(0); i++) { Emulators.Add(EmulatorMatrix[i, 0]); } MainGrid.DataContext = this; }
private void LoadConverse() { String configFile = ""; UsePortReader = false; EmulatorType = DeviceEmulator.EmulatorType.CMS; Converse = null; liveElement = null; rootElement = null; if (EmulatorName == "CMS Inverter") { EmulatorType = DeviceEmulator.EmulatorType.CMS; Converse = (Converse)new Phoenixtec_Converse(Services); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } else if (EmulatorName == "Modbus Growatt") { EmulatorType = DeviceEmulator.EmulatorType.ModbusGrowatt; ModbusConverseCalculations calc = new ModbusConverseCalculations(); Converse = (Converse)new Converse(Services,calc); Converse.SetCheckSum16Endian(true); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } else if (EmulatorName == "Modbus KLNE") { EmulatorType = DeviceEmulator.EmulatorType.ModbusKLNE; ModbusConverseCalculations calc = new ModbusConverseCalculations(); Converse = (Converse)new Converse(Services, calc); Converse.SetCheckSum16Endian(true); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } else if (EmulatorName == "KLNE Inverter") { EmulatorType = DeviceEmulator.EmulatorType.KLNE; Converse = (Converse)new Phoenixtec_Converse(Services); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } else if (EmulatorName == "Modbus Xantrex") { EmulatorType = DeviceEmulator.EmulatorType.ModbusXantrex; ModbusConverseCalculations calc = new ModbusConverseCalculations(); Converse = (Converse)new Converse(Services, calc); Converse.SetCheckSum16Endian(true); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } else if (EmulatorName == "Modbus Sunnyroo") { EmulatorType = DeviceEmulator.EmulatorType.ModbusSunnyroo; ModbusConverseCalculations calc = new ModbusConverseCalculations(); Converse = (Converse)new Converse(Services, calc); Converse.SetCheckSum16Endian(true); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } else if (EmulatorName == "Fronius") { EmulatorType = DeviceEmulator.EmulatorType.Fronius; FroniusConverseCalculations calc = new FroniusConverseCalculations(); Converse = (Converse)new Converse(Services, calc); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } else if (EmulatorName == "Xantrex ASCII") { EmulatorType = DeviceEmulator.EmulatorType.XantrexASCII; Converse = (Converse)new Converse(Services,null); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } else if (EmulatorName == "CC EnviR") { EmulatorType = DeviceEmulator.EmulatorType.CurrentCostEnviR; configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); rootElement = XElement.Load(configFile, LoadOptions.None); liveElement = rootElement.Element("live").Element("msg"); UsePortReader = false; } else if (EmulatorName == "GenericReader") { EmulatorType = DeviceEmulator.EmulatorType.GenericReader; ModbusConverseCalculations calc = new ModbusConverseCalculations(); Converse = (Converse)new Converse(Services, calc); Converse.SetCheckSum16Endian(true); configFile = EmulatorMatrix[(int)EmulatorType, 1]; configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile); ConversationLoader conversations = new ConversationLoader(configFile, Services); conversations.LoadConversations(Converse); Converse.NoTimeout = false; UsePortReader = true; } }
public void LoadConversations(Converse session) { GetNextCommand(); while (!EOF) { String name = ""; // should be conversation label if (CurrentCommand[0] == ':') { if (CurrentCommand.Length < 2) throw new Exception("Conversation Name has zero length"); name = CurrentCommand.Substring(1).Trim(); if (name.Length < 1) throw new Exception("Conversation Name has zero length"); } else throw new Exception("Conversation Name missing"); Conversation conv = new Conversation(session, name, UtilityLog); LoadConversation(session, conv); session.Conversations.Add(conv); } }
public void LoadConversation(Converse session, Conversation conv) { MessageType messageType = MessageType.Read; Message curMessage = null; String message = GetNextCommand(); while (message.Length > 0) { // check for start of new conversation if (message[0] == ':') break; message = message.ToUpper(); char msgType = message[0]; if (msgType == 'R') { messageType = MessageType.Read; } else if (msgType == 'F') { messageType = MessageType.Find; } else if (msgType == 'E') { messageType = MessageType.Extract; } else if (msgType == 'S') { messageType = MessageType.Send; } /* if (messageType == MessageType.Extract) { if (curMessage == null || curMessage.MessageType == MessageType.Send) throw new Exception("Extract must follow Receive message"); } */ curMessage = new Message(conv, messageType, ""); conv.Messages.Add(curMessage); curMessage.ParseMessage(message.Substring(1).Trim()); message = GetNextCommand(); } }