三菱PLC通讯 基于官方项目Sample2010的借鉴二次开发---C#连接三菱PLC进行IO监控

 

环境:打开三菱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点位)

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

 


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部