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

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

https://blog.csdn.net/AutoCtrl666/article/details/105919162 这个可以用吗

可以

 

有人会吗?

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

https://blog.csdn.net/cmwanysys/article/details/106681255

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

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

可以借鉴学习

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

安装MXComponent软件完成后

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

只需要通讯协议吗?

协议三菱网站有

协议我知道啊,我也有

        //初始化.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();
    }
        

https://download.csdn.net/download/bill20100829/14977845

最近几天在做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);

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 { }
        }

 

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

d

sadfasdfsadfdsf

https://wenku.baidu.com/view/eea0b23833687e21ae45a96b.html 这个可以帮助你吗

这个没用