博圖 SCL 編程技巧:靈活實現上升沿與下降沿檢測案例分享(上)

博圖 SCL 編程技巧:靈活實現上升沿與下降沿檢測案例分享

在 PLC 編程中,檢測信號從?0?變為?1?(上升沿) 或從?1?變為?0?(下降沿) 是最基礎也是最關鍵的操作之一。它常用于啟動單次動作、計數、狀態切換等場景。在西門子 TIA Portal 環境中,雖然梯形圖 (LAD) 提供了直觀的?P?(上升沿) 和?N?(下降沿) 指令,但在?SCL (結構化控制語言)?中,我們擁有更靈活和強大的實現方式。本文將分享幾種在 SCL 中實現邊沿檢測的方法及其適用場景。

方法 1:使用標準系統函數塊 (R_TRIG / F_TRIG)

這是最推薦、最符合 IEC 61131-3 標準且資源管理最清晰的方式。TIA Portal 提供了現成的邊沿檢測函數塊。

1.1 上升沿檢測 (R_TRIG)l

VAR// 輸入信號InputSignal: BOOL;// 實例化上升沿檢測塊RisingEdgeDetector: R_TRIG;// 輸出 (檢測到上升沿時為 TRUE)OutputOnRisingEdge: BOOL;
END_VAR

// 主執行邏輯
RisingEdgeDetector(CLK := InputSignal); // 將輸入信號連接到 CLK 引腳
OutputOnRisingEdge := RisingEdgeDetector.Q; // 讀取檢測結果

1.2 下降沿檢測 (F_TRIG)

VAR// 輸入信號InputSignal_1: BOOL;// 實例化下降沿檢測塊FallingEdgeDetector: F_TRIG;// 輸出 (檢測到下降沿時為 TRUE)OutputOnFallingEdge: BOOL;
END_VAR

// 主執行邏輯
FallingEdgeDetector(CLK := InputSignal_1); // 將輸入信號連接到 CLK 引腳
OutputOnFallingEdge := FallingEdgeDetector.Q; // 讀取檢測結果

優點:

  • 標準化:?符合國際標準,代碼可讀性高。

  • 封裝性:?邊沿檢測邏輯被封裝在塊內,隱藏了內部狀態。

  • 易維護:?塊自動管理其內部存儲(通常是靜態變量),無需用戶手動聲明“上次狀態”。

  • 多實例化:?同一個函數塊可以輕松創建多個實例檢測不同信號。

缺點:

  • 需要實例化一個單獨的塊,稍微增加一點代碼量(但通常可以忽略)。

方法 2:純 SCL 代碼實現 (使用靜態變量存儲上次狀態)

如果你不想實例化額外的塊,或者需要在簡單邏輯中快速實現,可以直接用 SCL 代碼編寫邊沿檢測邏輯。核心是使用靜態變量 (STATIC) 保存信號在上一掃描周期的狀態

2.1 上升沿檢測 (純 SCL)

scl

VAR_INPUTIn: BOOL; // 輸入信號
END_VAR
VAR_OUTPUTOut: BOOL; // 檢測到上升沿輸出 TRUE (僅一個周期)
END_VAR
VARLastState: BOOL := FALSE; // STATIC 變量 (默認初始化 FALSE) 存儲上一次狀態
END_VAR


// 主執行邏輯
Out := In AND NOT LastState; // 當前為1且上次為0 => 上升沿
LastState := In; // 為下一次掃描保存當前狀態

2.2 下降沿檢測 (純 SCL)

scl

VAR_INPUTIn_1: BOOL; // 輸入信號
END_VAR
VAR_OUTPUTOut_1: BOOL; // 檢測到下降沿輸出 TRUE (僅一個周期)
END_VAR

VARLastState_1: BOOL := FALSE; // STATIC 變量 (默認初始化 FALSE) 存儲上一次狀態
END_VAR
// 主執行邏輯
Out_1 := NOT In_1 AND LastState_1; // 當前為0且上次為1 => 下降沿
LastState_1 := In_1; // 為下一次掃描保存當前狀態

