五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C#實(shí)現(xiàn)PLC上升沿,下降沿的功能

2023-08-15 14:14 作者:摸魚_專家  | 我要投稿

在B站看過好多上位機(jī)學(xué)習(xí)視頻,還是沒有得到我想要的功能,在此分享一個C#代碼,本人一直在使用并未出現(xiàn)問題

(Tip:本人做過多年P(guān)LC與上位機(jī)經(jīng)驗(yàn),如果大家有興趣,我會分享一個實(shí)用的經(jīng)驗(yàn),包含PLC)

進(jìn)入正題。。。。

實(shí)現(xiàn)沿的本質(zhì)就是一個bool變量記錄一下狀態(tài),如上升沿:

上升沿實(shí)際執(zhí)行方式

下降沿只不過是執(zhí)行位置與標(biāo)記時(shí)候換了一個位置:

下降沿執(zhí)行效果

在上位機(jī)與PLC的通訊中基本上有多處這樣交互,Mes CheckIn ,CheckOut

那在代碼中則充斥著大量的零散變量,從閱讀性和維護(hù)性而言,實(shí)在是很痛苦(本人以前小白的時(shí)候有深刻體驗(yàn)/(ㄒoㄒ)/~~)

經(jīng)過有那么一段時(shí)間,在面向百度編程,面向微軟編程的時(shí)候,找到了一個特殊的東西,

將bool寫個擴(kuò)展方法,就是上升沿和下降沿的方法。與特性?[CallerLineNumber] 相結(jié)合

?這個總的來說就是:在哪調(diào)用的行在方法里面會傳進(jìn)去,就像這樣

傳入了 62 這就是調(diào)用這個擴(kuò)展方法的地方,然后記錄一下數(shù)據(jù),擴(kuò)展方法的實(shí)現(xiàn)就和上面的案例一樣,只不過添加了一個字典來記錄;

那么常規(guī)邏輯就變得很爽了,沒有那么啰嗦

常規(guī)的交互

這個還有一個隱藏的問題,那就是??[CallerLineNumber]? 我多線程執(zhí)行,都在同一行,那是不是就出現(xiàn)Bug了?哈哈哈哈,這個也有辦法解決,大家可以自己思考一下,如果人多的話,我會考慮以后出視頻教學(xué)!

最后我貼上代碼吧

/// <summary>

/// 上升沿,下降沿?cái)U(kuò)展方法(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 (!rEdges.ContainsKey(number))

? ? ? ? {

? ? ? ? ? ? rEdges.Add(number, false);

? ? ? ? ? ? fEdges.Add(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 (!rEdges.ContainsKey(number))

? ? ? ? {

? ? ? ? ? ? rEdges.Add(number, false);

? ? ? ? ? ? fEdges.Add(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;

? ? }

}


C#實(shí)現(xiàn)PLC上升沿,下降沿的功能的評論 (共 條)

分享到微博請遵守國家法律
新郑市| 松溪县| 宁夏| 吕梁市| 苏尼特右旗| 桐柏县| 郸城县| 普宁市| 项城市| 嘉定区| 高密市| 四川省| 五指山市| 新建县| 南宁市| 郸城县| 新竹市| 双柏县| 云浮市| 宽城| 绵阳市| 南丰县| 资阳市| 光山县| 永善县| 上杭县| 济阳县| 光泽县| 衡阳市| 法库县| 石阡县| 浦江县| 呼伦贝尔市| 东乌珠穆沁旗| 长宁区| 卓资县| 柯坪县| 云霄县| 山西省| 颍上县| 葵青区|