using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Xml.Serialization;
namespace Aitex.Core.Util
{
///
/// 下降沿信号检测类
///
/// 设计目的:
/// 用于信号下降沿事件检测
///
/// 使用场合:
/// 系统输入数字信号,1->0跳变检测
///
public class F_TRIG
{
///
/// 构造函数
///
public F_TRIG()
{
Q = false;
M = true;
}
///
/// 检测信号输入
///
public bool CLK
{
set
{
if (M != value && !value)
Q = true;
else
Q = false;
M = value;
}
get
{
return M;
}
}
//clear
public bool RST
{
set
{
Q = false;
M = true;
}
}
///
/// 检测结果输出
///
[XmlIgnore]
public bool Q { get; private set; }
///
/// 记录上一次输入信号值
///
[XmlIgnore]
public bool M { get; private set; }
}
///
/// 实现滤波功能
///
public class FR_TRIG
{
private bool lastValue;
private bool currentValue;
private bool output;
///
/// 构造函数
///
public FR_TRIG()
{
lastValue = false;
currentValue = false;
output = false;
}
///
/// 检测信号输入
///
public bool CLK
{
set
{
currentValue = value;
if (currentValue != lastValue)
{
output = true; // 信号变化时立即输出 true
}
else
{
output = false; // 信号不变时输出 false
}
lastValue = currentValue;
}
get
{
return currentValue;
}
}
public bool RST
{
set
{
currentValue = false;
lastValue = false;
output = false;
}
}
///
/// 检测结果输出
///
[System.Xml.Serialization.XmlIgnore]
public bool Q { get => output; private set => output = value; }
///
/// 记录上一次输入信号值
///
[System.Xml.Serialization.XmlIgnore]
public bool M { get => currentValue; private set => currentValue = value; }
}
///
/// 上升沿信号检测类
///
/// 设计目的:
/// 用于信号上升沿事件检测
///
/// 使用场合:
/// 系统输入数字信号,0->1跳变检测
///
public class R_TRIG
{
///
/// 构造函数
///
public R_TRIG()
{
Q = false;
M = false;
}
///
/// 检测信号输入
///
public bool CLK
{
set
{
if (M != value && value)
Q = true;
else
Q = false;
M = value;
}
get
{
return M;
}
}
public bool RST
{
set
{
Q = false;
M = false;
}
}
///
/// 检测结果输出
///
[XmlIgnore]
public bool Q { get; private set; }
///
/// 记录上一次输入信号值
///
[XmlIgnore]
public bool M { get; private set; }
}
///
/// 边沿信号检测类
///
/// 设计目的:
/// 用于信号上升沿/下降沿事件检测
///
/// 使用场合:
/// 初始值为0
/// 系统输入数字信号,0->1跳变检测 Q 触发
/// 1->0 R
///
public class RD_TRIG
{
///
/// 构造函数
///
public RD_TRIG()
{
R = false;
T = false;
M = false;
}
///
/// 检测信号输入
///
public bool CLK
{
set
{
if (M != value)
{
R = value;
T = !value;
}
else
{
R = false;
T = false;
}
M = value;
}
get
{
return M;
}
}
public bool RST
{
set
{
R = false;
T = false;
M = false;
}
}
///
/// 检测结果输出, 上升沿触发 rising edge
///
[XmlIgnore]
public bool R { get; private set; }
///
/// 检测结果输出, 下降沿触发 trailing edge
///
[XmlIgnore]
public bool T { get; private set; }
///
/// 记录上一次输入信号值
///
[XmlIgnore]
public bool M { get; private set; }
}
}