⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 OPC 开发工具包2.0.OPC工具包是用来简化OPC规范服务器开发的工具包
💻 CS
📖 第 1 页 / 共 2 页
字号:
			this.statusBarPanel1.Width = 160;
			// 
			// statusBarPanel2
			// 
			this.statusBarPanel2.Width = 160;
			// 
			// statusBarPanel3
			// 
			this.statusBarPanel3.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
			this.statusBarPanel3.Width = 296;
			// 
			// treeView1
			// 
			this.treeView1.Dock = System.Windows.Forms.DockStyle.Left;
			this.treeView1.HideSelection = false;
			this.treeView1.ImageIndex = -1;
			this.treeView1.Location = new System.Drawing.Point(0, 0);
			this.treeView1.Name = "treeView1";
			this.treeView1.SelectedImageIndex = -1;
			this.treeView1.Size = new System.Drawing.Size(144, 411);
			this.treeView1.TabIndex = 4;
			this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
			// 
			// splitter1
			// 
			this.splitter1.Location = new System.Drawing.Point(144, 0);
			this.splitter1.Name = "splitter1";
			this.splitter1.Size = new System.Drawing.Size(3, 411);
			this.splitter1.TabIndex = 5;
			this.splitter1.TabStop = false;
			// 
			// listView1
			// 
			this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
																						this.columnHeader1,
																						this.columnHeader2,
																						this.columnHeader3,
																						this.columnHeader4});
			this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;
			this.listView1.FullRowSelect = true;
			this.listView1.GridLines = true;
			this.listView1.Location = new System.Drawing.Point(147, 0);
			this.listView1.Name = "listView1";
			this.listView1.Size = new System.Drawing.Size(485, 411);
			this.listView1.TabIndex = 6;
			this.listView1.View = System.Windows.Forms.View.Details;
			// 
			// columnHeader1
			// 
			this.columnHeader1.Text = "Name";
			this.columnHeader1.Width = 120;
			// 
			// columnHeader2
			// 
			this.columnHeader2.Text = "Value";
			this.columnHeader2.Width = 140;
			// 
			// columnHeader3
			// 
			this.columnHeader3.Text = "Quality";
			this.columnHeader3.Width = 80;
			// 
			// columnHeader4
			// 
			this.columnHeader4.Text = "TimeStamp";
			this.columnHeader4.Width = 120;
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
			this.ClientSize = new System.Drawing.Size(632, 433);
			this.Controls.Add(this.listView1);
			this.Controls.Add(this.splitter1);
			this.Controls.Add(this.treeView1);
			this.Controls.Add(this.statusBar1);
			this.Menu = this.mainMenu1;
			this.Name = "Form1";
			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
			this.Text = "OPC DA Server DEMO by C#(Agilewill Software co.ltd)";
			this.Load += new System.EventHandler(this.Form1_Load);
			this.Closed += new System.EventHandler(this.Form1_Closed);
			((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.statusBarPanel3)).EndInit();
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// 应用程序的主入口点。
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void splitter1_SplitterMoved(object sender, System.Windows.Forms.SplitterEventArgs e)
		{
		
		}

		private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
		{
			Monitor();
		}

		private void mnExit_Click(object sender, System.EventArgs e)
		{
			this.Close();
		}

		private void mnRegister_Click(object sender, System.EventArgs e)
		{
			RegServer(ClassID, ProgID, Desc, Application.ExecutablePath);
		}

		private void mnUnregister_Click(object sender, System.EventArgs e)
		{
			UnregServer(ClassID, ProgID);
		}
		private void CreateOPCServer()
		{
			if(CreateServer(ClassID, 1000))
			{
				m_writeCallback = new WRITECALLBACK(WriteCallback);
				m_readCallback = new READCALLBACK(ReadCallback);
				m_serverNotify = new SERVERNOTIFY(ServerNotify);

				SetWriteCallback(m_writeCallback);
				SetReadCallback(m_readCallback);
				SetServerNotify(m_serverNotify);
				AddTags();
				SetServerState(1);
				timer1.Interval=1000;
				timer1.Enabled=true;
			}
		}
		private void FreeOPCServer()
		{
			FreeServer();
		}
		private void AddTags()
		{
			TreeNode tn;
			int I;
			uint h;
			tn=treeView1.Nodes.Add("ROOT");
			tn.Nodes.Add("Integer");
			tn.Nodes.Add("String");
			tn.Nodes.Add("Bool");
			tn.Nodes.Add("Float");

			tagList=new ArrayList();
			h=RegTagEx(0,"Integer",0,0);
			for(I=0;I<8;I++)
			{
				tag t=new tag(String.Format("TagInt{0}",I));
				t.handle=RegTagEx(h,t.name,3,3);
				tagList.Add(t);	
			}
			h=RegTagEx(0,"String",0,0);
			for(I=0;I<8;I++)
			{
				tag t=new tag(String.Format("TagString{0}",I));
				t.handle=RegTagEx(h,t.name,8,3);
				tagList.Add(t);	
			}
			h=RegTagEx(0,"Bool",0,0);
			for(I=0;I<8;I++)
			{
				tag t=new tag(String.Format("TagBool{0}",I));
				t.handle=RegTagEx(h,t.name,11,3);
				tagList.Add(t);	
			}
			h=RegTagEx(0,"Float",0,0);
			for(I=0;I<8;I++)
			{
				tag t=new tag(String.Format("TagFloat{0}",I));
				t.handle=RegTagEx(h,t.name,5,3);
				tagList.Add(t);	
			}
		}

		private void Simulate()
		{
			tag Tag;
			seed++;
			for(int i=0;i<4;i++)
			{
				Tag=(tag)tagList[i];
				Tag.value=seed;
				Tag.quality=192;
				Tag.timeStamp=DateTime.Now.ToFileTime();
				UpdateTagWithTimeStamp(Tag.handle, Tag.value, Tag.quality, Tag.timeStamp);
			}
			for(int i=8;i<12;i++)
			{
				Tag=(tag)tagList[i];
				Tag.value=seed.ToString();
				Tag.quality=192;
				Tag.timeStamp=DateTime.Now.ToFileTime();
				UpdateTagWithTimeStamp(Tag.handle, Tag.value, Tag.quality, Tag.timeStamp);
			}
			for(int i=16;i<20;i++)
			{
				Tag=(tag)tagList[i];
				if(seed%2==1)
					Tag.value=true;
				else
					Tag.value=false;

				Tag.quality=192;
				Tag.timeStamp=DateTime.Now.ToFileTime();
				UpdateTagWithTimeStamp(Tag.handle, Tag.value, Tag.quality, Tag.timeStamp);
			}
			for(int i=24;i<28;i++)
			{
				Tag=(tag)tagList[i];
				Tag.value=seed*1.0002;
				Tag.quality=192;
				Tag.timeStamp=DateTime.Now.ToFileTime();
				UpdateTagWithTimeStamp(Tag.handle, Tag.value, Tag.quality, Tag.timeStamp);
			}
			Monitor();
		}

		private void Monitor()
		{
			ListViewItem lvi;
			if(treeView1.SelectedNode!=null)
			{
				listView1.Items.Clear();
				listView1.BeginUpdate();
				switch(treeView1.SelectedNode.Text)
				{
					case "Integer":
						for(int i=0;i<8;i++)
						{
							tag Tag=(tag)tagList[i];
							lvi=listView1.Items.Add(Tag.name);
							lvi.SubItems.Add(Tag.value.ToString());
							lvi.SubItems.Add(Tag.quality.ToString());
							lvi.SubItems.Add(DateTime.FromFileTime(Tag.timeStamp).ToString());
						}
						break;
					case "String":
						for(int i=8;i<16;i++)
						{
							tag Tag=(tag)tagList[i];
							lvi=listView1.Items.Add(Tag.name);
							lvi.SubItems.Add(Tag.value.ToString());
							lvi.SubItems.Add(Tag.quality.ToString());
							lvi.SubItems.Add(DateTime.FromFileTime(Tag.timeStamp).ToString());
						}
						break;
					case "Bool":
						for(int i=16;i<24;i++)
						{
							tag Tag=(tag)tagList[i];
							lvi=listView1.Items.Add(Tag.name);
							lvi.SubItems.Add(Tag.value.ToString());
							lvi.SubItems.Add(Tag.quality.ToString());
							lvi.SubItems.Add(DateTime.FromFileTime(Tag.timeStamp).ToString());
						}
						break;
					case "Float":
						for(int i=24;i<32;i++)
						{
							tag Tag=(tag)tagList[i];
							lvi=listView1.Items.Add(Tag.name);
							lvi.SubItems.Add(Tag.value.ToString());
							lvi.SubItems.Add(Tag.quality.ToString());
							lvi.SubItems.Add(DateTime.FromFileTime(Tag.timeStamp).ToString());
						}
						break;
				}
				listView1.EndUpdate();
			}
		}
   
		private void Form1_Load(object sender, System.EventArgs e)
		{
			CreateOPCServer();
		}

		private void Form1_Closed(object sender, System.EventArgs e)
		{
			FreeOPCServer();
		}

		private void timer1_Tick(object sender, System.EventArgs e)
		{
			Simulate();
		}
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -