在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → opc服务端 示例源码

opc服务端 示例源码

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.81M
  • 下载次数:159
  • 浏览次数:1282
  • 发布时间:2017-11-23
  • 实例类别:C#语言基础
  • 发 布 人:fenjinghao
  • 文件格式:.rar
  • 所需积分:10
 相关标签: 服务 opc

实例介绍

【实例简介】

 OPC服务端源码 

【实例截图】

from clipboard

from clipboard

【核心代码】


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.Management;
using System.Windows.Forms;

using Microsoft.VisualBasic.CompilerServices;

namespace OPC_Server_Net
{
	public partial class frmMain
	{
		public frmMain()
		{
			InitializeComponent();

            if (defaultInstance == null)
                defaultInstance = this;
		}
		
#region Default Instance
		
		private static frmMain defaultInstance;
		

public static frmMain Default
		{
			get
			{
				if (defaultInstance == null)
				{
					defaultInstance = new frmMain();
					defaultInstance.FormClosed  = new FormClosedEventHandler(defaultInstance_FormClosed);
				}
				
				return defaultInstance;
			}
			set
			{
				defaultInstance = value;
			}
		}
		
		static void defaultInstance_FormClosed(object sender, FormClosedEventArgs e)
		{
			defaultInstance = null;
		}
		
#endregion
		
		const int FrmHeight = 416;
		const int FrmWidth = 664;
		const string AppName = "EasyOPCSDK_ModbusDemo";
		const string FrmName = "EasyOPCSDK_ModbusDemo";
		
		string GUID;
		string ExePath;
		string VendorInfo;
		
		UInt64 RunSaveTime;
		short FrmClsCmd;
		short RestoreCnt;
		
		
		
		public void butToTray_Click(System.Object sender, System.EventArgs e)
		{
			this.Hide();
			//下面的代码可以用来实现以文件d:dragon.ico 作为在托盘中显示的图标
			//NotifyIcon1.Icon = New System.Drawing.Icon(Application.StartupPath & "\ICO1.ico")
			//下面直接采用窗体的图标,既保持一 致性,又不必担心磁盘上的图标文件被删除。
			NotifyIcon1.Icon = this.Icon;
			NotifyIcon1.Visible = true;
			NotifyIcon1.Text = this.Text;
		}
		
		
		public void RestoreToolStripMenuItem_Click(System.Object sender, System.EventArgs e)
		{
			//恢复显示窗体
			timRestore.Enabled = true;
		}
		
		public void timRestore_Tick(System.Object sender, System.EventArgs e)
		{
			Frm_Load();
			RestoreCnt  ;
			if (RestoreCnt >= 2)
			{
				timRestore.Enabled = false;
				RestoreCnt = (short) 0;
			}
		}
		
		public void ExitToolStripMenuItem_Click(System.Object sender, System.EventArgs e)
		{
			//关闭窗体,退出程序
			MsgBoxResult re;
			if (Module1.SysRun)
			{
				re = Interaction.MsgBox("OPC服务器运行中,是否停止服务后退出?", (int) MsgBoxStyle.Question   MsgBoxStyle.YesNo, "关闭退出");
				if (re == MsgBoxResult.No)
				{
					return;
				}
				if (re == MsgBoxResult.Yes)
				{
					StopServer();
				}
			}
			FrmClsCmd = (short) 1;
			this.Close();
		}
		
		public void Frm_Load()
		{
			this.Height = FrmHeight;
			this.Width = FrmWidth;
			this.Text = FrmName;
			this.CenterToScreen();
			FrmClsCmd = (short) 0;
			
			this.WindowState = FormWindowState.Normal;
			this.ShowInTaskbar = true;
			this.Show();
			this.Activate();
			//
			panData.Top = 0;
			panData.Left = 0;
			//panData.Height = 368
			panData.Width = FrmWidth;
			panData.Visible = true;
			//
			panPara.Top = 0;
			panPara.Left = 0;
			//panPara.Height = 368
			panPara.Width = FrmWidth;
			panPara.Visible = false;
		}
		
		
		
		public void frmMain_Load(System.Object sender, System.EventArgs e)
		{
			Process[] pProcess = Process.GetProcesses();
			if ((Process.GetProcessesByName(AppName).Length - 1) > 0)
			{
				Interaction.MsgBox(AppName   "软件已经运行!", MsgBoxStyle.Information, AppName);
				this.Dispose();
				ProjectData.EndApp();
			}
			
			Frm_Load();
			
			//
			Module1.StrReadWrite[0] = "只读";
			Module1.StrReadWrite[1] = "读写";
			//
			short i = 0;
			Module1.StrMemory[0] = "DR";
			Module1.StrMemory[1] = "HR";
			cmbReadArea.Items.Clear();
			cmbWriteArea.Items.Clear();
			for (i = 0; i <= 1; i  )
			{
				if (Module1.StrMemory[i] != "")
				{
					cmbReadArea.Items.Add(Module1.StrMemory[i]   " Area");
				}
				if (Module1.StrMemory[i] != "")
				{
					cmbWriteArea.Items.Add(Module1.StrMemory[i]   " Area");
				}
			}
			cmbReadArea.Items.Add("其它...");
			cmbWriteArea.Items.Add("其它...");
			cmbReadArea.SelectedIndex = 0;
			cmbWriteArea.SelectedIndex = 0;
			Module1.StrDataType[0] = "16位整数有符号";
			Module1.StrDataType[1] = "16位整数无符号";
			Module1.StrDataType[2] = "32位整数有符号";
			Module1.StrDataType[3] = "32位浮点有符号";
			Module1.StrDataT[0] = "INT16";
			Module1.StrDataT[1] = "UINT16";
			Module1.StrDataT[2] = "DINT32";
			Module1.StrDataT[3] = "REAL32";
			frmAddItem.Default.cmbDataType.Items.Clear();
			for (i = 0; i <= (Module1.StrDataType.Length - 1); i  )
			{
				frmAddItem.Default.cmbDataType.Items.Add(Module1.StrDataType[i]);
			}
			for (i = 0; i <= 7; i  )
			{
				Module1.MyPlc[i].WordLimit = (short) 200;
			}
			if (!System.IO.File.Exists(Application.StartupPath   "\\ParaSet.psf"))
			{
				System.IO.File.Create(Application.StartupPath   "\\ParaSet.psf");
			}
			if (!System.IO.File.Exists(Application.StartupPath   "\\TagConfig.tcf"))
			{
				System.IO.File.Create(Application.StartupPath   "\\TagConfig.tcf");
			}
			timLoad.Enabled = true;
		}
		
