c# 三菱PLC与PC 通讯 采用MX Componet Activex VS2010 点击:18117 | 回复:107



fireT

    
  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2013-02-28 13:59:48
楼主

       看到很多人写了不少三菱 FX PLC与电脑通讯的文章都写得很高深 :采用通讯协议,程序半天都看不懂,而且还采用VB6.0 ,还要另外安装一个什么COM控件(网上找半天都没下载到)。感觉颇为麻烦,   反而采用   MX Componet Activex    控件通讯反而没发现相关程序(我是没发现).

       系统采用visual studio 2010 c# 语言编写,

       由于此程序作为主控制系统的数据采集部分,使用SQL2005 数据库存储采集元件状态,以供其它控制使用

       采用控件 MX Componet Activex  与三菱PLC 通讯     

效果图

如果有需要源程序的可以留邮件地址,

如果有程序不清楚、不对的地方大家可以留言交流

       

 




275409098

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2014年7月06日
发表于:2015-04-16 09:11:27
41楼

275409098@qq.com  麻烦楼主把程序发来看看,一起学习下!~谢谢

fengzi219

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 54回
  • 年度积分:0
  • 历史总积分:21
  • 注册:2015年4月17日
发表于:2015-04-17 15:10:29
42楼

学习楼主分享的经验!!大

青竹叶

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 33回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2007年9月23日
发表于:2015-04-29 14:51:25
43楼

楼主,我现在正在学这块,麻烦发一下程序,谢谢

82125785@qq.com

xsqyzftt

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2015年5月14日
发表于:2015-05-14 10:33:45
44楼

你好.能发给我一份吗,谢谢! xiaoshangqing@126.com

fireT

  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2015-05-21 16:24:11
45楼

最近做FX3U以太网通讯,打电话到三菱说要4.0以上才能通讯,后来要到使用说明书,仔细看了一下才发现这个东西功能如此强大,如果真的看懂了的话,以后三菱的通讯就不用分什么PLC。。。。只要是三菱公司的PLC通过它简单设置一下就可以完全建立通讯,而且可以与多个PLC通讯,还有变量库,可以直接访问变量。现在将使用操作手册http://wenku.baidu.com/view/6902b0b5ee06eff9aff80743及编程手册:http://wenku.baidu.com/view/9c7c835180eb6294dd886cf4发给大家,

Fangel

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2015年7月10日
发表于:2015-07-10 16:16:00
46楼

谢谢楼主了,现在正在研究这一块,也是使用C#语言,使用三菱网站上下载的MX Componet组件中,使用其中的axACTQCPUQ控件,调用ReadDeviceBlock方法,在vs2010中无论读哪个区的哪个地址,都只能读出来一个地址的数据,不知道是什么原因,还望楼主能发图中的代码,以为借鉴,谢谢!273755524@qq.com

Fangel

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2015年7月10日
发表于:2015-07-10 16:16:34
47楼

谢谢楼主了,现在正在研究这一块,也是使用C#语言,使用三菱网站上下载的MX Componet组件中,使用其中的axACTQCPUQ控件,调用ReadDeviceBlock方法,在vs2010中无论读哪个区的哪个地址,都只能读出来一个地址的数据,不知道是什么原因,还望楼主能发图中的代码,以为借鉴,谢谢!273755524@qq.com

Fangel

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2015年7月10日
发表于:2015-07-10 16:27:55
48楼

谢谢楼主了,现在正在研究这一块,也是使用C#语言,使用三菱网站上下载的MX Componet组件中,使用其中的axACTQCPUQ控件,调用ReadDeviceBlock方法,在vs2010中无论读哪个区的哪个地址,都只能读出来一个地址的数据,不知道是什么原因,还望楼主能发图中的代码,以为借鉴,谢谢!273755524@qq.com

fireT

  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2015-07-18 16:39:17
49楼

