看到很多人写了不少三菱 FX PLC与电脑通讯的文章都写得很高深 :采用通讯协议,程序半天都看不懂,而且还采用VB6.0 ,还要另外安装一个什么COM控件(网上找半天都没下载到)。感觉颇为麻烦, 反而采用 MX Componet Activex 控件通讯反而没发现相关程序(我是没发现).
系统采用visual studio 2010 c# 语言编写,
由于此程序作为主控制系统的数据采集部分,使用SQL2005 数据库存储采集元件状态,以供其它控制使用
采用控件 MX Componet Activex 与三菱PLC 通讯
效果图
如果有需要源程序的可以留邮件地址,
如果有程序不清楚、不对的地方大家可以留言交流
最近做FX3U以太网通讯,打电话到三菱说要4.0以上才能通讯,后来要到使用说明书,仔细看了一下才发现这个东西功能如此强大,如果真的看懂了的话,以后三菱的通讯就不用分什么PLC。。。。只要是三菱公司的PLC通过它简单设置一下就可以完全建立通讯,而且可以与多个PLC通讯,还有变量库,可以直接访问变量。现在将使用操作手册http://wenku.baidu.com/view/6902b0b5ee06eff9aff80743及编程手册:http://wenku.baidu.com/view/9c7c835180eb6294dd886cf4发给大家,
mydv:PLC输入地址表
public void GetInput(ref DataView mydv)//获取输入状态
{
lock (PLC_IO.Input)
{
try
{
if (mydv != null && mydv.Count != 0)
{
int[] stat = new int[mydv.Count / 16];
int end = 0;
string statusString = string.Empty;
string newStatstring = string.Empty;
int st = stat.Length - 16;
string startAddress = "0000" + mydv[0]["Address"].ToString();
end = myplc.ReadDeviceBlock("X" + startAddress.Substring(startAddress.Length - 4, 4), mydv.Count / 16, out stat[0]);
if (end == 0)
{
for (int s = 0; s < stat.Length; s++)
{
statusString = "0000000000000000" + Convert.ToString(stat[s], 2);
statusString = statusString.Substring(statusString.Length - 16, 16);
for (int i = 0; i < statusString.Length; i++)
{
newStatstring += statusString.Substring(15 - i, 1);
}
}
#region 刷新地址表
for (int i = 0; i < mydv.Count; i++)
{
mydv[i]["Status"] = newStatstring.Substring(i, 1);
}
#endregion
}
else
{
runcount = 0;
myst.PLaySound(ref returnSound, "BEEP2.wav"); Thread.Sleep(500);
myst.SendErrMessages(plcmsg.Text + "通讯错误" + end.ToString());
errcount++;
myplc.Close();
return;
}
}
else
{
ErrMessage = "未找到任何LPLC 输入地址配置信息!请重新配置后启动控制系统";
}
}
catch (TimeoutException ex)
{
runcount = 0;
myst.SendErrMessages(plcmsg.Text + "通讯错误" + ex.Message);
myst.PLaySound(ref returnSound, "BEEP2.wav");
myplc.Close();
Thread.Sleep(500);
ErrMessage = ex.Message;
}
catch (Exception ex)
{
runcount = 0;
myst.SendErrMessages(plcmsg.Text + "通讯错误" + ex.Message);
myst.PLaySound(ref returnSound, "BEEP2.wav");
myplc.Close();
Thread.Sleep(500);
ErrMessage = ex.Message;
//SaveErrLog(ex.Message);
}
}
}
回复内容:
对: fireT 回复内容:对: xuzhefeng 回复内容:对: ... 内容的回复!
每个人的项目不一样,建议阅读操作手册与编程手册:操作手册与编程手册:http://pan.baidu.com/s/1G3BCq 分享给大家