		public void timLoad_Tick(System.Object sender, System.EventArgs e)
		{
			int reint;
			timLoad.Enabled = false;
			
			tolRunTime.Text = "";
			RestoreToolStripMenuItem.Text = "打开软件";
			ExitToolStripMenuItem.Text = "关闭退出";
			
			Para_Load();
			Para_Disp();
			
			Config_Load();
			Fill_GrdData();

            GUID = "{ABCDEF01-6712-4e71-9d46-89313ee25ec6}";
			ExePath = Application.ExecutablePath   "\\EasyOPCSDK_ModbusDemo.exe";
			VendorInfo = "LFL";
			
			
			reint = Module1.MyOPC.RegServer(GUID, AppName, ExePath, VendorInfo, "DEMO");
			if (reint == 0)
			{
				Module1.SysReg = true;
			}
			else
			{
				Interaction.MsgBox("OPC服务器注册失败:"   reint.ToString(), MsgBoxStyle.Exclamation, "服务器注册");
			}
			StartServer();
			Timer1.Enabled = true;
		}
		
		
		public void frmMain_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
		{
			int reint;
			MsgBoxResult re;
			
			if (FrmClsCmd == 0)
			{
				e.Cancel = true;
				butToTray_Click(null, null);
				return;
			}
			
			if (Module1.MyOPC.OpcClientCount != 0)
			{
				re = Interaction.MsgBox("OPC服务器有客户端连接未断开,是否关闭退出?", (int) MsgBoxStyle.Question   MsgBoxStyle.YesNo, "关闭退出");
				if (re == MsgBoxResult.No)
				{
					e.Cancel = true;
					butToTray_Click(null, null);
					return;
				}
			}
			reint = Module1.MyOPC.UnregServer();
			Para_Save();
			Module1.SysReg = false;
		}
		
		
		
