三菱Q系列PLC(带以太网模块),我自己需要写一个c#的程序取PLC中的数据,如何来实现?

三菱Q系列PLC(带以太网模块),我自己需要写一个c#的程序取PLC中的数据,如何来实现?需要下载或者安装什么东西不?例如是否需要一些DLL等,越详细越好!谢谢!

第1个回答  推荐于2017-11-27
我建议你使用三菱的MX Compenent V4版本软件,这个版本三菱中国官网已经提供了免费下载。通过这个软件你可以调用其中的相关DLL文件,基本上看看说明书你就可以写出非常好的程序了。本回答被提问者采纳
第2个回答  2018-03-10
        //通讯组件EntQsPlc_Asc实例化;
        EntQsPlc_Asc.PlcClient PLC = new EntQsPlc_Asc.PlcClient();
bool EntLink; //连接状态标志
        Int32 PlcHandle; //PLC句柄,多PLC网络时对应不同的PLC


        //连接到三菱Q系列PLC
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 PlcHandle, 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;
if (!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
re = PLC.DeLink(PlcHandle );
txtReClose.Text = re.ToString();
}


//读取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;
                EntQsPlc_Asc.PlcClient.DataType typ = (EntQsPlc_Asc.PlcClient.DataType)var1;
switch (cmbReadMry.SelectedIndex)
{
case 0:
                                re = PLC.CmdRead(PlcHandle,EntQsPlc_Asc.PlcClient.PlcMemory.DI, typ, Convert.ToInt32(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
        break;
case 1:
                                re = PLC.CmdRead(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.DQ, typ, Convert.ToInt32(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
break;
case 2:
                                re = PLC.CmdRead(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.MR, typ, Convert.ToInt32(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
break;
case 3:
                                re = PLC.CmdRead(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.DR, typ, Convert.ToInt32(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
break;
                        case 4:
                                re = PLC.CmdRead(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.RR, typ, Convert.ToInt32(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
                                break;
                        case 5:
                                re = PLC.CmdRead(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.ZR, typ, Convert.ToInt32(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD);
                                break;
}
txtReRead.Text = re.ToString();
lstRead.Items.Clear();
for (i = 0; i <= (RD.Length - 1); 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 - 1); i++)
{
if (i > (temp.Length - 1))
{
WD[i] = 0;
}
else
{
WD[i] = temp[i].Trim();
}
}
int var1 = cmbWriteType.SelectedIndex + 1;
                EntQsPlc_Asc.PlcClient.DataType typ = (EntQsPlc_Asc.PlcClient.DataType)var1;
switch (cmbWriteMry.SelectedIndex)
{
case 0:
                                re = PLC.CmdWrite(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.DI, typ, Convert.ToInt32(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
break;
case 1:
                                re = PLC.CmdWrite(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.DQ, typ, Convert.ToInt32(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
break;
case 2:
                                re = PLC.CmdWrite(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.MR, typ, Convert.ToInt32(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
break;
case 3:
                                re = PLC.CmdWrite(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.DR, typ, Convert.ToInt32(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
break;
                        case 4:
                                re = PLC.CmdWrite(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.RR, typ, Convert.ToInt32(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
                                break;
                        case 5:
                                re = PLC.CmdWrite(PlcHandle, EntQsPlc_Asc.PlcClient.PlcMemory.ZR, typ, Convert.ToInt32(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD);
                                break;
}
txtReWrite.Text = re.ToString();
}

相似回答