📄 form1.cs
字号:
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 + -