		public void frmMain_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
		{
			NotifyIcon1.Visible = false;
			ProjectData.EndApp();
		}
		
		
		
		
		public void StartServer()
		{
			short i = 0;
			short j = 0;
			int reint;
			bool rebol = false;
			ushort tnum = 0;
			ushort tmod = 0;
			System.Threading.Thread[] mythr = null;
			if (Module1.SysRun)
			{
				return;
			}
			if (!Module1.SysReg)
			{
				Interaction.MsgBox("OPC服务器未注册!", MsgBoxStyle.Exclamation, "Start Comm.");
				return;
			}
			if (!Module1.CheckIP(Module1.LocalIP))
			{
				Interaction.MsgBox("电脑的IP地址设置错误:"   Module1.LocalIP, MsgBoxStyle.Exclamation, "Start Comm.");
				return;
			}
			//
			
			rebol = Tag_AddNew();
			if (!rebol)
			{
				return;
			}
			//
			Para_Save();
			Config_Save();
			CalWordCount();
			for (i = 0; i <= Module1.MaxPlcIndex; i  )
			{
				Module1.MyPlc[i].CommError = (short) 0;
				if (Module1.MyPlc[i].Protolcol == 0)
				{
					Module1.MyPlc[i].CommRdLen = 96;
					Module1.MyPlc[i].CommWtLen = 96;
				}
				else if (Module1.MyPlc[i].Protolcol == 1)
				{
					Module1.MyPlc[i].CommRdLen = 30;
					Module1.MyPlc[i].CommWtLen = 30;
				}
				//
				tnum = Convert.ToUInt16( Module1.MyPlc[i].ReadCount / Module1.MyPlc[i].CommRdLen);
				tmod = Convert.ToUInt16( Module1.MyPlc[i].ReadCount % Module1.MyPlc[i].CommRdLen);
				if (tnum == 0)
				{
					Module1.MyPlc[i].CommRdNum = 1;
					Module1.MyPlc[i].CommRdLen = Convert.ToUInt16( Module1.MyPlc[i].ReadCount);
				}
				else
				{
					if (tmod > 0)
					{
						Module1.MyPlc[i].CommRdNum = Convert.ToUInt16( tnum   1);
					}
				}
				Module1.MyPlc[i].PDR = new List<object>();
				for (j = 0; j <= tnum * Module1.MyPlc[i].CommRdLen   tmod - 1; j  )
				{
					Module1.MyPlc[i].PDR.Add(0);
				}
				
				tnum = Convert.ToUInt16( Module1.MyPlc[i].WriteCount / Module1.MyPlc[i].CommWtLen);
				tmod = Convert.ToUInt16( Module1.MyPlc[i].WriteCount % Module1.MyPlc[i].CommWtLen);
				if (tnum == 0)
				{
					Module1.MyPlc[i].CommWtNum = 1;
					Module1.MyPlc[i].CommWtLen =Convert.ToUInt16(  Module1.MyPlc[i].WriteCount);
				}
				else
				{
					if (tmod > 0)
					{
						Module1.MyPlc[i].CommWtNum = Convert.ToUInt16( tnum   1);
					}
				}
				Module1.MyPlc[i].PDW = new List<object>();
				for (j = 0; j <= tnum * Module1.MyPlc[i].CommWtLen   tmod - 1; j  )
				{
					Module1.MyPlc[i].PDW.Add(0);
				}
			}
			
			if ((Module1.MaxPlcIndex >= 0) && ((Module1.MyPlc[0].ReadCount > 0) || (Module1.MyPlc[0].WriteCount > 0)))
			{
				mythr = new System.Threading.Thread[Module1.MaxPlcIndex   1];
				Module1.SysRun = true;
				for (i = 0; i <= Module1.MaxPlcIndex; i  )
				{
					if (Module1.MyPlc[i].Protolcol == 0)
					{
						mythr[i] = new System.Threading.Thread(Module1.PlcComm);
					}
					else
					{
						mythr[i] = new System.Threading.Thread(Module1.DtuComm);
					}
					mythr[i].IsBackground = true;
					mythr[i].Start(i);
				}
				//
				reint = Module1.MyOPC.StartOpcServer();
                Module1.MyOPC.OpcClientWriteValue  = new EasyOPC_DA.Server.OpcClientWriteValueEventHandler(Module1.MyOPC_OpcClientWriteValue);
				if (Module1.NetServerRun != 0)
				{
					Module1.MyOPC.OpenNetServer(Module1.ServerIP, Convert.ToUInt32( Module1.ServerPort));
                    Module1.MyOPC.NetClientWriteValue  = new EasyOPC_DA.Server.NetClientWriteValueEventHandler(Module1.MyOPC_NetClientWriteValue);
				}
				tolPlcCount.Text = Convert.ToString( Module1.MaxPlcIndex   1);
				tolTagCount.Text = System.Convert.ToString(Module1.MaxGrdIndex   1);
                Module1.timUpTag.Elapsed   = new System.Timers.ElapsedEventHandler(Module1.timUpTag_Elapsed);
				Module1.timUpTag.Start();
				Module1.StrStatus = "OPC启动成功.";
			}
		}
		
		public void CalWordCount()
		{
			UInt16 i = 0;
			ushort m = 0;
			for (i = 0; i <= (Module1.MyPlc.Length - 1); i  )
			{
				Module1.MyPlc[i].ReadCount = (short) (-1);
				Module1.MyPlc[i].WriteCount = (short) (-1);
			}
			for (i = 0; i <= Module1.MaxGrdIndex; i  )
			{
				m = Module1.MyTag[i].PlcIndex;
				if (Module1.MyTag[i].ReadWrite == 0)
				{
					if (Module1.MyTag[i].AddIndex > Module1.MyPlc[m].ReadCount)
					{
						Module1.MyPlc[m].ReadCount = Convert.ToInt16( Module1.MyTag[i].AddIndex);
					}
				}
				if (Module1.MyTag[i].ReadWrite == 1)
				{
					if (Module1.MyTag[i].AddIndex > Module1.MyPlc[m].WriteCount)
					{
						Module1.MyPlc[m].WriteCount = Convert.ToInt16( Module1.MyTag[i].AddIndex);
					}
				}
			}
			for (i = 0; i <= (Module1.MyPlc.Length - 1); i  )
			{
				if (Module1.MyPlc[i].ReadCount >= 0)
				{
					Module1.MyPlc[i].ReadCount  = (short) 2;
				}
				else
				{
					Module1.MyPlc[i].ReadCount = (short) 0;
				}
				if (Module1.MyPlc[i].WriteCount >= 0)
				{
					Module1.MyPlc[i].WriteCount  = (short) 2;
				}
				else
				{
					Module1.MyPlc[i].WriteCount = (short) 0;
				}
			}
			
		}
		
		
		public void butRunOpera_Click(System.Object sender, System.EventArgs e)
		{
			if (Module1.SysRun)
			{
				if (Interaction.MsgBox("确定停止OPC服务器?", (int) MsgBoxStyle.Question   MsgBoxStyle.YesNo, "停止服务") != MsgBoxResult.Yes)
				{
					return;
				}
				StopServer();
			}
			else
			{
				StartServer();
			}
		}
		
		
		public void StopServer()
		{
			short i = 0;
			int reint;
			Module1.MyOPC.CloseNetServer();
			Module1.SysRun = false;
			Module1.timUpTag.Stop();
			Module1.IniWtVal = false;
			grpPara.Enabled = true;
			for (i = 0; i <= Module1.MaxPlcIndex; i  )
			{
				Module1.MyPlc[i].CommError = (short) 0;
				Module1.MyPlc[i].PlcLink = false;
				Module1.MyPlc[i].PDR.Clear();
				Module1.MyPlc[i].PDW.Clear();
			}
			reint = Module1.MyOPC.StopOpcServer();
			System.Threading.Thread.Sleep(200);
			reint = Module1.MyOPC.TagClear();
			Module1.StrStatus = "停止......";
		}
		
		
		private bool Tag_AddNew()
		{
			short i = 0;
			bool wen = false;
			
			if (Module1.MaxGrdIndex <= 0)
			{
				return false;
			}
			if (Module1.MaxGrdIndex >= 400)
			{
				return false;
			}
			//
			for (i = 0; i <= Module1.MaxGrdIndex; i  )
			{
				Module1.MyTag[i].Name = Strings.Trim(System.Convert.ToString(grdData.Rows[i].Cells[1].Value));
				if (Module1.MyTag[i].ReadWrite > 0)
				{
					wen = true;
				}
				else
				{
					wen = false;
				}
				if (Module1.MyTag[i].DataType == 3)
				{
					Module1.MyTag[i].Value = 0.0;
				}
				else
				{
					Module1.MyTag[i].Value = 0;
				}
				Module1.MyOPC.TagAddNew(Module1.MyTag[i].Name, Module1.MyTag[i].Value, wen, ref Module1.MyTag[i].Handle);
			}
			Module1.MyTag[Module1.MaxGrdIndex   1].Name = "ServerStatus";
			Module1.MyTag[Module1.MaxGrdIndex   1].Value = 0;
			Module1.MyOPC.TagAddNew(System.Convert.ToString(Module1.MyTag[Module1.MaxGrdIndex   1].Name), Module1.MyTag[Module1.MaxGrdIndex   1].Value, false, ref Module1.MyTag[Module1.MaxGrdIndex   1].Handle);
			return true;
		}
		
		
		
		
		private bool Update_GrdData()
		{
            if (!Module1.SysRun)
            {
                return false;
            }
			short row = (short) (grdData.Rows.Count - 1);
			for (var i = 0; i <= row; i  )
			{
				grdData.Rows[i].Cells[5].Value = Conversion.Val(Module1.MyTag[(int) i].Value);
			}
			return true;
		}
		
		
		public void butParaSave_Click(System.Object sender, System.EventArgs e)
		{
			MsgBoxResult re;
			if (Module1.SysRun)
			{
				re = Interaction.MsgBox("OPC服务器运行中,是否停止运行保存参数?", (int) MsgBoxStyle.Question   MsgBoxStyle.YesNo, "参数保存");
				if (re == MsgBoxResult.No)
				{
					return;
				}
				if (re == MsgBoxResult.Yes)
				{
					StopServer();
				}
			}
			Para_Save();
		}
		
		
		
		public bool Para_Save()
		{
			string setpara = "";
			short i = 0;
			short j = 0;
			short m = 0;
			//
			Module1.LocalIP = txtLocalIP.Text.Trim();
			Module1.LocalPort = (int) (Conversion.Val(txtLocalPort.Text));
			Module1.ServerIP = txtServerIP.Text.Trim();
			Module1.ServerPort = (int) (Conversion.Val(txtServerPort.Text));
			if (chkNetOption.Checked)
			{
				Module1.NetServerRun = (short) 1;
			}
			else
			{
				Module1.NetServerRun = (short) 0;
			}
			Module1.MaxPlcIndex =Convert.ToUInt16(  cmbMaxPlcIndex.SelectedIndex);
			//
			m = (short) cmbCurrPlc.SelectedIndex;
			Module1.MyPlc[m].Protolcol = Convert.ToUInt16( cmbProtocol.SelectedIndex);
			Module1.MyPlc[m].IpAddress = txtRemoteIP.Text.Trim();
			Module1.MyPlc[m].NetPort = Convert.ToUInt16( Conversion.Val(txtRemotePort.Text));
			Module1.MyPlc[m].Station = Convert.ToUInt16( Conversion.Val(txtStation.Text));
			Module1.MyPlc[m].ReadArea = Convert.ToUInt16( cmbReadArea.SelectedIndex);
			Module1.MyPlc[m].ReadAdd =Convert.ToUInt16(  Conversion.Val(txtReadAdd.Text));
			Module1.MyPlc[m].WriteArea = Convert.ToUInt16( cmbWriteArea.SelectedIndex);
			Module1.MyPlc[m].WriteAdd = Convert.ToUInt16( Conversion.Val(txtWriteAdd.Text));
			Module1.MyPlc[m].ReadExByte =Convert.ToUInt16(  cmbRdExByte.SelectedIndex);
			Module1.MyPlc[m].ReadExWord = Convert.ToUInt16( cmbRdExWord.SelectedIndex);
			Module1.MyPlc[m].WriteExByte = Convert.ToUInt16( cmbWtExByte.SelectedIndex);
			Module1.MyPlc[m].WriteExWord = Convert.ToUInt16( cmbWtExWord.SelectedIndex);
			//
			//ip address check
			for (i = 0; i <= (Module1.MyPlc.Length - 1); i  )
			{
				if (i > Module1.MaxPlcIndex)
				{
					break;
				}
				for (j = 0; j <= (Module1.MyPlc.Length - 1); j  )
				{
					if (j > Module1.MaxPlcIndex)
					{
						break;
					}
					if (j == i)
					{
						continue;
					}
					if ((Module1.MyPlc[i].IpAddress == Module1.MyPlc[j].IpAddress) && (Strings.Trim(Module1.MyPlc[i].IpAddress) != ""))
					{
						Interaction.MsgBox("PLC"   System.Convert.ToString(i   1)   "与PLC"   System.Convert.ToString(j   1)   "的IP地址重复!", MsgBoxStyle.Exclamation, "参数保存");
						return false;
					}
				}
			}
			
			setpara = setpara   "LOCAL"   ","   Module1.LocalIP   ","   System.Convert.ToString(Module1.LocalPort)   ","   System.Convert.ToString(Module1.NetServerRun)   ","   System.Convert.ToString(Module1.MaxPlcIndex)   ","   Module1.ServerIP   ","   System.Convert.ToString(Module1.ServerPort)   ","   "\r\n";
			for (i = 0; i <= Module1.MaxPlcIndex; i  )
			{
				setpara = setpara   "PLC"   System.Convert.ToString(i)   ","   System.Convert.ToString(Module1.MyPlc[i].Protolcol)   ","   Module1.MyPlc[i].IpAddress   ","   System.Convert.ToString(Module1.MyPlc[i].NetPort)   ","   System.Convert.ToString(Module1.MyPlc[m].Station)   ","   System.Convert.ToString(Module1.MyPlc[i].ReadArea)   ","   System.Convert.ToString(Module1.MyPlc[i].ReadAdd)   ","   System.Convert.ToString(Module1.MyPlc[i].WriteArea)   ","   System.Convert.ToString(Module1.MyPlc[i].WriteAdd)   ","   System.Convert.ToString(Module1.MyPlc[i].ReadExByte)   ","   System.Convert.ToString(Module1.MyPlc[i].ReadExWord)   ","   System.Convert.ToString(Module1.MyPlc[i].WriteExByte)   ","   System.Convert.ToString(Module1.MyPlc[i].WriteExWord)   ","   "\r\n";
			}
			
			//save set. para
			System.IO.File.WriteAllText(Application.StartupPath   "\\ParaSet.psf", setpara);
			Fill_GrdData();
			Module1.StrStatus = "参数保存成功.";
			return true;
		}
		
