最近做項目,使用IO-Link器件讀取從站數(shù)據(jù)時,使用從雙字中提取字、字節(jié)和位的知識,作為私人,以前沒有仔細注意過這個細節(jié),所以查了一下資料
以下主要從資料查詢、準備步驟、步驟驗證進行記錄。
一、資料查詢:
在網(wǎng)上搜索西門子數(shù)據(jù)類型的相關資料,相信有一大堆。 最常見的是如下圖所示,說明兩個字符和字節(jié)的關系。
根據(jù)這個資料,進行實驗驗證;
二、程序的準備
資料大部分用m塊介紹雙字和字節(jié)等的關系,但實際上由于DB塊的數(shù)據(jù)很多,在這次的實驗中為了比較m塊和DB塊的內(nèi)容容易觀察,準備如下。
1、新建數(shù)據(jù)庫塊,創(chuàng)建必要的變量:
2、為了便于比較,創(chuàng)建m區(qū)變量。 這里取MD24,將其分解為字、字節(jié)、位,以便于觀察。
3、FC程序的編制:主要將雙字分解為字、雙字,將雙字發(fā)送到單詞、單詞中。 為了容易設定雙字的位,特意用數(shù)組向雙字的位各發(fā)送1位。
三、程序驗證:
省略程序下載和模擬等操作步驟。 因為那個不是重點,所以直接出示測試結(jié)果。 如果從數(shù)組中分別設定不同的位,就相當于分別設定雙字中的位,可以分別觀察結(jié)果。 現(xiàn)在,如果取代表性的2個比特,即第0個和第16個比特1,則結(jié)果如下2個圖所示。
如果通過測試,就會明白以下法則。
西門子兩個字的中位排列是從右向左排列的。 這和平時寫字的順序正好相反,但我想也可以從進制的位數(shù)開始記憶。 例如,我們是十進制數(shù),從右向左分別是個、十、百、千、萬等位。 這個正好像那個。
可以看到2、2個文字傳遞給單詞的情況,在剪切數(shù)據(jù)時很有用。 因為不做具體總結(jié),所以可以體驗。
第三、三個也是我最開始很混亂的地方。 如果觀察2個字符的4個字節(jié),就會發(fā)現(xiàn)與位的排列順序相同。 也就是說,0位在右邊,依次向左變大。 但是,m區(qū)其實是按這個方向排列的,但是很混亂。 以上圖為例,設置0位時,DB中第0字節(jié)有變化,但m區(qū)對應MB27變化。 如最初的資料所示,對應第1字節(jié)的變化。但是,MB27是第0字節(jié),MB26是第1字節(jié),按順序類推,大小和字節(jié)的順序再次相反。 仔細想想就知道發(fā)生了什么,但依然有點不舒服。
遇到同樣情況的人,應該不只我一個。 分享一下,希望對有需要的人有幫助。 第一次發(fā)送共享粘貼。 文章有點不好。 請諒解。 有不足和錯誤。 歡迎斧正。