//初始化.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();
}
fx configurator enet l c 我有中文版的。设置步骤我也有。需要的联系我
搜一下EntFxPlc.DLL,官方资源,有源代码;
可以通过MX OPC 来做
三菱自己有控件,啥时候的问题 这么不专业