📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Collections;
using System.Collections.Specialized;
unsafe public delegate void DATACHANGEPROC(uint sHandle, uint gHandle, uint iHandle, object value, long timeStamp, ushort quality);
unsafe public delegate void SHUTDOWNPROC(uint sHandle, string reason);
namespace DAC_CSDEMO
{
public partial class Form1 : Form
{
public static uint m_ServerHandle, m_GroupHandle;
private DATACHANGEPROC m_dataChange;
private SHUTDOWNPROC m_shutDown;
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_ActiveCode(string userName, string passWord);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_Init();
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_Uninit();
[DllImport("DACLTSDK.dll")]
public static extern uint ASDAC_GetServers(string host, uint version, ref object clsIDs, ref object progIDs);
[DllImport("DACLTSDK.dll")]
public static extern uint ASDAC_Connect(string host, string classID, uint version);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_GetServerStatus(uint sHandle, ref long startTime, ref long currentTime, ref long updateTime,
ref ushort state, ref uint bandWidth, ref uint groupCount, ref ushort majorVersion, ref ushort minorVersion, ref ushort buildNum,
StringBuilder vendor, uint venderSize);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_SetDataChangeProc(uint sHandle, DATACHANGEPROC dataChange);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_SetShutdownProc(uint sHandle, SHUTDOWNPROC shutDown);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_Disconnect(uint sHandle);
[DllImport("DACLTSDK.dll")]
public static extern uint ASDAC_AddGroup(uint sHandle, string groupName, bool active, uint updateRate, int timeBias, float deadBand, uint LCID);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_RemoveGroup(uint sHandle, uint gHandle);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_SetGroupName(uint sHandle, uint gHandle, string groupName);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_RefreshGroup(uint sHandle, uint gHandle, ushort dataSource);
//OPC_DS_CACHE=1, OPC_DS_DEVICE=2
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_GetGroupStat(uint sHandle, uint gHandle, ref uint groupRate, ref bool active, ref int timeBias, ref float deadBand, ref uint LCID);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_SetGroupStat(uint sHandle, uint gHandle, uint groupRate, bool active, int timeBias, float deadBand, uint LCID);
[DllImport("DACLTSDK.dll")]
public static extern uint ASDAC_AddItem(uint sHandle, uint gHandle, string tagName);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_RemoveItem(uint sHandle, uint gHandle, uint iHandle);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_ReadItem(uint sHandle, uint gHandle, uint iHandle, ref object Value, ref long timeStamp, ref ushort quality);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_WriteItem(uint sHandle, uint gHandle, uint iHandle, object Value, bool Async);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_ActiveItem(uint sHandle, uint gHandle, uint iHandle, bool Active);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_ValidateItem(uint sHandle, string tagName, ushort dataType, ushort accessRights);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_GetNameSpace(uint sHandle, ref ushort nameSpace);
//OPC_NS_HIERARCHIAL=1,OPC_NS_FLAT= 2
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_ChangeBrowsePosition(uint sHandle, ushort direction, string nodeName);
//OPC_BROWSE_UP = 1 移动到上级节点,忽略NodeName
//OPC_BROWSE_DOWN = 2 移动到下级节点
//OPC_BROWSE_TO = 3 直接移动到某一节点
[DllImport("DACLTSDK.dll")]
public static extern uint ASDAC_BrowseItems(uint sHandle, ushort filterNodeType, string filterTagName, ushort filterDataType, ushort filterAccessRights, ref object tagNames);
//filterNode
//OPC_BRANCH=1
//OPC_LEAF=2
//filterAccessRights read write
//0- 不能读写 1- 只读 2- 只写 3- 可读可写
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_GetItemFullName(uint sHandle, string itemName, StringBuilder itemFullName, uint itemFullNameSize);
[DllImport("DACLTSDK.dll")]
public static extern uint ASDAC_GetItemProperties(uint sHandle, string itemName, ref object propIDs, ref object propDatatypes, ref object propDescs);
[DllImport("DACLTSDK.dll")]
public static extern bool ASDAC_GetItemPropertyValue(uint sHandle, string itemName, uint propID, ref object propValue);
public class OPCItem
{
public uint m_Handle;
public string m_Name;
public object m_Value;
public ushort m_Quality;
public long m_TimeStamp;
public OPCItem(string pName)
{
//m_TimeStamp = DateTime.Now.ToFileTime();
m_Name = pName;
}
public override string ToString()
{
return m_Name;
}
}
private ArrayList ItemArray;
public Form1()
{
InitializeComponent();
mainFrm = this;
ItemArray= new ArrayList();
m_dataChange = new DATACHANGEPROC(DataChange); ;
m_shutDown = new SHUTDOWNPROC(ShutDown); ;
}
unsafe public void DataChange(uint sHandle, uint gHandle, uint iHandle, object value, long timeStamp, ushort quality)
{
foreach (OPCItem item in ItemArray)
{
if (item.m_Handle == iHandle)
{
item.m_Value = value;
item.m_Quality = quality;
item.m_TimeStamp = timeStamp;
ListViewItem lvi;
lvi = listView1.Items[ItemArray.IndexOf(item)];
if(value!=null)
lvi.SubItems[1].Text = value.ToString();
else
lvi.SubItems[1].Text = "";
lvi.SubItems[2].Text = DateTime.FromFileTime(timeStamp).ToString();
}
}
}
unsafe public void ShutDown(uint sHandle, string reason)
{
Disconnect();
}
private void Form1_Load(object sender, EventArgs e)
{
//ASDAC_ActiveCode("", "");
ASDAC_Init();
}
private void Connect()
{
m_ServerHandle = ASDAC_Connect(DAC_CSDEMO.Properties.Settings.Default.Host, DAC_CSDEMO.Properties.Settings.Default.ClassID, 2);
if (m_ServerHandle > 0)
{
ASDAC_SetShutdownProc(m_ServerHandle, m_shutDown);
m_GroupHandle = ASDAC_AddGroup(m_ServerHandle, "CSGroup", true, 1000, -480, 0, 0);
if (m_GroupHandle > 0)
{
ASDAC_SetDataChangeProc(m_ServerHandle, m_dataChange);
ASDAC_RefreshGroup(m_ServerHandle, m_GroupHandle, 2);//2=OPC_DEVICE
this.Text = "OPC DA Client by C#(Agilewill co.ltd)[" + DAC_CSDEMO.Properties.Settings.Default.ProgID + "]";
ConnectMenu.Enabled = false;
DisconnectMenu.Enabled = true;
ServerStatusMenu.Enabled = true;
GroupStatusMenu.Enabled = true;
AddItemMenu.Enabled = true;
}
else
{
MessageBox.Show("增加组失败(Add Group Failure)!");
}
}
else
{
MessageBox.Show("连接到服务器失败(Connect to Server Failure)!");
}
}
private void Disconnect()
{
if (m_ServerHandle > 0)
{
ASDAC_Disconnect(m_ServerHandle);
this.Text = "OPC DA Client by C#(Agilewill co.ltd)";
m_ServerHandle = 0;
m_GroupHandle = 0;
ConnectMenu.Enabled = true;
DisconnectMenu.Enabled = false;
ServerStatusMenu.Enabled = false;
GroupStatusMenu.Enabled = false;
AddItemMenu.Enabled = false;
RemoveItemMenu.Enabled = false;
ReadItemMenu.Enabled = false;
WriteItemMenu.Enabled = false;
ItemPropMenu.Enabled = false;
}
}
public void InnerAddItem(string tagName)
{
ListViewItem lvi;
OPCItem item = new OPCItem(tagName);
item.m_Handle = ASDAC_AddItem(m_ServerHandle, m_GroupHandle, tagName);
ItemArray.Add(item);
lvi = listView1.Items.Add(tagName);
lvi.SubItems.Add("");
lvi.SubItems.Add("");
}
public static void AddItem(string tagName)
{
if ((mainFrm != null) && (tagName.Length > 0))
{
mainFrm.InnerAddItem(tagName);
}
}
public static Form1 mainFrm;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -