SQL dll 实例名 SQL Server Management Studio ,前面计算机名(或IP),后面服务器名 OPC dll 服务名 ProgID Node\ProgID //网络邻居
private void RefreshServer() {
//清空
IPHostEntry IPhost = Dns.GetHostEntry(Environment.MachineName);
if(IPhost.AddressList.Length > 0)
{
for(int i = 0; i < IPhost.AddressList.Length;i++)
{
string host = Dns.GetHostEntry(IPhost.AddressList[i]).HostName;
if (!this.cmb_ServerNode.Items.Contains(host))
{
this.cmb_ServerNode.Items.Add(host);
}
}
}
}
//增加线程,解决启动卡顿。
Task.Run(new Action(() =>
{
RefreshServer();
}));
//从不是创建控件的线程访问它,解决办法,增加Invoke方法。
this.Invoke(new Action(() => {
if (!this.cmb_ServerNode.Items.Contains(host))
{
this.cmb_ServerNode.Items.Add(host);
}
}));
创建对象,增加方法
OPCAutomation.OPCServer OPCServer = new OPCAutomation.OPCServer();
private void cmb_ServerNode_SelectedIndexChanged(object sender, EventArgs e)
{
//dynamic不是标准c#语法,需要object转换,
object serverlist = OPCServer.GetOPCServers(this.cmb_ServerNode.Text);
//serverlist需要强转Array
foreach(var item in (Array)serverlist)
{
if (!this.cmb_ServerName.Items.Contains(item))
{
this.cmb_ServerName.Items.Add(item);
}
}
}
返回类型是void,使用捕获try、catch
private void btn_Connect_Click(object sender, EventArgs e)
{
try {
PCServer.Connect(this.cmb_ServerName.Text, this.cmb_ServerNode.Text);
}
catch (Exception)
{
MessageBox.Show("OPC连接失败");
return;
}
MessageBox.Show("OPC连接成功");
}
//Array类型获取
int clienthandle = Convert.ToInt32(ClientHandles.GetValue(1));
本文章使用limfx的vscode插件快速发布