实例介绍
【实例截图】
【核心代码】
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.Net; using System.Runtime.InteropServices; namespace TCP_CLIENT { 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 KvEntPlc.PlcClient PLC = new KvEntPlc.PlcClient(); bool EntLink; long ScanCount; short ScanRet; Int32 PlcHand; [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) { short i = 0; this.CenterToScreen(); cmbReadMry.Items.Clear(); cmbReadMry.Items.Add("R"); cmbReadMry.Items.Add("MR"); cmbReadMry.Items.Add("DM"); cmbReadMry.Items.Add("EM"); cmbWriteMry.Items.Clear(); cmbWriteMry.Items.Add("R"); cmbWriteMry.Items.Add("MR"); cmbWriteMry.Items.Add("DM"); cmbWriteMry.Items.Add("EM"); cmbBitMry.Items.Clear(); cmbBitMry.Items.Add("R"); cmbBitMry.Items.Add("MR"); cmbBitMry.Items.Add("DM"); cmbBitMry.Items.Add("EM"); 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"); for (i = 0; i <= 15; i ) { cmbBit.Items.Add("Bit" System.Convert.ToString(i)); } cmbReadMry.SelectedIndex = 2; cmbWriteMry.SelectedIndex = 2; cmbBitMry.SelectedIndex = 1; cmbBit.SelectedIndex = 0; cmbReadType.SelectedIndex = 0; cmbWriteType.SelectedIndex = 0; lstRead.Items.Clear(); txtWrite.Text = ""; } 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); 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; re = PLC.DeLink(PlcHand); txtReClose.Text = re.ToString(); EntLink = false; } public void butRead_Click(System.Object sender, System.EventArgs e) { short i = 0; object[] RD = null; RD = new object[Convert.ToUInt16(txtReadCnt.Text)]; if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } int var1 = cmbReadType.SelectedIndex 1; KvEntPlc.PlcClient.DataType typ = (KvEntPlc .PlcClient.DataType)var1; switch (cmbReadMry.SelectedIndex) { case 0: ScanRet = PLC.CmdRead(PlcHand,KvEntPlc.PlcClient.PlcMemory.CIO, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD); break; case 1: ScanRet = PLC.CmdRead(PlcHand, KvEntPlc.PlcClient.PlcMemory.MR, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD); break; case 2: ScanRet = PLC.CmdRead(PlcHand, KvEntPlc.PlcClient.PlcMemory.DR, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD); break; case 3: ScanRet = PLC.CmdRead(PlcHand, KvEntPlc.PlcClient.PlcMemory.ER, typ, Convert.ToUInt16(txtReadAdd.Text), Convert.ToUInt16(txtReadCnt.Text), ref RD); break; } txtReRead.Text = ScanRet.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"); } } } public void butWrite_Click(System.Object sender, System.EventArgs e) { short i = 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; KvEntPlc.PlcClient.DataType typ = (KvEntPlc.PlcClient.DataType)var1; switch (cmbWriteMry.SelectedIndex) { case 0: ScanRet = PLC.CmdWrite(PlcHand, KvEntPlc.PlcClient.PlcMemory.CIO, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD); break; case 1: ScanRet = PLC.CmdWrite(PlcHand, KvEntPlc.PlcClient.PlcMemory.MR, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD); break; case 2: ScanRet = PLC.CmdWrite(PlcHand, KvEntPlc.PlcClient.PlcMemory.DR, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD); break; case 3: ScanRet = PLC.CmdWrite(PlcHand, KvEntPlc.PlcClient.PlcMemory.ER, typ, Convert.ToUInt16(txtWriteAdd.Text), Convert.ToUInt16(txtWriteCnt.Text), ref WD); break; } txtReWrite.Text = ScanRet.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 ((Convert.ToInt32(txtReRead.Text) < 0) || (Convert.ToInt32(txtReWrite.Text) < 0)) { butScan.Text = "Cycle R/W"; return; } else { ScanCount ; txtScanCnt.Text = ScanCount.ToString(); txtScanPrd.Text = (System.Convert.ToInt32(timeGetTime()) - tim).ToString() "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; switch (cmbBitMry.SelectedIndex) { case 0: re = PLC.Bit_Test(PlcHand, KvEntPlc.PlcClient.PlcMemory.CIO, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex), ref rd); break; case 1: re = PLC.Bit_Test(PlcHand, KvEntPlc.PlcClient.PlcMemory.MR, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex), ref rd); break; case 2: re = PLC.Bit_Test(PlcHand, KvEntPlc.PlcClient.PlcMemory.DR, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex), ref rd); break; case 3: re = PLC.Bit_Test(PlcHand, KvEntPlc.PlcClient.PlcMemory.ER, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex), ref rd); break; } 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; switch (cmbBitMry.SelectedIndex) { case 0: re = PLC.Bit_Set(PlcHand, KvEntPlc.PlcClient.PlcMemory.CIO, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex)); break; case 1: re = PLC.Bit_Set(PlcHand, KvEntPlc.PlcClient.PlcMemory.MR, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex)); break; case 2: re = PLC.Bit_Set(PlcHand, KvEntPlc.PlcClient.PlcMemory.DR, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex)); break; case 3: re = PLC.Bit_Set(PlcHand, KvEntPlc.PlcClient.PlcMemory.ER , Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex)); break; } txtReBit.Text = re.ToString(); } public void butBitRst_Click(System.Object sender, System.EventArgs e) { if (!EntLink) { MessageBox.Show("还未与PLC建立联接!"); return; } short re = 0; switch (cmbBitMry.SelectedIndex) { case 0: re = PLC.Bit_Reset(PlcHand, KvEntPlc.PlcClient.PlcMemory.CIO, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex)); break; case 1: re = PLC.Bit_Reset(PlcHand, KvEntPlc.PlcClient.PlcMemory.MR, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex)); break; case 2: re = PLC.Bit_Reset(PlcHand, KvEntPlc.PlcClient.PlcMemory.DR, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex)); break; case 3: re = PLC.Bit_Reset(PlcHand, KvEntPlc.PlcClient.PlcMemory.ER, Convert.ToUInt16(txtBitAdd.Text), Convert.ToUInt16(cmbBit.SelectedIndex)); break; } txtReBit.Text = re.ToString(); } } }
标签: C#基恩斯通信实例
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论