Sic.Framework-Nanjing-Baishi/MECF.Framework.Common/MECF/Framework/Common/Device/Bases/STBlinkPattern.cs

134 lines
3.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}