Ejemplo n.º 1
0
 public Conversation(Converse converse, String conversationName, IUtilityLog log)
 {
     Converse = converse;
     UtilityLog = log;
     Name = conversationName;
     Messages = new List<Message>();
 }
Ejemplo n.º 2
0
 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;
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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();
            }
        }