在B站看过好多上位机学习视频,还是没有得到我想要的功能,在此分享一个C#代码,本人一直在使用并未出现问题
(资料图片)
(Tip:本人做过多年PLC与上位机经验,如果大家有兴趣,我会分享一个实用的经验,包含PLC)
进入正题。。。。
实现沿的本质就是一个bool变量记录一下状态,如上升沿:
下降沿只不过是执行位置与标记时候换了一个位置:
在上位机与PLC的通讯中基本上有多处这样交互,Mes CheckIn ,CheckOut等
那在代码中则充斥着大量的零散变量,从阅读性和维护性而言,实在是很痛苦(本人以前小白的时候有深刻体验/(ㄒoㄒ)/~~)
经过有那么一段时间,在面向百度编程,面向微软编程的时候,找到了一个特殊的东西,
将bool写个扩展方法,就是上升沿和下降沿的方法。与特性 [CallerLineNumber] 相结合
这个总的来说就是:在哪调用的行在方法里面会传进去,就像这样
传入了 62 这就是调用这个扩展方法的地方,然后记录一下数据,扩展方法的实现就和上面的案例一样,只不过添加了一个字典来记录;
那么常规逻辑就变得很爽了,没有那么啰嗦
这个还有一个隐藏的问题,那就是 [CallerLineNumber] 我多线程执行,都在同一行,那是不是就出现Bug了?哈哈哈哈,这个也有办法解决,大家可以自己思考一下,如果人多的话,我会考虑以后出视频教学!
最后我贴上代码吧
/// <summary>
/// 上升沿,下降沿扩展方法(bool)
/// </summary>
public static class EdgeCore
{
private static readonly Dictionary<int, bool> rEdges = new();
private static readonly Dictionary<int, bool> fEdges = new();
/// <summary>
/// 上升沿
/// </summary>
/// <param name="ldp"></param>
/// <param name="number"></param>
/// <returns></returns>
public static bool RiseEdge(this bool ldp, [CallerLineNumber] int number = 0)
{
if (!(number))
{
(number, false);
(number, false);
}
if (ldp == false) rEdges[number] = false;
if (ldp && rEdges[number]) return false;
if (ldp && !rEdges[number])
{
rEdges[number] = true;
return true;
}
return false;
}
/// <summary>
/// 下降沿
/// </summary>
/// <param name="ldf"></param>
/// <param name="path"></param>
/// <returns></returns>
public static bool FallEdge(this bool ldf, [CallerLineNumber] int number = 0)
{
if (!(number))
{
(number, false);
(number, false);
}
if (ldf == true)
{
fEdges[number] = true;
return false;
}
if (ldf == false && !fEdges[number])
{
fEdges[number] = false;
return false;
}
if (ldf == false && fEdges[number])
{
fEdges[number] = false;
return true;
}
return false;
}
}
关键词:

-
y70s手机首次充电需要多久(y70s手机充电多长时间)首次充电就按照手机说明书上介绍的充电方法进行充电是最标准的,一般需
-
大逆转!伊藤美诚拒绝爆冷,3:1获胜,国乒小将2:0赢得开门红日本生命方面可谓是兵强马壮,拥有奥运冠军伊藤美诚,早田希娜等人,还
-
港元拆息普遍反弹 隔夜息报3.65%创近一周新高8月14日,港元拆息几乎全线上升,仅一年期连跌八天,低见5 39887%。
-
今日美元/加元汇率走势图分析(8月14日)周一,美元 加元徘徊于1 3464关口下方,现交投于1 3464附近,涨幅0 13%
-
市州观察丨通威40万吨绿色基材项目落地苍溪近日,通威股份40万吨绿色基材(工业硅)项目签约落子广元市苍溪县。
-
y70s手机首次充电需要多久(y70s手机充电多长时间)
2023-08-16 10:44:33
-
大逆转!伊藤美诚拒绝爆冷,3:1获胜,国乒小将2:0赢得开门红
2023-08-16 10:39:06
-
港元拆息普遍反弹 隔夜息报3.65%创近一周新高
2023-08-16 10:34:00
-
今日美元/加元汇率走势图分析(8月14日)
2023-08-16 10:40:43
-
市州观察丨通威40万吨绿色基材项目落地苍溪
2023-08-16 10:32:26