134 lines
3.6 KiB
C#
134 lines
3.6 KiB
C#
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
|
||
} |