		public bool Para_Load()
		{
			short i = 0;
			short n = 0;
			short row = 0;
			string[] lines = null;
			string[] temp = null;
			if (!System.IO.File.Exists(Application.StartupPath   "\\ParaSet.psf"))
			{
				System.IO.File.Create(Application.StartupPath   "\\ParaSet.psf");
				return false;
			}
			lines = new string[32768];
			System.IO.StreamReader sr = new System.IO.StreamReader(Application.StartupPath   "\\ParaSet.psf", System.Text.ASCIIEncoding.Default);
			while (sr.Peek() > 0)
			{
				lines[i] = sr.ReadLine();
				i  ;
			}
			sr.Close();
			sr.Dispose();
			row = (short) (i - 1);
			
			for (i = 0; i <= row; i  )
			{
				temp = (lines[i]).Split(',');
				if (temp[0].Trim() == "LOCAL")
				{
					Module1.LocalIP = temp[1].Trim();
					Module1.LocalPort = (int) (Conversion.Val(temp[2]));
					Module1.NetServerRun = (short) (Conversion.Val(temp[3]));
					Module1.MaxPlcIndex = Convert.ToUInt16( Conversion.Val(temp[4]));
					Module1.ServerIP = temp[5].Trim();
					Module1.ServerPort = (int) (Conversion.Val(temp[6]));
				}
				
				if (temp[0].Trim().Substring(0, 3) == "PLC")
				{
					n = (short) (Conversion.Val(temp[0].Trim().Substring(3, 1)));
					Module1.MyPlc[n].Protolcol =Convert.ToUInt16(  Conversion.Val(temp[1]));
					Module1.MyPlc[n].IpAddress = temp[2].Trim();
					Module1.MyPlc[n].NetPort = Convert.ToUInt16( Conversion.Val(temp[3]));
					Module1.MyPlc[n].Station = Convert.ToUInt16( Conversion.Val(temp[4]));
					Module1.MyPlc[n].ReadArea = Convert.ToUInt16( Conversion.Val(temp[5]));
					Module1.MyPlc[n].ReadAdd =Convert.ToUInt16(  Conversion.Val(temp[6]));
					Module1.MyPlc[n].WriteArea =Convert.ToUInt16(  Conversion.Val(temp[7]));
					Module1.MyPlc[n].WriteAdd = Convert.ToUInt16( Conversion.Val(temp[8]));
					Module1.MyPlc[n].ReadExByte = Convert.ToUInt16( Conversion.Val(temp[9]));
					Module1.MyPlc[n].ReadExWord = Convert.ToUInt16( Conversion.Val(temp[10]));
					Module1.MyPlc[n].WriteExByte = Convert.ToUInt16( Conversion.Val(temp[11]));
					Module1.MyPlc[n].WriteExWord = Convert.ToUInt16( Conversion.Val(temp[12]));
				}
			}
			Module1.StrStatus = "参数加载成功.";
			return true;
		}
		
