應用領域 | 電子/電池 |
---|
6AG1232-4HD32-4XB0
SIPLUS S7-1200 SM 1232 4AQ 帶防腐蝕涂層 根據 6ES7232-4HD32-0XB0 . SIMATIC S7-1200,模擬輸出, SM 1232,4 AO, +/-10V,14 位分辨率, 或 0-20mA,13 位分辨率
![]() |
參考價 | ¥11 |
訂貨量 | 1 件 |
更新時間:2023-07-17 13:12:26瀏覽次數:489
聯系我們時請說明是化工儀器網上看到的信息,謝謝!
西門子1200寬溫型擴展模塊6AG12324HD324XB0
![]() | 6AG1232-4HD32-4XB0 SIPLUS S7-1200 SM 1232 4AQ 帶防腐蝕涂層 根據 6ES7232-4HD32-0XB0 . SIMATIC S7-1200,模擬輸出, SM 1232,4 AO, +/-10V,14 位分辨率, 或 0-20mA,13 位分辨率 |
SIEMENS西門子
*,質量保證,保修一年
專業銷售及維修西門子各類工控自動化配件;
:S7-200CN、S7-200SMART、S7-300、S7-400、 S7-1200、S7-1500、ET200、LOGO邏西門子可編程控制器輯控制模塊
西門子HMI人機界面:觸摸屏
西門子變頻器:MM420、MM430、MM440、G110、G120、6SE70
西門子工業以太網:通訊網卡、通訊電纜、通訊接頭、總線連接器 工控機、交換機、自動化軟件等系型號齊全,快速報價,買我們的產品無憂所值,我們的產品都承諾質保一年,讓您買的省心舒心,用的放心!
數據結構 算法 效率
一、問題背景
為了讓您更好的理解此貼,請先移駕看帖子
【萬泉河】我現在告訴你們不用M和T的程序好在哪里
中Zane版在44樓提出的問題,
本帖要說的就是IO地址沖突檢測,也就是IO地址一性檢測中,“空間換時間”策略的應用。
二、由來
在帖子[舊事]--初踏征途雖然實現了地址沖突檢測的功能,但由于對數據組織的倉促,以至于在做地址雷同查找操作時(查找歷史數據中是否已經存在當前的設定值),使用了遍歷存儲單元的方法,因此查找效率低下,當IO點的規模越大,需要進行的比較操作的次數越多。
當時手頭有別的事情要做,也就沒有再深究。
原來的數據規劃如圖所示
數據塊DB中存儲了所有有有效的歷史數據,每一批歷史數據由兩部分組成,A區(輸入I地址)數據(包含4個DWORD數據)和B區(輸出O地址)數據(3個DWORD數據),第個DWORD包括IO地址的字節號WORD和位號WORD,圖示共有三批歷史數據、一批當前數據,
算法:分別把當前批數據中的A區數據中的每個數據與每批歷史數據中A區中的每個數據做比較,當前批數據中的B區數據中的每個數據與每批歷史數據中B區中的每個數據也做比較,如果數值相同,則使能輸出標志Same。
上個周末看《算法(第4版》
3.4節的“散列表”(Hash Table),突然想起來可以把數據再重新組織一下,提高查找效率,于是有了此帖。
三、改進
現將數據重新組織如下,IO地址格式為Byte.Bit,每個Byte有8個Bit,這里使用一個包含8個數據類型為INT元素的數據代表一個尋址字節Byte,在博途平臺下的PLC數據類型中我們新建一個名為BitsTable的數據類型,它包含一個數組,有8個INT類型的元素,我們將其默認值設為“-1”(表示初始狀態)而不是“0”;
另外我們在全局數據塊DB中,建立一個包含元素類型為“BitsTable"的數組,并將其命名為”AddressTable",或者為“BytesTable"則更容易理解,
至此,我們建立了一個可以形象為如下圖所示的表格
四、算法描述
至此,我們再處理IO地址沖突檢測就方便多了,當設定值Buffer中ByteSet和BitSet在合法范圍內時,如ByteSet=0,BitSet=3時,我們只需要直接使用數組的索引首先找到AddressTable[0],再找到其中的元素BitsTable[3],即將對應的ByteSet、BitSet值代入并判斷表達式”AddressTable[ByteSet].BitsTable[BitSet] = -1“是否成立(當值為”-1“時表示此地址I0.3(以輸入I為例)未被使用,然后執行如下語句:
AddressTable[ByteSet].BitsTable[BitSet] = BitSet; // set value of BitSet to BitsTable[BitSet]
ByteSet := -1;
BitSet := -1;
將BitSet值寫入對應的數組元素,并將地址設定Buffer中的ByteSet和BitSet初始為”-1“,為下次地址輸入作準備,如果再次輸入ByteSet=0,BitSet=3時,
IF AddressTable[ByteSet].BitsTable[BitSet] = -1 THEN
#AddressAlreadyExists := TRUE; //output "AddressAlreadyExists" bit
算法簡圖如下:
功能塊FB的接口如圖,
塊內做了兩個輔助功能,ResetChannel和ResetAllChannel,用來將”-1“賦值給BitsTable[]中的單個元素,和所有元素,對接口進行修改后,還可以復位某個AddressTable[k],或者連續幾個
AddressTable[k] -- AddressTable[k+n],有興趣可自行更改。
西門子1200寬溫型擴展模塊6AG12324HD324XB0