C#里如何使用三菱FXplc以太网模块FX-ENET-L进行通信?

3.Connection test:test;

4.FX3U-ENET-L以太网模块需要安装FX Configurator-EN-L软件对参数进行设置;

5.PLC程序对CH1/CH2进行配置,并下载;

6.PC侧本地IP设置成静态IP,IP地址与模块的地址在一个网段内;

        //初始化.NET的以太网通讯组件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();
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-11-22
fx configurator enet l c 我有中文版的。设置步骤我也有。需要的联系我
第2个回答  2017-06-27
搜一下EntFxPlc.DLL,官方资源,有源代码;
第3个回答  2016-06-08
可以通过MX OPC 来做
第4个回答  2017-12-11
三菱自己有控件,啥时候的问题 这么不专业