qq_19414697
qq_19414697
2021-01-02 21:53
采纳率: 0%
浏览 518

上位机三菱MC协议程序范例,可以使用的那种,求助

求助三菱MC协议的VC,VB或者CVI程序通讯实例,3E,4E帧都可以,谢谢?

  • 点赞
  • 收藏

21条回答 默认 最新

  • bosaidongmomo
    bosaidongmomo 2021-01-03 10:08
    点赞 评论
  • soar3033
    soar3033 2021-01-03 16:35

    要是c#还可以做一下

    点赞 评论
  • jgdabc
    蒋光道 2021-01-05 12:30

    可以

     

    点赞 评论
  • qq_19414697
    qq_19414697 2021-01-06 07:54

    有人会吗?

    点赞 评论
  • qq_19414697
    qq_19414697 2021-01-06 07:59

    @ bosaidongmomo这个经过网关,我要具体的MC协议

    点赞 评论
  • bosaidongmomo
    bosaidongmomo 2021-01-06 08:49
    点赞 评论
  • sky444038761
    sky444038761 2021-01-06 09:24

    三菱专用协议官网下载:http://www.doc88.com/p-0873767525202.html

    三菱编程口通讯协议(部分寄存器访问)https://www.cnblogs.com/chengcanghai/p/10132862.html

    可以借鉴学习

    点赞 评论
  • qq_19414697
    qq_19414697 2021-01-07 12:42

    @ soar3033,可以的话用C#做也可以做,要测试稳定

    点赞 评论
  • wtnu200
    wtnu200 2021-01-14 17:30

    安装MXComponent软件完成后

    MELSEC\Act\Samples目录下有Demo,各种语言

    点赞 评论
  • qq_33626651
    大白_一起来踩坑 2021-01-20 14:03

    只需要通讯协议吗?

    点赞 评论
  • qq_19414697
    qq_19414697 2021-01-21 08:22

    协议三菱网站有

    点赞 评论
  • qq_19414697
    qq_19414697 2021-01-24 17:12

    协议我知道啊,我也有

    点赞 评论
  • bill20100829
    歇歇 2021-01-31 18:29

            //初始化.NET的bai以太网通讯组件EntFxPlc_ADP.DLL
            EntFxPlc_ADP.PlcClient PLC = new EntFxPlc_ADP.PlcClient();
        bool EntLink; //连接状态标志
            Int32 PlcHand; //PLC 的连接句柄,对应不同的PLC或者一台PLC的多个连接
        //按钮事件,建立与LC的以太网连接 
            public void butLink_Click(System.Object sender, System.EventArgs e)
        {
            short re = 0;
            string restr = "";
                    re = PLC.EntLink(txtLocalIP.Text.Trim(), Convert.ToUInt16(txtLocalPort.Text), txtRemoteIP.Text.Trim(), (Convert.ToUInt16(txtRemotePort.Text)), "DEMO", ref PlcHand, Convert.ToUInt16(1000),Convert .ToBoolean (cmbCmdType .SelectedIndex ));
            txtReLink.Text = re.ToString();
            if (re == 0)
            {
                EntLink = true;
                MessageBox.Show("PLC联接成功!");
            }
            else
            {
                EntLink = false;
                MessageBox.Show("PLC联接失败: " + restr);
            }
        }
         
        //按钮事件,断开与PLC的以太网连接
        public void butClose_Click(System.Object sender, System.EventArgs e)
        {
            short re = 0;
            re = PLC.DeLink(PlcHand);
            txtReClose.Text = re.ToString();
                    EntLink = false;
        }
         
        //按钮事件,读取PLC的数据
        public void butRead_Click(System.Object sender, System.EventArgs e)
        {
                short i = 0;
                    short re = 0;
            object[] RD = null;
            RD = new object[Convert.ToUInt16(txtReadCnt.Text)];
            if (!EntLink)
            {
                        MessageBox.Show("还未与PLC建立联接!");
                        return;
            }
            int var1 = cmbReadType.SelectedIndex + 1;
                    EntFxPlc_ADP.PlcClient.DataType typ = (EntFxPlc_ADP.PlcClient.DataType)var1;
            switch (cmbReadMry.SelectedIndex)
            {
                case 0:
                                re = PLC.CmdRead(PlcHand,EntFxPlc_ADP.PlcClient.PlcMemory.DI, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
                    break;
                case 1:
                                re = PLC.CmdRead(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.DQ, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
                    break;
                case 2:
                                re = PLC.CmdRead(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.MR, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
                    break;
                case 3:
                                re = PLC.CmdRead(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.DR, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
                    break;
                            case 4:
                                re = PLC.CmdRead(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.RR, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
                                break;
                     }
             txtReRead.Text = re.ToString();
             lstRead.Items.Clear();
             for (i = 0; i < RD.Length ; i++)
             {
                 if (!(RD[i] == null))
                 {
                            lstRead.Items.Add(RD[i]);
                 }
                 else
                 {
                            lstRead.Items.Add("0");
                  }
              }
                 
        }
             
        //按钮事件,写数据到PLC 
        public void butWrite_Click(System.Object sender, System.EventArgs e)
        {
                short i = 0;
                    short re = 0;
            string[] temp = null;
            object[] WD = null;
            if (!EntLink)
            {
                        MessageBox.Show("还未与PLC建立联接!");
                        return;
            }
            WD = new object[Convert.ToUInt16(txtWriteCnt.Text)];
            temp = txtWrite.Text.Split('\n');
            for (i = 0; i < WD.Length ; i++)
            {
                if (i >= temp.Length )
                {
                    WD[i] = 0;
                }
                        else
                {
                    WD[i] = temp[i].Trim();
                }
            }
            int var1 = cmbWriteType.SelectedIndex + 1;
                    EntFxPlc_ADP.PlcClient.DataType typ = (EntFxPlc_ADP.PlcClient.DataType)var1;
            switch (cmbWriteMry.SelectedIndex)
            {
                case 0:
                    re = PLC.CmdWrite(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.DI, typ,  Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
                    break;
                case 1:
                                    re = PLC.CmdWrite(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.DQ, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
                    break;
                case 2:
                                    re = PLC.CmdWrite(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.MR, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
                        break;
                case 3:
                                    re = PLC.CmdWrite(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.DR, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
                    break;
                            case 4:
                                    re = PLC.CmdWrite(PlcHand, EntFxPlc_ADP.PlcClient.PlcMemory.RR, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
                                    break;
            }
            txtReWrite.Text = re.ToString();
        }
            

    点赞 评论
  • bill20100829
    歇歇 2021-01-31 18:43
    点赞 评论
  • bill20100829
    歇歇 2021-01-31 18:46

    最近几天在做C#代码与三菱Q系列PLC TCP通信(MC模式)读写数据寄存器的功能,留此调试文档。

    三菱Q系列PLC通信协议有很多种,本次选择了MC,MC内发送数据有ASCII方式和二进制方式,通信模块有内置以太网模块(与CPU一起)和以太网扩展模块,不同的模块设置参数的方式同,本次使用的是内置式的,

     

     

     

    MC的协议方式有A-1E模式和Qna-3E模式、Qna-4E模式,尝试了前两种;A-1E为较早的通信版本,对地址的操作范围有限(数据寄存器区的D0~D6143、D9000~D9255),Qna-3E可访问D0~D12287数据

     

    A-1E协议:

     

     

    Qna-3E协议:

    二进制方式

     

    ASCII方式

    请求数据长度计算为之后的所有数据,二进制方式两个数字为一个字,ASCII为一个数字一个字,二进制发送时数据的高低位需要调换,ASCII发送带字母起始地址式会返回错误(待解决)。

    数据回复

    异常回复:0b 00 5b c0 00 ff ff 03 00 01 14 00 00

    成功回复:d0 00 00 ff ff 03 00 02 00 00 00

     

    字符串转换为二进制数据:

    byte[] bytes = new byte[str.Length / 2];

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

        bytes[i / 2] = (byte)Convert.ToByte(str.Substring(i, 2), 16);

    点赞 评论
  • bill20100829
    歇歇 2021-01-31 19:00
    private void SocketConnect()//连接
            {
                try
                {
                    socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    socket1.Connect("192.168.0.3", 5002);//三菱MC协议IP地址和端口,根据实际情况修改
                    connect = true;
                    MessageBox.Show("连接成功!");
                }
                catch (Exception ex) { MessageBox.Show("无法建立连接,请检查IP和端口是否正确"); }
                try
                {
                    socket1.Close();
                }
                catch
                {
                }
                try { socket1.Dispose(); }
                catch { }
            }
    点赞 评论
  • bill20100829
    歇歇 2021-01-31 19:01

     socket1.Send(command);//发送数据

    点赞 评论
  • u010892685
    wayne_bai88 2021-02-01 17:19

    d

    点赞 评论
  • u010892685
    wayne_bai88 2021-02-01 17:19

    sadfasdfsadfdsf

    点赞 评论
  • qq_42292373
    裸奔的肉夹馍 2021-02-04 10:58
    点赞 评论
  • qq_19414697
    qq_19414697 2021-02-15 20:04

    这个没用

    点赞 评论

相关推荐