優點:

  • 簡潔:?對于單個信號的簡單檢測,代碼非常緊湊。

  • 無額外實例:?不需要創建?R_TRIG/F_TRIG?實例。

  • 理解底層原理:?幫助理解邊沿檢測的本質。

缺點:

  • 狀態管理:?需要手動聲明和管理靜態變量?LastState

  • 可讀性稍差:?對于不熟悉此模式的讀者,不如直接調用函數塊直觀。

  • 復用性差:?如果需要檢測多個信號,需要為每個信號復制一份類似的代碼(聲明單獨的?LastState),不如函數塊實例化方便。

  • 易出錯:?如果忘記更新?LastState?或在錯誤的位置更新,會導致邏輯錯誤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84144.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84144.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84144.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習入門Day3--魚書學習(2)

這倆天剛忙完答辯的事情,終于有時間學習了 一、3層神經網絡實現 1.本節中的符號使用說明。 w 12 ( 1 ) w_{12}^{(1)} w12(1)?表示前一層的第2個神經元 x 2 x_{2} x2?到后一層的第一個神經元 a 1 a_{1} a1?的權重。權重右下角按照“后一層的索引號、前一層的索引…

服務器 | Centos 9 系統中,如何部署SpringBoot后端項目?

系列文章目錄 虛擬機 | Ubuntu 安裝流程以及界面太小問題解決 虛擬機 | Ubuntu圖形化系統: open-vm-tools安裝失敗以及實現文件拖放 虛擬機 | Ubuntu操作系統:su和sudo理解及如何處理忘記root密碼 文章目錄 系列文章目錄前言一、環境介紹二、 使用syst…

CNN核心機制深度解析:卷積池化原理 PyTorch實現經典網絡

本文較長,建議點贊收藏,以免遺失。更多AI大模型應用開發學習視頻及資料,盡在聚客AI學院。 本文系統講解CNN核心原理、經典網絡架構和圖像分類實戰,涵蓋卷積層、池化層、LeNet/AlexNet/VGG/ResNet設計思想,并提供CIFAR-…

6個月Python學習計劃 Day 17 - 繼承、多態與魔術方法

第三周 Day 4 🎯 今日目標 理解類的繼承和方法重寫掌握多態思想及其實際應用了解并使用常見的魔術方法(如 str、len 等) 🧬 類的繼承(Inheritance) Python 支持單繼承與多繼承,常用語法如下&…

抖音怎么下載視頻

抖音作為一款短視頻社交平臺,憑借其獨特的短視頻形式和豐富的內容,吸引了大量用戶。有些用戶在欣賞完抖音視頻后,想要將其保存下來,以便日后觀看。如何在抖音下載視頻呢?本文將為您詳細介紹抖音視頻下載的技巧和方法。…

使用MinIO搭建自己的分布式文件存儲

目錄 引言: 一.什么是 MinIO ? 二.MinIO 的安裝與部署: 三.Spring Cloud 集成 MinIO: 1.前提準備: (1)安裝依賴: (2)配置MinIO連接: &…

uni-app 如何實現選擇和上傳非圖像、視頻文件?

在 uni-app 中實現選擇和上傳非圖像、視頻文件,可根據不同端(App、H5、小程序)的特點,采用以下方法: 一、通用思路(多端適配優先推薦) 借助 uni.chooseFile 選擇文件,再用 uni.upl…

正點原子[第三期]Arm(iMX6U)Linux移植學習筆記-12.1 Linux內核啟動流程簡介

前言: 本文是根據嗶哩嗶哩網站上“Arm(iMX6U)Linux系統移植和根文件系統構鍵篇”視頻的學習筆記,在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。 引用: …

UDP與TCP通信協議技術解析

文章目錄 協議基礎原理TCP:可靠的面向連接通信UDP:高效的無連接通信 性能特征分析TCP性能表現UDP性能表現 應用場景分析TCP適用場景UDP適用場景 技術實現考量錯誤處理策略網絡資源利用 選擇決策框架可靠性需求評估性能要求分析 混合方案設計協議組合策略…

