iT邦幫忙

1

[Mx component] 7. 讀取軟元件

  • 分享至 

  • xImage
  •  

以下會使用到的函式有[ReadDeviceBlock2]。

程式撰寫

在實務上讀取建議一次性把所有的範圍讀取回來通訊為最省時,如果把抓回來的數值再丟到記憶體做處理會再快一咪咪。
以下由FX5U的D值(0~7999)與M值(0~7679)做示範

public short[] D_List = new short[8000];
public short[] M_List = new short[480];

plc.ReadDeviceBlock2("D0", D_List.Length, out D_List[0]);
plc.ReadDeviceBlock2("M0", M_List.Length, out M_List[0]);

在這邊可能會有人有疑問M值共有7680個為何陣列大小為480,手冊[375]頁說明讀取M值時1代表16個bit也就是說如果只讀取1個值這個數值就代表M0~M15,所以陣列大小為 7680/16=480。

可能又會有第二個疑問,如何正確得知M1234的狀態為何?
這部分只需要一點計算就可以知道M1234在M_List的第幾個索引中的第幾個bit。

//1.計算M_List索引
int i_value = (int)(address / 16);
//2.計算第幾個bit
int bit_index = address % 16;

利用上述的運算就可以做出自己要用的函式

public bool GetPLC_bit_Statue(short[] list, int address)
{
   bool[] bit = new bool[16];
   int i_value = (int)(address / 16);
   int bit_index = address % 16;
   Word_To_bit16(list[i_value], ref bit);
   return bit[bit_index];
}

//使用方法
bool b = GetPLC_bit_Statue(M_List, 1234);

再來就是DWord,假設D3~4為一個DWord數值

int dword = (int)((D_List[3] & 0xFFFF) | ((D_List[4] & 0xFFFF) << 16));

只要了解如何把數值轉成bit、word、dword就可以隨意組合你想要的資料型式。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言