		public bool Para_Disp()
		{
			//On Error Resume Next VBConversions Warning: On Error Resume Next not supported in C#
			short m = 0;
			short i = 0;
			txtLocalIP.Text = Module1.LocalIP.ToString();
			txtLocalPort.Text = Module1.LocalPort.ToString();
			txtServerIP.Text = Module1.ServerIP;
			txtServerPort.Text = Module1.ServerPort.ToString();
			if (Module1.NetServerRun != 0)
			{
				chkNetOption.Checked = true;
			}
			else
			{
				chkNetOption.Checked = false;
			}
			cmbMaxPlcIndex.SelectedIndex = Module1.MaxPlcIndex;
			cmbCurrPlc.Items.Clear();
			for (i = 0; i <= cmbMaxPlcIndex.SelectedIndex; i  )
			{
				cmbCurrPlc.Items.Add("PLC"   System.Convert.ToString(i   1));
			}
			cmbCurrPlc.SelectedIndex = 0;
			//
			m = (short) cmbCurrPlc.SelectedIndex;
			UpPara(Convert.ToUInt16( m));
			//
			return true;
		}
		
		public void UpPara(UInt16 plcnum)
		{
			ushort m = 0;
			m = plcnum;
			cmbProtocol.SelectedIndex = Module1.MyPlc[m].Protolcol;
			txtRemoteIP.Text = Module1.MyPlc[m].IpAddress;
			txtRemotePort.Text = Module1.MyPlc[m].NetPort.ToString();
			txtStation.Text = Module1.MyPlc[m].Station.ToString();
			cmbReadArea.SelectedIndex = Module1.MyPlc[m].ReadArea;
			txtReadAdd.Text = Module1.MyPlc[m].ReadAdd.ToString();
			cmbWriteArea.SelectedIndex = Module1.MyPlc[m].WriteArea;
			txtWriteAdd.Text = Module1.MyPlc[m].WriteAdd.ToString();
			cmbRdExByte.SelectedIndex = Module1.MyPlc[m].ReadExByte;
			cmbRdExWord.SelectedIndex = Module1.MyPlc[m].ReadExWord;
			cmbWtExByte.SelectedIndex = Module1.MyPlc[m].WriteExByte;
			cmbWtExWord.SelectedIndex = Module1.MyPlc[m].WriteExWord;
		}
		
		
		
		
		public void Timer1_Tick(System.Object sender, System.EventArgs e)
		{
			UInt64 ttime = 0;
			UInt64 tv1 = 0;
			short m = 0;
			short tsht = (short) 9999;
			string tstr = "";
			UInt16 i = 0;
			
			Update_GrdData();
			tolStrStatus.Text = Module1.StrStatus;
			tolOpcCount.Text = Module1.MyOPC.OpcClientCount.ToString();
			tolNetCount.Text = Module1.MyOPC.NetClientCount.ToString();
			m = (short) cmbCurrPlc.SelectedIndex;
			//
			labRdCnt.Text = Convert.ToString( Module1.MyPlc[m].ReadCount);
			labWtCnt.Text = Convert.ToString( Module1.MyPlc[m].WriteCount);
			
			if (Module1.SysRun)
			{
				
				butRunOpera.Text = "停止运行";
				
				labPeriod.Text = System.Convert.ToString(Module1.MyPlc[m].PeriodTime);
				
				
				for (i = 0; i <= Module1.MaxPlcIndex; i  )
				{
					if (Module1.MyPlc[i].CommError < tsht)
					{
						tsht = Module1.MyPlc[i].CommError;
					}
				}
				
				RunSaveTime  ;
				ttime = RunSaveTime / 10;
				tstr = "";
				if (ttime > 0)
				{
					tv1 = ttime / 86400;
					if (tv1 > 0)
					{
						tstr = tstr   System.Convert.ToString(tv1)   "d";
						ttime -= tv1 * 86400;
					}
					tv1 = ttime / 3600;
					if (tv1 > 0)
					{
						tstr = tstr   System.Convert.ToString(tv1)   "h";
						ttime -= tv1 * 3600;
					}
					tv1 = ttime / 60;
					if (tv1 > 0)
					{
						tstr = tstr   System.Convert.ToString(tv1)   "m";
						ttime -= tv1 * 60;
					}
					tv1 = ttime / 1;
					if (tv1 > 0)
					{
						tstr = tstr   System.Convert.ToString(tv1)   "s";
					}
					tolRunTime.Text = tstr;
				}
				
				butAddItem.Enabled = false;
				butDelItem.Enabled = false;
			}
			else
			{
				butRunOpera.Text = "系统启动";
				butAddItem.Enabled = true;
				butDelItem.Enabled = true;
				Module1.StrStatus = "停止.";
			}
		}
		
		
		
		public void butPageEx_Click(System.Object sender, System.EventArgs e)
		{
			panPara.Visible = true;
			panData.Visible = false;
		}
		
		public void butDataDisp_Click(System.Object sender, System.EventArgs e)
		{
			panPara.Visible = false;
			panData.Visible = true;
		}
		
		public void butAddItem_Click(System.Object sender, System.EventArgs e)
		{
			if (cmbReadArea.SelectedIndex < 0)
			{
				Interaction.MsgBox("PLC内存选择错误!", MsgBoxStyle.Exclamation, "添加标签");
				return;
			}
			if (Conversion.Val(txtReadAdd.Text) < 0)
			{
				Interaction.MsgBox("读起始地址设置错误", MsgBoxStyle.Exclamation, "添加标签");
				return;
			}
			frmAddItem.Default.ShowDialog();
		}
		
