/// <summary>
        /// Initializes a new instance of the <see cref="Communication"/> class.
        /// </summary>
        /// <param name="communicationConfiguration">
        /// The communication settings.
        /// </param>
        public Communication(string communicationConfiguration)
        {
            if (communicationConfiguration != string.Empty)
            {
                this.communicationSettings = new List <CommunicationSetting>();
                string[] parts = communicationConfiguration.Split(';');

                if (parts.Length > 2)
                {
                    this.protocol = parts[0];
                    this.communicationDriverName   = parts[1];
                    this.communicationHardwareName = parts[2];
                }

                for (int counter = 3; counter < parts.Length; counter = counter + 2)
                {
                    if (counter + 1 < parts.Length)
                    {
                        CommunicationSetting buffer = new CommunicationSetting(parts[counter], parts[counter + 1]);
                        this.communicationSettings.Add(buffer);
                    }
                    else
                    {
                        CommunicationSetting buffer = new CommunicationSetting(parts[counter], string.Empty);
                        this.communicationSettings.Add(buffer);
                    }
                }
            }
        }
        /// <summary>
        /// The Get Specific Setting function
        /// </summary>
        /// <param name="settingName">Setting to search for</param>
        /// <returns>Communication Settings object</returns>
        public CommunicationSetting GetSpecificSetting(string settingName)
        {
            bool foundInSettingNames         = false;
            bool foundInSettingValues        = false;
            CommunicationSetting returnValue = null;

            // Phase 1: search parameter name within names
            foreach (CommunicationSetting communicationSetting in this.CommunicationSettings)
            {
                if (communicationSetting.SettingName.Equals(settingName))
                {
                    foundInSettingNames = true;
                    communicationSetting.IsValidlyConfigured = true;
                    returnValue = communicationSetting;
                }
            }

            if (foundInSettingNames)
            {
                Log.Info(LogInfo.Namespace(MethodBase.GetCurrentMethod()), "Parameter [" + settingName + "] found on predefined location in Communication Settings string.");
                return(returnValue);
            }

            // Phase 2: search parameter names within values to check for a missconfiguration
            foreach (CommunicationSetting settingsForValue in this.CommunicationSettings)
            {
                if (settingsForValue.SettingValue.Equals(settingName))
                {
                    foundInSettingValues = true;
                    settingsForValue.IsValidlyConfigured = false;
                    returnValue = settingsForValue;
                }
            }

            if (foundInSettingValues)
            {
                Log.Error(LogInfo.Namespace(MethodBase.GetCurrentMethod()), "Parameter [" + settingName + "] found on wrong location in Communication Settings string. It was found on a place for Setting Value instead of a place or Setting Name.");
                return(returnValue);
            }

            Log.Info(LogInfo.Namespace(MethodBase.GetCurrentMethod()), "Not all paramaters have been configured by Communication Settings string.");
            return(null);
        }