示例#1
0
        /// <summary>
        ///  Erstellt aufgrund von pStatus eine versandfertige byteFolge mit der entsprechenden Kommandorückmeldung (siehe <see cref="m3sExecutionError">m3sExecutionError</see>) im ersten Nutzdatenbyte und zusätzlichen Informationen (nachfolgende Nutzdatenbytes)
        /// </summary>
        /// <param name="pStatus">Ausführungsstatus des Kommandos (siehe <see cref="m3sExecutionError">m3sExecutionError</see>)</param>
        /// <param name="pCommandFrame">Frame, aufgrunddessen das Kommando ausgeführt wurde</param>
        /// <param name="pInfo">Informationsdatenbytes (max. 255) als byte[], auch null kann übergeben werden.</param>
        /// <returns>
        /// <list type="table">
        /// <item><term>versandfertiges ByteArray</term><description>bei fehlerfreier Ausführung</description></item>
        /// <item><term>Exception</term><description>im Fehlerfall</description></item>
        /// </list>
        /// </returns>
        /// <remarks>
        /// Die Funktion kann zusätzliche als Parameter übergebene Informationsbytes an den Kommandosender zurückliefern. Diese werden als byte[] übergeben und hinten an das ExecutionStatus-Byte angehängt. 
        /// <para>
        /// 	<para>Interne <see cref="EDOLL">EDOLL-Behandlung</see> ist implementiert. Das heißt im Fehlerfall (siehe Rückgabewert) kann mit einer Codezeile der Fehler ausgegeben werden:</para>
        /// 	<para><c>string EDOLLHandler.GetLastError();</c></para> 
        /// 	</para>
        /// 	Liste möglicherweise auftretenden EDOLL-Fehler:
        /// <list type="table">
        /// 	<listheader><term><see cref="EDOLLHandler">(interne) Fehlernummer</see></term><description>Beschreibung</description></listheader>
        /// 	<item><term>-19</term><description>Ungültiges Datenframe; Länge, Frameaufbau oder Prüfsumme inkorrekt</description></item>
        /// 	<item><term>-612</term><description>Es wurden zu viele Informationsbyte (>255) übergeben.</description></item>
        /// </list>
        /// (siehe <see cref="EDOLLHandler.GetLastError">EDOLLHANDLER.GetLastError()</see>)
        /// </remarks>
        /// <exception cref="TBL.Exceptions.FrameError">Ungültiges Frame versucht zu verarbeiten</exception>
        public byte[] GetCommandExecutionStateFrame(m3sExecutionError pStatus, byte[] pCommandFrame, byte[] pInfo)
        {
            if(pInfo == null)
                    {
                        return(this.GetCommandExecutionStateFrame(pStatus,pCommandFrame)); // Version ohne Info aufrufen..
                    }

                    if(!this.IsFrame(pCommandFrame))
                    {
                        EDOLLHandler.Error(-19); // Frameerror
                        Exceptions.FrameError ex = new TBL.Exceptions.FrameError("Ungültiges Frame versucht zu verarbeiten");
                        throw ex;
                    }

                    if(pInfo.Length > 255)
                    {
                        EDOLLHandler.Error(-612);
                        Exceptions.ConversionException ex2 = new TBL.Exceptions.ConversionException("Es wurden zu viele Informationsbytes (" + pInfo.Length.ToString() + ") übergeben an: TBL.Communication.Protocol.m3sHandler.GetCommandExecutionStateFrame(). max 255 erlaubt!");
                        throw ex2;
                    }

                    byte[] data = new byte[1 + pInfo.Length];

                    data[0] = Convert.ToByte(pStatus); // Kommando ins Frame einfügen

                    for(int i=0; i<pInfo.Length; i++)	// Informationsbytes einfügen
                    {
                        data[i+1] = pInfo[i];
                    }

                    IM3S_Dataframe toReturn = this.CreateFrame(Convert.ToInt32(pCommandFrame[1]), M3SProtocol.CommandResponse,this.ExtractMasterAddress(pCommandFrame), data, true, false);

                    return(toReturn.GetDataframe());
        }
示例#2
0
        /// <summary>
        /// Erstellt aufgrund von pStatus eine versandfertige byteFolge mit der entsprechenden Kommandorückmeldung (siehe <see cref="m3sExecutionError">m3sExecutionError</see>) im einzigen Nutzdatenbyte. 
        /// </summary>
        /// <param name="pStatus">Ausführungsstatus des Kommandos (<see cref="m3sExecutionError">m3sExecutionError</see>)</param>
        /// <param name="pCommandFrame">Frame, aufgrund dessen ein Kommando ausgeführt wurde</param>
        /// <returns>
        /// <list type="table">
        /// <item><term>versandfertiges ByteArray</term><description>bei fehlerfreier Ausführung</description></item>
        /// <item><term>Exception</term><description>im Fehlerfall</description></item>
        /// </list>
        /// </returns> 
        /// <remarks>
        /// <para>
        /// 	<para>Interne <see cref="EDOLL">EDOLL-Behandlung</see> ist implementiert. Das heißt im Fehlerfall (siehe Rückgabewert) kann mit einer Codezeile der Fehler ausgegeben werden:</para>
        /// 	<para><c>string EDOLLHandler.GetLastError();</c></para> 
        /// 	</para>
        /// 	Liste möglicherweise auftretenden EDOLL-Fehler:
        /// <list type="table">
        /// 	<listheader><term><see cref="EDOLLHandler">(interne) Fehlernummer</see></term><description>Beschreibung</description></listheader>
        /// 	<item><term>-19</term><description>Ungültiges Datenframe; Länge, Frameaufbau oder Prüfsumme inkorrekt</description></item>
        /// </list>
        /// (siehe <see cref="EDOLLHandler.GetLastError">EDOLLHANDLER.GetLastError()</see>)
        /// </remarks>
        /// <exception cref="TBL.Exceptions.FrameError">Ungültiges Frame versucht zu verarbeiten</exception>
        public byte[] GetCommandExecutionStateFrame(m3sExecutionError pStatus, byte[] pCommandFrame)
        {
            byte[] data = new byte[1];

                    if(!this.IsFrame(pCommandFrame))
                    {
                        EDOLLHandler.Error(-19); // Frameerror
                        Exceptions.FrameError ex = new TBL.Exceptions.FrameError("Ungültiges Frame versucht zu verarbeiten");
                        throw ex;
                    }

                    data[0] = Convert.ToByte(pStatus);
                    IM3S_Dataframe toReturn = this.CreateFrame(Convert.ToInt32(pCommandFrame[1]), M3SProtocol.CommandResponse,this.ExtractMasterAddress(pCommandFrame), data, true, false);

                    return(toReturn.GetDataframe());
        }