		public void butDelItem_Click(System.Object sender, System.EventArgs e)
		{
			UInt16 i = 0;
			short ind = (short) grdData.CurrentCell.RowIndex;
			if (ind < 0)
			{
				return;
			}
			if (Module1.MaxGrdIndex < 0)
			{
				return;
			}
			MsgBoxResult re = Interaction.MsgBox("确认删除"   Module1.MyTag[ind].Name   "?", (int) MsgBoxStyle.Question   MsgBoxStyle.YesNo, "删除标签");
			if (re != MsgBoxResult.Yes)
			{
				return;
			}
			for (i = Convert.ToUInt16( ind); i <= Module1.MaxGrdIndex; i  )
			{
                Module1.MyTag[ind].Handle = 0;
				Module1.MyTag[i] = Module1.MyTag[i   1];
			}
			Module1.MaxGrdIndex--;
			Fill_GrdData();
			Config_Save();
		}
		
		
		
		
		public bool Fill_GrdData()
		{
			ushort m = 0;
			grdData.Rows.Clear();
			if (Module1.MaxGrdIndex < 0)
			{
				return false;
			}
			for (var i = 0; i <= Module1.MaxGrdIndex; i  )
			{
				m = Module1.MyTag[(int) i].PlcIndex;
				grdData.Rows.Add(1);
				grdData.Rows[i].Cells[0].Value = i   1;
				grdData.Rows[i].Cells[1].Value = Module1.MyTag[(int) i].Name;
				grdData.Rows[i].Cells[2].Value = "PLC"   (m   1).ToString();
				if (Module1.MyTag[(int) i].ReadWrite == 0)
				{
					grdData.Rows[i].Cells[3].Value = Module1.StrMemory[Module1.MyPlc[m].ReadArea]   System.Convert.ToString(Module1.MyPlc[m].ReadAdd   Module1.MyTag[(int) i].AddIndex);
				}
				else
				{
					grdData.Rows[i].Cells[3].Value = Module1.StrMemory[Module1.MyPlc[m].WriteArea]   System.Convert.ToString(Module1.MyPlc[m].WriteAdd   Module1.MyTag[(int) i].AddIndex);
				}
				grdData.Rows[i].Cells[4].Value = Module1.StrDataT[Module1.MyTag[(int) i].DataType];
				grdData.Rows[i].Cells[6].Value = Module1.StrReadWrite[Module1.MyTag[(int) i].ReadWrite];
				grdData.Rows[i].Cells[5].Value = "";
				grdData.Rows[i].Cells[5].ReadOnly = true;
				//
				if (i % 2 != 0)
				{
					grdData.Rows[i].DefaultCellStyle.BackColor = Color.WhiteSmoke; // 浅灰
				}
				else
				{
					grdData.Rows[i].DefaultCellStyle.BackColor = Color.FromArgb(200, 255, 255); // 兰色
				}
			}
			return true;
		}
		
		
		public bool Config_Save()
		{
			string tstr = "";
			UInt16 i = 0;
			if (Module1.MaxGrdIndex > 0)
			{
				tstr = "CONFIG"   ","   System.Convert.ToString(Module1.MaxGrdIndex)   ","   "-"   ","   "-"   ","   System.Convert.ToString(DateTime.Now)   "\r\n";
				for (i = 0; i <= grdData.Rows.Count - 1; i  )
				{
					tstr = tstr   (i   1)   ",";
					tstr = tstr   Module1.MyTag[i].Name   ",";
					tstr = tstr   System.Convert.ToString(Module1.MyTag[i].PlcIndex)   ",";
					tstr = tstr   System.Convert.ToString(Module1.MyTag[i].AddIndex)   ",";
					tstr = tstr   System.Convert.ToString(Module1.MyTag[i].DataType)   ",";
					tstr = tstr   System.Convert.ToString(Module1.MyTag[i].ReadWrite)   "\r\n";
				}
			}
			System.IO.File.WriteAllText(Application.StartupPath   "\\TagConfig.tcf", tstr);
			return true;
		}
		
		
		public bool Config_Load()
		{
			short i = 0;
			short row = 0;
			short cnt = 0;
			string[] lines = null;
			string[] temp = null;
			if (!System.IO.File.Exists(Application.StartupPath   "\\TagConfig.tcf"))
			{
				Module1.MaxGrdIndex = (short) (cnt - 1);
				return false;
			}
			lines = new string[32768];
			System.IO.StreamReader sr = new System.IO.StreamReader(Application.StartupPath   "\\TagConfig.tcf", System.Text.ASCIIEncoding.Default);
			while (sr.Peek() > 0)
			{
				lines[i] = sr.ReadLine();
				i  ;
			}
			sr.Close();
			sr.Dispose();
			row = (short) (i - 1);
			for (i = 0; i <= row; i  )
			{
				temp = (lines[i]).Split(',');
				if ((temp.Length - 1) >= 4)
				{
					if (temp[0].Trim().ToUpper() == "CONFIG")
					{
						Module1.MaxGrdIndex = (short) (Conversion.Val(temp[1]));
					}
					else
					{
						if (Module1.MyOPC.IsTextGB(temp[1].Trim()))
						{
							Interaction.MsgBox("标签名称暂不支持中文字符!", MsgBoxStyle.Exclamation, "添加标签");
							continue;
						}
						Module1.MyTag[cnt].Name = temp[1].Trim();
						Module1.MyTag[cnt].PlcIndex = Convert.ToUInt16( Conversion.Val(temp[2]));
						Module1.MyTag[cnt].AddIndex =Convert.ToUInt16(  Conversion.Val(temp[3]));
						Module1.MyTag[cnt].DataType = Convert.ToUInt16( Conversion.Val(temp[4]));
						Module1.MyTag[cnt].ReadWrite =Convert.ToUInt16(  Conversion.Val(temp[5]));
						cnt  ;
					}
				}
			}
			Module1.MaxGrdIndex = (short) (cnt - 1);
			return true;
		}
		
		
	
		
		public void cmbMaxPlcIndex_SelectedIndexChanged(System.Object sender, System.EventArgs e)
		{
			if (cmbMaxPlcIndex.SelectedIndex >= 8)
			{
				cmbMaxPlcIndex.SelectedIndex = 7;
				frmAbort.Default.ShowDialog();
				return;
			}
			short i = 0;
			cmbCurrPlc.Items.Clear();
			for (i = 0; i <= cmbMaxPlcIndex.SelectedIndex; i  )
			{
				cmbCurrPlc.Items.Add("PLC"   System.Convert.ToString(i   1));
			}
			cmbCurrPlc.SelectedIndex = 0;
		}
		
		
		public void cmbCurrPlc_SelectedIndexChanged(System.Object sender, System.EventArgs e)
		{
			short m = 0;
			m = (short) cmbCurrPlc.SelectedIndex;
			UpPara(Convert.ToUInt16( m));
		}
		
		
		
		
		public void cmbDataArea_SelectedIndexChanged(System.Object sender, System.EventArgs e)
		{
			if (cmbReadArea.SelectedIndex >= 2)
			{
				cmbReadArea.SelectedIndex = 1;
				frmAbort.Default.ShowDialog();
				return;
			}
			MsgBoxResult re;
			if (Module1.MaxGrdIndex > 0)
			{
				re = Interaction.MsgBox("已配置有TAG,变更数据区域后其它区域的TAG不能正常通讯!"   "\r\n"   "是否删除该PLC之前配置的TAG?", (int) MsgBoxStyle.Question   MsgBoxStyle.YesNo, "数据区域");
				if (re == MsgBoxResult.Yes)
				{
					
				}
			}
			
		}
		
