PLC中D0與D1 C語言實現方法
阿新 • • 發佈:2020-12-06
PLC中D0與D1資料儲存 C語言實現方法
這裡思路是採用共用體建立一個最大型別2位元組的記憶體,再使用陣列將其拆分高低各1個位元組。
像三菱信捷PLC,D資料暫存器單字為16位,雙字為32位,所以三菱PLC以及其它PLC都是32位CPU組成。
#include <stdio.h> //D資料暫存器記憶體分配共用體,陣列中的元素記憶體是連續分配的 union{ int D_; short int D__[2]; }D[7999]; //巨集定義成D0的樣子 #define D0 D[0].D__[0] #define D1 D[0].D__[1] #define D2 D[1].D__[0] #defineD3 D[1].D__[1] int main(){ printf("D_address :%p\n",D); //列印陣列D的首地址 printf("D0_address:%p\n",&D0); //列印D0地址 printf("D1_address:%p\n",&D1); printf("D2_address:%p\n",&D2); printf("D3_address:%p\n",&D3); puts("||||||||||||||||||||||||"); D0 = 0x01; D1 = 0x10; D2= 0x0f; D3 = 0xf0; printf("D[0].D_value:%d\n",D[0].D_); //列印資料 printf("D0_value :%hd\n",D0); printf("D1_value :%hd\n",D1); printf("D[1].D_value:%d\n",D[1].D_); printf("D2_value :%hd\n",D2); printf("D3_value :%hd\n",D3); return 0; }
輸出結果:
D_address :0x55c63daec060D0_address:0x55c63daec060 D1_address:0x55c63daec062 D2_address:0x55c63daec064 D3_address:0x55c63daec066 |||||||||||||||||||||||| D[0].D_value:1048577 //讀取D1D0雙字資料 D0_value :1 //D0資料 D1_value :16 D[1].D_value:15728655 D2_value :15 D3_value :240
資料是偶數儲存上述操作應該都滿足,比如將數0X01儲存在D0中,0X10儲存在D1中,對應十進位制數分別為1和16,讀取其雙字時其值為:1048577
對於非偶數地址組合的多字,需採用強制轉換讀取多字資料。