예제 #1
0
 /// <summary>
 /// Creates a new Instance of VirtualTWI-Master (which is operating via M3S-Master/Slave)
 /// </summary>
 /// <param name="rDevComMaster">Ready Instance of M3S-Master</param>
 /// <param name="vM3SSlaveAddress">Address of M3S-Slave which is operating as a M3SSlave-to-TWIMaster</param>
 public VirtualTWIMaster(DevComMaster rDevComMaster, int vM3SSlaveAddress)
 {
     int checkValue = TBL.Check.CheckM3SSlaveAddress(vM3SSlaveAddress);
     if( checkValue != 0)
     {
         throw new System.ArgumentException("The passed vM3SSlaveAddress is invalid!! "+ EDOLL.EDOLLHandler.Verbalize(checkValue) + System.Environment.NewLine + "Refer Documentation of M3S-Protocol for details. ");
     }
     master = rDevComMaster;
     m3sAddr = vM3SSlaveAddress;
 }
예제 #2
0
        /// <summary>
        /// Erstellt gemäß einem übergebenen Konfigurationsfile devCom[] Array mit den entsprechenden <see cref="IDevComHardwareInterface">Interfaces</see>
        /// </summary>
        /// <param name="pConfigFile">Pfad zum Konfigurationsfile vom Typ 'devCom'</param>
        /// <returns>
        /// <list type="table">
        /// 	<listheader><term><see cref="EDOLLHandler">(interne) Fehlernummer</see></term><description>Beschreibung</description></listheader>
        /// 	<item><term>Instanzenarray devCom[]</term><description>Es wird ein Array mit den Instanzierten devComs zurückgegeben</description></item>
        /// 	<item><term>null</term><description>im Fehlerfall (mit <see cref="EDOLLHandler.GetLastError()">EDOLLHandler.GetLastError()</see> kann der Grund ermittelt werden</description></item>		 	
        /// </list>		
        ///  </returns>
        /// <remarks>
        /// <h3>Im Fehlerfall kann die Methode folgende EDOLL-Codes liefern:</h3>
        /// <list type="table">
        /// 	<listheader><term><see cref="TBL.EDOLL.EDOLLHandler.GetLastError">(interne) Fehlernummer</see></term><description>Beschreibung</description></listheader>
        /// 	<item><term>-523</term><description>Ungültige Datensatzlänge in Konfigurationsfile</description></item>
        /// 	<item><term>-526</term><description>Konfigurationsdatei kann nicht zum Lesen geöffnet werden</description></item>
        /// 	<item><term>-534</term><description>Konfigurationsdateityp stimmt nicht.</description></item>
        /// 	<item><term>-535</term><description>Falsche Dateiversion, stimmt nicht mit Bibliotheksversion überein.</description></item>
        /// </list>
        /// <h2>Aufbau der Konfigurationsdatei</h2>
        /// <para>Die Konfigurationsdatei kann in Tabellenkalkulationsprogrammen (Excel, ..) oder im Texteditor erstellt werden. Ein Konfigfileeditor für die TBL ist in Planung. Dabei hat die erste Zeile Informationen über die Dateiversion und den Typ der Konfigurationsdatei, die zweite Zeile beinhaltet die Spaltenbenennung. Ab der dritten Zeile folgen die Daten.</para>
        /// // TODO Konfigurationsfileanleitung...
        /// </remarks>
        public static DevComMaster[] CreateDevComsFromCSV(string pConfigFile)
        {
            // TODO: Sonderzeichen die Excel macht rund um die Felder entfernen

            StreamReader sr;

            // Dateityp prüfen
            if(EDOLLHandler.Error(Check.CheckFileHeaderCSV(pConfigFile, configFileType)))
            {
                stdOut.Error(EDOLLHandler.GetLastError(), "Zeile 1: Dateiheader in '" + pConfigFile + "'");
                return(null);
            }

            int anzDataSets = GetBusNumFromCSV(pConfigFile);

            DevComMaster[] busses = new DevComMaster[anzDataSets];

            // rewind

            sr= new StreamReader(pConfigFile);

            sr.ReadLine(); // Header
            sr.ReadLine(); // Tabellenheader

            for(int i = 0; i<anzDataSets; i++)
            {
                string[] buff = sr.ReadLine().Split(';');

                // TODO Check ob gültiger datensatz!!!!
                // TODO Mitloggen der Busnummern
                // TODO Kein Bus darf 2x vorkommen...
                DevComMaster tmp;

                if(buff[1].Contains("COM") || buff[1].Contains("tty"))
                {
                    devComSerialInterface myIfc = new devComSerialInterface(buff[1], int.Parse(buff[2]));

                     tmp = new DevComMaster(myIfc);

                     if(buff.Length > 3)
                    {
                        tmp.Name = buff[3];
                    }
                    else
                    {
                        tmp.Name = "Untitled";
                    }
                }
                else
                {
                    devComTcpClient myTmpClient = new devComTcpClient(buff[1], Convert.ToInt32(buff[2]));
                    tmp = new DevComMaster(myTmpClient);

                    if(buff.Length > 3)
                    {
                        tmp.Name = buff[3];
                    }
                    else
                    {
                        tmp.Name = "Untitled";
                    }

                }

                busses[i] = tmp;
            }

            return(busses);
        }
