Sic.Framework/MECF.Framework.Common/MECF/Framework/Common/Device/Bases/STBlinkPattern.cs

134 lines
3.6 KiB
C#
Raw Normal View History

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;
/// <summary>
/// 信号灯塔元件闪烁模式。
/// </summary>
[Serializable]
[DataContract]
public class STBlinkPattern
{
#region Constructors
/// <summary>
/// 构造信号灯元件闪烁模式。
/// <para>如果未指定闪烁模式,则默认开一秒,关一秒,无限循环。</para>
/// </summary>
public STBlinkPattern()
{
TotalCycles = 0;
Pattern = "----------..........";
}
/// <summary>
/// 创建信号灯塔元件闪烁模式对象的实例。
/// </summary>
/// <param name="totalCycles">总循环次数0或负值表示无限循环。</param>
/// <param name="pattern">
/// 闪烁模式。
/// 请参考属性<see cref="Pattern"/>以或许模式的设置方法。
/// </param>
public STBlinkPattern(uint totalCycles, string pattern)
{
Debug.Assert(!string.IsNullOrEmpty(pattern), "pattern can not be null");
TotalCycles = totalCycles;
Pattern = pattern;
}
#endregion
#region Properties
/// <summary>
/// 设置或返回总循环次数。
/// </summary>
[DataMember]
public uint TotalCycles { get; set; }
/// <summary>
/// 设置或返回闪烁模式。
/// <remarks>
/// 闪烁模式以字符串形式表达,表达式中仅允许包含字符’-‘(英文减号)和’.‘(英文句号)。
/// 其中<value>-</value>表示开100ms<value>.</value>表示关100ms。
/// <br/>
/// 通过'-'和‘.‘的组合,可描述不同的闪烁模式。
/// </remarks>
/// </summary>
[DataMember]
public string Pattern { get; set; }
#endregion
#region Static Methods
public bool Parse(out List<uint> 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;
}
/// <summary>
/// 获取预设的快速闪烁模式。
/// </summary>
/// <remarks>
/// 开200ms关200ms无限循环。
/// </remarks>
/// <returns></returns>
public static STBlinkPattern GetFastBlinkPattern()
{
return new STBlinkPattern(0, "--..");
}
/// <summary>
/// 获取预设的慢速闪烁模式。
/// </summary>
/// <remarks>
/// 开1s关1s无限循环。
/// </remarks>
/// <returns></returns>
public static STBlinkPattern GetSlowBlinkPattern()
{
return new STBlinkPattern(0, "----------..........");
}
/// <summary>
/// 获取预设的工艺完成闪烁模式。
/// </summary>
/// <remarks>
/// 以开200ms、关200ms方式连续闪烁3次然后关1s循环5次。
/// </remarks>
/// <returns></returns>
public static STBlinkPattern GetProcessDoneBlinkPattern()
{
return new STBlinkPattern(5, "--..--..--..........");
}
#endregion
}