[Mx component] 7. 读取软元件

以下会使用到的函式有[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.计算第几个bitint 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就可以随意组合你想要的资料型式。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章