using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.Serialization; using System.Text.RegularExpressions; using Aitex.Core.RT.Log; namespace MECF.Framework.Common.Device.Bases; /// /// 信号灯塔元件闪烁模式。 /// [Serializable] [DataContract] public class STBlinkPattern { #region Constructors /// /// 构造信号灯元件闪烁模式。 /// 如果未指定闪烁模式,则默认开一秒,关一秒,无限循环。 /// public STBlinkPattern() { TotalCycles = 0; Pattern = "----------.........."; } /// /// 创建信号灯塔元件闪烁模式对象的实例。 /// /// 总循环次数,0或负值表示无限循环。 /// /// 闪烁模式。 /// 请参考属性以或许模式的设置方法。 /// public STBlinkPattern(uint totalCycles, string pattern) { Debug.Assert(!string.IsNullOrEmpty(pattern), "pattern can not be null"); TotalCycles = totalCycles; Pattern = pattern; } #endregion #region Properties /// /// 设置或返回总循环次数。 /// [DataMember] public uint TotalCycles { get; set; } /// /// 设置或返回闪烁模式。 /// /// 闪烁模式以字符串形式表达,表达式中仅允许包含字符’-‘(英文减号)和’.‘(英文句号)。 /// 其中-表示开100ms,.表示关100ms。 ///
/// 通过'-'和‘.‘的组合,可描述不同的闪烁模式。 ///
///
[DataMember] public string Pattern { get; set; } #endregion #region Static Methods public bool Parse(out List blinkData, out string reason) { // var regex = new Regex(@"(([-\.])(\2*))"); reason = ""; blinkData = null; // 校验Pattern字串的正则,Pattern仅允许有字符’-‘和’.’组成。 var regPatternFormat = new Regex(@"([^\-\.])+"); // Pattern分组正则 var regGroup = new Regex(@"([\-\.])\1*"); if (regPatternFormat.IsMatch(Pattern)) { // 如果存在除-和.以外的字符,则为非法Pattern字串。 reason = "pattern contains illegal characters"; LOG.Error(reason); return false; } var m = regGroup.Matches(Pattern); return true; } /// /// 获取预设的快速闪烁模式。 /// /// /// 开200ms,关200ms,无限循环。 /// /// public static STBlinkPattern GetFastBlinkPattern() { return new STBlinkPattern(0, "--.."); } /// /// 获取预设的慢速闪烁模式。 /// /// /// 开1s,关1s,无限循环。 /// /// public static STBlinkPattern GetSlowBlinkPattern() { return new STBlinkPattern(0, "----------.........."); } /// /// 获取预设的工艺完成闪烁模式。 /// /// /// 以开200ms、关200ms方式连续闪烁3次,然后关1s,循环5次。 /// /// public static STBlinkPattern GetProcessDoneBlinkPattern() { return new STBlinkPattern(5, "--..--..--.........."); } #endregion }