		public void cmbWriteArea_SelectedIndexChanged(System.Object sender, System.EventArgs e)
		{
			if (cmbWriteArea.SelectedIndex >= 2)
			{
				cmbWriteArea.SelectedIndex = 1;
				frmAbort.Default.ShowDialog();
				return;
			}
			MsgBoxResult re;
			if (Module1.MaxGrdIndex > 0)
			{
				re = Interaction.MsgBox("已配置有TAG,变更数据区域后其它区域的TAG不能正常通讯!"   "\r\n"   "是否删除该PLC之前配置的TAG?", (int) MsgBoxStyle.Question   MsgBoxStyle.YesNo, "数据区域");
				if (re == MsgBoxResult.Yes)
				{
					
				}
			}
		}
		
		public void butManual_Click(System.Object sender, System.EventArgs e)
		{
			frmAbort.Default.Show();
		}
		
		public void butMainHelp_Click(System.Object sender, System.EventArgs e)
		{
			frmAbort.Default.Show();
		}
		
		
		public void butTagEdit_Click(System.Object sender, System.EventArgs e)
		{
			if (grdData.Rows.Count < 1)
			{
				return;
			}
			short num = (short) grdData.CurrentRow.Index;
			if ((num < 0) || (num > Module1.MaxGrdIndex))
			{
				return;
			}
			Module1.EditTagIndex = num;
			frmTagEdit.Default.Show();
		}
		
		public void grdData_CellClick(System.Object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
		{
			if (grdData.RowCount < 1)
			{
				return;
			}
			short num = (short) grdData.CurrentRow.Index;
			if ((num < 0) || (num > Module1.MaxGrdIndex))
			{
				return;
			}
			if (Module1.EditShow)
			{
				Module1.EditTagIndex = num;
				frmTagEdit.Default.EditUp(Module1.EditTagIndex);
			}
		}
		
		public void grdData_CellDoubleClick(System.Object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
		{
			if (grdData.RowCount < 1)
			{
				return;
			}
			short num = (short) grdData.CurrentRow.Index;
			if ((num < 0) || (num > Module1.MaxGrdIndex))
			{
				return;
			}
			if (!Module1.EditShow)
			{
				butTagEdit_Click(null, null);
			}
		}
		
		
		public void cmbProtolcol_SelectedIndexChanged(System.Object sender, System.EventArgs e)
		{
			if (cmbProtocol.SelectedIndex >= 2)
			{
				cmbProtocol.SelectedIndex = 1;
				frmAbort.Default.ShowDialog();
				return;
			}
			if (cmbProtocol.SelectedIndex == 0)
			{
				txtStation.Enabled = false;
			}
			else
			{
				txtStation.Enabled = true;
			}
		}
		
		
		
		
		
		
	}
	
}


标签: 服务 opc

实例下载地址

网友评论

第 1 楼 工载 发表于: 2017-12-26 09:25 21
一堆错,项目文件少两个,引用文件缺失

支持(0) 盖楼(回复)

第 2 楼 lrzant 发表于: 2018-12-21 10:49 42
一堆错,项目文件少两个,引用文件缺失

工载 2017-12-26 09:25 21

一楼说的对,怎么这样也能过评审

支持(0) 盖楼(回复)

第 3 楼 lrzant 发表于: 2018-12-21 11:03 31
少了关键的Entity类,整个代码跑不起来。

支持(0) 盖楼(回复)

第 4 楼 zhanghengzhangheng 发表于: 2022-07-22 10:15 14
没有看评论就下了,用不了

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有5条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警