环境:打开三菱PLC安装目录下,Act>Samples>Vcs.NET>Sample2010>bin>Debug目录下分别加载以下 dll

WinForm前台设计:(图中的两紫色方块控件是从官方提供的Sample2010(在Act>Samples>Vcs.NET目录下)将这两个控件copy到Form1窗口中即可 )

关于三菱PLC的IO监控代码:
public partial class Form1 : Form{private static string iniPath = Application.StartupPath + "\\IO.ini";//通过读取ini文件动态创建的but集合static List
INI读取类:
class INI{/// /// 获取某个指定节点(Section)中所有KEY和Value/// /// 节点名称/// 返回值的内存地址,每个之间用\0分隔/// 内存大小(characters)/// Ini文件/// 内容的实际长度,为0表示没有内容,为nSize-2表示内存大小不够[System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]private static extern uint GetPrivateProfileSection(string lpAppName, IntPtr lpReturnedString, uint nSize, string lpFileName);public static Dictionary GetINISectionDic(string iniFile, string section){uint MAX_BUFFER = 32767;string[] items = null;//分配内存IntPtr pReturnedString = System.Runtime.InteropServices.Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char));uint bytesReturned = GetPrivateProfileSection(section, pReturnedString, MAX_BUFFER, iniFile);if (!(bytesReturned == MAX_BUFFER - 2) || (bytesReturned == 0)){string returnedString = System.Runtime.InteropServices.Marshal.PtrToStringAuto(pReturnedString, (int)bytesReturned);items = returnedString.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);}System.Runtime.InteropServices.Marshal.FreeCoTaskMem(pReturnedString); //释放内存//无结果返回空if (items == null){return null;}Dictionary dic = new Dictionary();foreach (string item in items){if (!item.Contains("=")){continue;}string[] part = item.Split('=');dic.Add(part[0], part[1]);}return dic;}}
INI文件内容(IO点位)

效果展示:(注意,关闭窗口时需要断开连接)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!