mydv:PLC输入地址表

 public void GetInput(ref  DataView mydv)//获取输入状态

        {

            lock (PLC_IO.Input)

            {

                try

                {

                    if (mydv != null && mydv.Count != 0)

                    {

                        int[] stat = new int[mydv.Count / 16];

                        int end = 0;

                        string statusString = string.Empty;

                        string newStatstring = string.Empty;

                        int st = stat.Length - 16;

                        string startAddress = "0000" + mydv[0]["Address"].ToString();

                        end = myplc.ReadDeviceBlock("X" + startAddress.Substring(startAddress.Length - 4, 4), mydv.Count / 16, out stat[0]);


                        if (end == 0)

                        {

                            for (int s = 0; s < stat.Length; s++)

                            {

                                statusString = "0000000000000000" + Convert.ToString(stat[s], 2);

                                statusString = statusString.Substring(statusString.Length - 16, 16);

                                for (int i = 0; i < statusString.Length; i++)

                                {

                                    newStatstring += statusString.Substring(15 - i, 1);

                                }

                            }

                            #region 刷新地址表

                            for (int i = 0; i < mydv.Count; i++)

                            {

                                mydv[i]["Status"] = newStatstring.Substring(i, 1);

                            }

                            #endregion


                        }

                        else

                        {

                            runcount = 0;

                            myst.PLaySound(ref returnSound, "BEEP2.wav"); Thread.Sleep(500);

                            myst.SendErrMessages(plcmsg.Text + "通讯错误" + end.ToString());

                            errcount++;

                            myplc.Close();

                            return;

                        }

                    }

                    else

                    {

                        ErrMessage = "未找到任何LPLC 输入地址配置信息!请重新配置后启动控制系统";

                    }

                }

                catch (TimeoutException ex)

                {

                    runcount = 0;

                    myst.SendErrMessages(plcmsg.Text + "通讯错误" + ex.Message);

                    myst.PLaySound(ref returnSound, "BEEP2.wav");

                    myplc.Close();

                    Thread.Sleep(500);

                    ErrMessage = ex.Message;

                }

                catch (Exception ex)

                {

                    runcount = 0;

                    myst.SendErrMessages(plcmsg.Text + "通讯错误" + ex.Message);

                    myst.PLaySound(ref returnSound, "BEEP2.wav");

                    myplc.Close();

                     Thread.Sleep(500);

                    ErrMessage = ex.Message;

                    //SaveErrLog(ex.Message);

                }

                

            }

        }


fireT

  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2015-07-18 16:39:58
50楼

自己用的,希望有所参考


fireT

  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2015-07-18 16:43:45
51楼

其实可以用ActUtlTypeLib.ActUtlType myplc = new ActUtlTypeLib.ActUtlType();这个可以与所有三菱PLC通讯,只要在communication setup utility设置通讯站号就可以,根本就不要管是如何通讯的,如何设置的


QQ339468465

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 132回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2015年7月26日
发表于:2015-07-26 13:46:19
52楼

大家可以参考一下,MAX OPC ,这东西其实不复杂,呵呵

xuzhefeng

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2015年9月19日
发表于:2015-09-19 15:14:37
53楼

楼主你好,关 于这个源码能发个给我吗?急需,正在进行这方面的项目,没有什么经验,时间比较急;477637021@qq.com   拜谢楼主

fireT

  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2015-09-19 19:33:23
54楼

回复内容:

对:xuzhefeng 楼主你好,关 于这个源码能发个给我吗?急需,正在进行这方面的项目,没有什么经验,时间比较急;477637021@qq.com   拜谢楼主     内容的回复:

这个就是我自己一直用的源代码啊!

xuzhefeng

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2015年9月19日
发表于:2015-09-20 10:32:32
55楼

回复内容:

对: fireT 回复内容:对:xuzhefeng 楼主你好,关 于这个... 内容的回复!

邮箱发我一份可以吗?对这个真的是新手,刚接触,光让我看代码还不是很懂,需要有实际的运行

 

fireT

  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2015-09-26 09:07:12
56楼


回复内容:

对: xuzhefeng 回复内容:对: fireT 回复内容:对:xuzhef... 内容的回复!

操作手册与编程手册:http://pan.baidu.com/s/1G3BCq

fireT

  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2015-09-26 09:08:25
57楼


回复内容:

对: fireT 回复内容:对: xuzhefeng  回复内容:对: ... 内容的回复!


每个人的项目不一样,建议阅读操作手册与编程手册:操作手册与编程手册:http://pan.baidu.com/s/1G3BCq 分享给大家


fireT

  • 精华:0帖
  • 求助:2帖
  • 帖子:16帖 | 55回
  • 年度积分:19
  • 历史总积分:589
  • 注册:2009年2月07日
发表于:2015-09-26 09:08:40
58楼


回复内容:

对: xuzhefeng 回复内容:对: fireT 回复内容:对:xuzhef... 内容的回复!


每个人的项目不一样,建议阅读操作手册与编程手册:操作手册与编程手册:http://pan.baidu.com/s/1G3BCq 分享给大家

hpulizhong

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 350回
  • 年度积分:0
  • 历史总积分:1282
  • 注册:2011年2月24日
发表于:2015-10-18 20:36:10
59楼

多谢楼主分享,我现在也想学这块,还没入门,麻烦发一下原程序学习一下,多谢!

690703362@qq.com


zjjmt

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 10回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2015年5月23日
发表于:2015-12-17 11:38:22
60楼

389450586@qq.com 谢谢!需要代码源程序


热门招聘
相关主题

官方公众号

智造工程师