1. 程式人生 > 實用技巧 >PLC中D0與D1 C語言實現方法

PLC中D0與D1 C語言實現方法

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]
#define
D3 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 :0x55c63daec060
D0_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

對於非偶數地址組合的多字,需採用強制轉換讀取多字資料。