实例介绍
【实例简介】VB.NET、C#等PC高级语言与三菱FX5U通讯的源代码,采用TCP方式,支持整数、双整数、浮点数据; 无须安装,直接复制到项目工程即可,支持ASCII和二进制两种格式;
【实例截图】
【核心代码】
using System.Collections.Generic; using System; using System.Linq; using System.Drawing; using System.Diagnostics; using System.Data; using System.Xml.Linq; using Microsoft.VisualBasic; using System.Collections; using System.Windows.Forms; using System.Runtime.InteropServices; namespace TcpClient { public partial class Form1 { public Form1() { InitializeComponent(); if (defaultInstance == null) defaultInstance = this; } #region Default Instance private static Form1 defaultInstance; public static Form1 Default { get { if (defaultInstance == null) { defaultInstance = new Form1(); defaultInstance.FormClosed = new FormClosedEventHandler(defaultInstance_FormClosed); } return defaultInstance; } set { defaultInstance = value; } } static void defaultInstance_FormClosed(object sender, FormClosedEventArgs e) { defaultInstance = null; } #endregion int Handle1; bool EntLink; long ScanCount; EntFxPlc.PlcClient PLC = new EntFxPlc.PlcClient(); [DllImport("winmm.dll", ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)] public static extern UInt32 timeGetTime(); public void Form1_Load(System.Object sender, System.EventArgs e) { this.CenterToScreen(); cmbReadMry.Items.Clear(); cmbReadMry.Items.Add("X"); cmbReadMry.Items.Add("Y"); cmbReadMry.Items.Add("M"); cmbReadMry.Items.Add("L"); cmbReadMry.Items.Add("F"); cmbReadMry.Items.Add("D"); cmbWriteMry.Items.Clear(); cmbWriteMry.Items.Add("X"); cmbWriteMry.Items.Add("Y"); cmbWriteMry.Items.Add("M"); cmbWriteMry.Items.Add("L"); cmbWriteMry.Items.Add("F"); cmbWriteMry.Items.Add("D"); cmbBitMry.Items.Clear(); cmbBitMry.Items.Add("X"); cmbBitMry.Items.Add("Y"); cmbBitMry.Items.Add("M"); cmbBitMry.Items.Add("L"); cmbBitMry.Items.Add("F"); cmbBitMry.Items.Add("D"); // cmbReadType.Items.Clear(); cmbReadType.Items.Add("INT16"); cmbReadType.Items.Add("UINT16"); cmbReadType.Items.Add("DINT32"); cmbReadType.Items.Add("HEX32"); cmbReadType.Items.Add("REAL32"); cmbReadType.Items.Add("BIN16"); cmbWriteType.Items.Clear(); cmbWriteType.Items.Add("INT16"); cmbWriteType.Items.Add("UINT16"); cmbWriteType.Items.Add("DINT32"); cmbWriteType.Items.Add("HEX32"); cmbWriteType.Items.Add("REAL32"); cmbWriteType.Items.Add("BIN16"); cmbReadMry.SelectedIndex = 5; cmbWriteMry.SelectedIndex = 5; cmbBitMry.SelectedIndex = 2; cmbReadType.SelectedIndex = 0; cmbWriteType.SelectedIndex = 0; lstRead.Items.Clear(); txtWrite.Text = ""; cmbCmdType.SelectedIndex = 0; } 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 Handle1,Convert.ToUInt16 (2000),Convert .ToBoolean (cmbCmdType .SelectedIndex )); txtReLink.Text = re.ToString(); if (re == 0) { EntLink = true; MessageBox.Show("PLC联接成功!"); } else { EntLink = false; MessageBox.Show("PLC联接失败: " restr); } } public void butClose_Click(System.Object sender, System.EventArgs e) { short re = 0; EntLink = false; re = PLC.DeLink(Handle1); txtReClose.Text = re.ToString(); } public void butRead_Click(System.Object sender, System.EventArgs e) { short i = 0; short re = 0; object[] RD = null; if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } if (Conversion.Val(txtReadCnt.Text) < 1) { MessageBox.Show("CmdRead方法的Count参数必须大于0."); return; } RD = new object[Convert.ToUInt16(txtReadCnt.Text)]; int var1 =cmbReadMry.SelectedIndex 1; EntFxPlc.PlcClient.PlcMemory mry = (EntFxPlc.PlcClient.PlcMemory)var1; var1 =cmbReadType.SelectedIndex 1; EntFxPlc.PlcClient.DataType typ =(EntFxPlc.PlcClient.DataType)var1; re = PLC.CmdRead(Handle1, mry, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD); txtReRead.Text = re.ToString(); lstRead.Items.Clear(); for (i = 0; i < RD.Length; i ) { if (!ReferenceEquals(RD[i], null)) { lstRead.Items.Add(RD[i]); } else { lstRead.Items.Add("0"); } } } 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; } if (Conversion.Val(txtWriteCnt.Text) < 1) { MessageBox.Show("CmdRead方法的Count参数必须大于0."); 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 = cmbWriteMry.SelectedIndex 1; EntFxPlc.PlcClient.PlcMemory mry = (EntFxPlc.PlcClient.PlcMemory)var1; var1 = cmbWriteType.SelectedIndex 1; EntFxPlc.PlcClient.DataType typ = (EntFxPlc.PlcClient.DataType)var1; re = PLC.CmdWrite(Handle1, mry, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD); txtReWrite.Text = re.ToString(); } public void butScan_Click(System.Object sender, System.EventArgs e) { if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } if (butScan.Text == "Cycle R/W") { ScanCount = 0; Timer1.Enabled = true; butScan.Text = "Stop R/W"; } else { Timer1.Enabled = false; butScan.Text = "Cycle R/W"; } } public void Timer1_Tick(System.Object sender, System.EventArgs e) { Timer1.Enabled = false; int tim = System.Convert.ToInt32(timeGetTime()); if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } // butRead_Click(null, null); butWrite_Click(null, null); // if ((short.Parse(txtReRead.Text) < 0) || (short.Parse(txtReWrite.Text) < 0)) { butScan.Text = "Cycle R/W"; return; } else { ScanCount ; txtScanCnt.Text = ScanCount.ToString(); txtScanPrd.Text = (System.Convert.ToInt32(timeGetTime()) - tim) "ms"; } Timer1.Enabled = true; } public void butBitTest_Click(System.Object sender, System.EventArgs e) { if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } bool rd = false; short re = 0; int var1 = cmbBitMry.SelectedIndex 1; EntFxPlc.PlcClient.PlcMemory mry = (EntFxPlc.PlcClient.PlcMemory)var1; re = PLC.Bit_Test(Handle1, mry, Convert.ToUInt16(txtBitAdd.Text), ref rd); txtBitTest.Text = rd.ToString(); txtReBit.Text = re.ToString(); } public void butBitSet_Click(System.Object sender, System.EventArgs e) { if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } short re = 0; int var1 = cmbBitMry.SelectedIndex 1; EntFxPlc.PlcClient.PlcMemory mry = (EntFxPlc.PlcClient.PlcMemory)var1; re = PLC.Bit_Set(Handle1, mry, Convert.ToUInt16(txtBitAdd.Text)); txtReBit.Text = re.ToString(); } public void butBitRst_Click(System.Object sender, System.EventArgs e) { if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } short re = 0; int var1 = cmbBitMry.SelectedIndex 1; EntFxPlc.PlcClient.PlcMemory mry = (EntFxPlc.PlcClient.PlcMemory)var1; re = PLC.Bit_Reset(Handle1, mry, Convert.ToUInt16(txtBitAdd.Text)); txtReBit.Text = re.ToString(); } public void butReadString_Click(System.Object sender, System.EventArgs e) { if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } string re = ""; re = PLC.CmdReadString(Handle1, EntFxPlc.PlcClient.PlcMemory.DR, Convert.ToUInt16(txtBuffAdd.Text), Convert.ToUInt16(txtBuffSize.Text)); txtReadString.Text = re; } public void butWriteString_Click(System.Object sender, System.EventArgs e) { if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } short re = 0; re = PLC.CmdWriteString(Handle1, EntFxPlc.PlcClient.PlcMemory.DR, Convert.ToUInt16(txtBuffAdd.Text), Convert.ToUInt16(txtBuffSize.Text), txtWriteString.Text); txtReWriteString.Text = re.ToString(); } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论