예제 #3
0
        void Mnu_startClick(object sender, EventArgs e)
        {
            string readPort;
            // TODO: Auswahl TCP-Client oder USB

            form_cps selector = new form_cps();

            if(selector.ShowDialog() == DialogResult.OK)
            {
             	readPort = selector.SelectedPort;
            }
            else
            {
                return;
            }

            string readBaudrate =  TBL.Routines.InputBox("Specify Baudrate (bps): ","Baudrate", devComSerialInterface.DefaultBaudrate.ToString());

            if(readBaudrate == string.Empty)
            {
                return;
            }

            int baudrate;

            if(!int.TryParse(readBaudrate,out baudrate))
            {
                stdOut.Error("Could not parse Baudrate. Only integer values allowed. Please try again");
                return;
            }

            devComSerialInterface client = new devComSerialInterface(readPort, 38400);
            busListener = new DevComMaster(client);

            if(busListener.ConnectWithoutReset())
            {
                this.Controls.Add(log.Visualisation);
                log.VisualizationFitWindowSize(this);
                log.Location = frameLogTopLeft;
                busListener.ByteReceived += new ByteReceivedEventHandler(bufferAdded);
                mnu_start.Enabled = false;
                mnu_stop.Enabled = true;
            }
            else
            {
                stdOut.Error(EDOLLHandler.GetLastError(), busListener.InfoString);
            }
        }
예제 #4
0
        private static void ping(string[] mainArgs)
        {
            TBL.Communication.IDevComHardwareInterface hwIfc;

            if(0==TBL.Check.CheckSerialPortName(mainArgs[1]))
            {
                int baudrate;

                if(mainArgs.Length < 4)
                {
                    Console.WriteLine("Baudrate defaults to "+TBL.Communication.devComSerialInterface.DefaultBaudrate+"bps");
                    baudrate = TBL.Communication.devComSerialInterface.DefaultBaudrate;
                }
                else
                if(!int.TryParse(mainArgs[3], out baudrate))
                {
                    Console.WriteLine("The specified Baudrate in parameter 4 suffers from invalid syntax: '"+mainArgs[3]+"'");
                    return;
                }

                hwIfc = new TBL.Communication.devComSerialInterface(mainArgs[1], baudrate);

            }
            else if(0==TBL.Check.CheckIP(mainArgs[1]))
            {
                throw new NotImplementedException();
            }
            else
            {
                Console.WriteLine("The specified Interface (parameter 2) suffers from invalid syntax: '"+mainArgs[1]+"'");
                return;
            }

            int slaveAddr;
            DevComMaster m3sMaster = new DevComMaster(hwIfc);

            if(!int.TryParse(mainArgs[2], out slaveAddr))
            {
                Console.WriteLine("The specified Slave-Address in parameter 3 suffers from invalid syntax: '"+mainArgs[2]+"'");
                return;
            }

            int err;

            if(!m3sMaster.Connect(out err))
            {
                Console.WriteLine("Could not connect on Interface." + Environment.NewLine + TBL.EDOLL.EDOLLHandler.Verbalize(err));
            }
            long rtt;

            if(m3sMaster.Ping(slaveAddr, out rtt, out err))
            {
                Console.WriteLine("Ping to Slave #"+slaveAddr.ToString()+" successful, RTT=" + rtt.ToString());
            }
            else
            {
                Console.WriteLine("ReadTimeout reached when pinging Slave #"+slaveAddr);
            }

            byte[] payload = {0xF0, 0xC0, 0xC0 , 0xF8 , 0x00 , 0xC0 , 0x80 , 0x00 , 0xC0 , 0xC0 , 0x80 , 0xC0 , 0x00 , 0x00 , 0x80 , 0x00 , 0xC0 , 0xC0 , 0xC0 , 0xC0 , 0x80 , 0xC0 , 0xC0 , 0x00 , 0xF8 , 0xF0 , 0xC0 , 0xC0 , 0xF0 , 0xC0 , 0xC0 , 0xF8};
            byte[] updateCmd = {(byte)TBL.Communication.Protocol.M3SCommand.Update};
            byte[] errorCMD = {0xff};

            if(!m3sMaster.SendCommand(1, errorCMD, out err, true))
            {
                TBL.EDOLL.stdOut.Error(TBL.EDOLL.EDOLLHandler.Verbalize(err));
            }

            if(!m3sMaster.SendData(1,payload, out err, true))
            {
                TBL.EDOLL.stdOut.Error(TBL.EDOLL.EDOLLHandler.Verbalize(err));
            }

            if(!m3sMaster.SendCommandBroadcast(updateCmd, out err))
            {
                TBL.EDOLL.stdOut.Error(TBL.EDOLL.EDOLLHandler.Verbalize(err));
            }
        }