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