mysql 頁的理解和實際分析

目錄 頁(Page)是 Innodb 存儲引擎用于管理數據的最小磁盤單位B樹的一般高度記錄在頁中的存儲 innodb ibd文件innodb 頁類型分析ibd文件查看數據表的行格式查看ibd文件 分析 ibd的第4個頁:B-tree Node類型先分析File Header(38字節-描述頁信息…

【優選算法】C++滑動窗口

1、長度最小的子數組 思路&#xff1a; class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {// 滑動窗口// 1.left0,right0// 2.進窗口( nums[right])// 3.判斷// 出窗口// (4.更新結果)// 總和大于等于 target 的長度最小的 子數組…

ffmpeg(四):濾鏡命令

FFmpeg 的濾鏡命令是用于音視頻處理中的強大工具&#xff0c;可以完成剪裁、縮放、加水印、調色、合成、旋轉、模糊、疊加字幕等復雜的操作。其核心語法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "濾鏡參數" output.mp4或者帶音頻濾鏡&#xff1a; ffmpeg…

408考研逐題詳解:2009年第33題

2009年第33題 在 OSI 參考模型中&#xff0c;自下而上第一個提供端到端服務的層次是&#xff08; &#xff09; A. 數據鏈路層 \qquad B. 傳輸層 \qquad C. 會話層 \qquad D.應用層 解析 本題主要考查 OSI 參考模型各層的核心功能、端到端服務的定義。 OSI 參考模型&am…

CentOS 7.9安裝Nginx1.24.0時報 checking for LuaJIT 2.x ... not found

Nginx1.24編譯時&#xff0c;報LuaJIT2.x錯誤&#xff0c; configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…

自制喜悅字貼

一、想法 據說&#xff0c;把“喜悅”兩個字掛在家里顯眼的地方&#xff0c;時常看到&#xff0c;就能心情愉悅。剛好最近在學習前端flex布局&#xff0c;用代碼實現&#xff0c;導出圖片&#xff0c;打印出來&#xff0c;帖在家里&#xff0c;非常nice。現在分享給大家。 二…

每日八股文6.3

每日八股-6.3 Mysql1.COUNT 作用于主鍵列和非主鍵列時&#xff0c;結果會有不同嗎&#xff1f;2.MySQL 中的內連接&#xff08;INNER JOIN&#xff09;和外連接&#xff08;OUTER JOIN&#xff09;有什么主要的區別&#xff1f;3.能詳細描述一下 MySQL 執行一條查詢 SQL 語句的…

量化面試綠皮書:6. 燒繩子計時

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 6. 燒繩子計時 你有兩根繩子&#xff0c;每根繩子燃燒需要1小時。但是任何一根繩子在不同點都有不同的密度&#xff0c;所以不能保證繩子內不…

2-深度學習挖短線股1

選短線個股的流程 &#xff08;1&#xff09;數據預處理&#xff0c;根據短線個股篩選標準&#xff0c;給個股日線數據打標。 &#xff08;2&#xff09;模型訓練&#xff0c;針對每只股票&#xff0c;訓練得到分類模型。 &#xff08;3&#xff09;結果預測&#xff0c;根據訓…

【數據分析】探索嬰兒年齡變化對微生物群落(呼吸道病毒和細菌病原體)結構的影響

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹1. 混合效應邏輯回歸模型2. 隨機森林模型3. Maaslin2 分析加載R包數據下載導入數據數據預處理混合效應邏輯回歸模型分析微生物群落結構隨年齡的變化隨機森林模型預測病原體定植Maas…

實戰:子組件獲取父組件訂單信息

最佳實踐建議 優先使用 props&#xff1a;適合父子組件直接通信&#xff0c;數據流向清晰復雜場景用 eventBus&#xff1a;跨組件通信推薦使用 mitt 庫避免過度使用 $parent&#xff1a;會導致組件耦合度高&#xff0c;難以維護provide/inject 適用于跨層級&#xff1a;如主題…