當前位置:編程學習大全網 - 編程語言 - 如何設置帶有"any"或"pointer"數據類型的功能塊

如何設置帶有"any"或"pointer"數據類型的功能塊

step7的幫助文件是這樣說的:

ANY:5字

ANY引用實例 P#M50.0 BYTE 10

區域 = M (存儲區位)

起始位 = 50.0

數據類型 = BYTE

數據類型單元數 = 10

此實例將數據區域MB50定義為MB59。

註1:在使用ANY指針指向目標區域時,只允許BYTE或WORD型的目標區域

註2:某些型號PLC的壹些指令只允許byte,比如s7-400中使用SFB12——“BSEND”,SD_I參數只能是byte類型,輸入word類型在編程時不會報錯誤,程序執行時會出錯。

以上說明ANY型數據是壹種指針,它的信息很豐富,有區域、區域內地址、數據類型,還有POINTER類型所沒有的長度。可以通過解析any型指針,即指針的指針來實現更加強大的功能。比如,編壹個求和功能塊。

pointer參考<詳解西門子間接尋址>如下:

P#中的P是Pointer,是個32位的直接指針。所謂的直接,是指P#中的#後面所跟的數值或者存儲單元,是P直接給定的。這樣P#XXX這種指針,就可以被用來在指令尋址中,作為壹個“常數”來對待,這個“常數”可以包含或不包含存儲區域。例如:

● L P#Q1.0 //把Q1.0這個指針存入ACC1,此時ACC1的內容=82000008(hex)=Q1.0

★ L P#1.0 //把1.0這個指針存入ACC1,此時ACC1的內容=00000008(hex)=1.0

● L P#MB100 //錯誤!必須按照byte.bit結構給定指針。

● L P#M100.0 //把M100.0這個指針存入ACC1,此時ACC1的內容=83000320(hex)=M100.0

● L P#DB100.DBX26.4 //錯誤!DBX已經提供了存儲區域,不能重復指定。

● L P#DBX26.4 //把DBX26.4這個指針存入ACC1,此時ACC1的內容=840000D4(hex)=DBX26.4

我們發現,當對P#只是指定數值時,累加器中的值和區域內尋址指針規定的格式相同(也和存儲器間接尋址雙字指針格式相同);而當對P#指定帶有存儲區域時,累加器中的內容和區域間尋址指針內容完全相同。事實上,把什麽樣的值傳給AR,就決定了是以什麽樣的方式來進行寄存器間接尋址。在實際應用中,我們正是利用P#的這種特點,根據不同的需要,指定P#指針,然後,再傳遞給AR,以確定最終的尋址方式。

在寄存器尋址中,P#XXX作為寄存器AR指針的偏移量,用來和AR指針進行相加運算,運算的結果,才是指令真正要操作的確切地址數值單元!

無論是區域內還是區域間尋址,地址所在的存儲區域都有了指定,因此,這裏的P#XXX只能指定純粹的數值,如上面例子中的★。

  • 上一篇:VB編程題:編寫壹個產生1 至100之間的隨機整數的Function 過程
  • 下一篇:js判斷是否為閏年條件
  • copyright 2024編程學習大全網