C#通过OPC连接PLC读写功能案例

2018-11-19 21:46

C#通过OPC连接PLC读写功能案例

最简单、最有效的PLC连接程序,里面包含了各种类型的读写功能,绝对是拷贝过去,直接把地址替换就可以使用。 功能简介:

本程序主要是针对PLC发送请求信号,收到信号执行调用,例如:由PLC发送请求信号1,程序自动去调用,当调用结束,信号恢复为0,直到下一次变为1,再次进行调用;

1、手工下载一个Interop.OPCAutomation.dll 2、手工创建一个类PublicOPC_PLC 3、直接调用即可, 调用方法:

PublicOPC_PLC Plc = newPublicOPC_PLC(); Plc.InitConnect();

Plc.CH160CreateGroup(\地址\);

//此处的PLC地址必须为PLC中DB块对应的BOOL型的地址例如:C1.[S7].DB35.DBX544.0

using System;

usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingOPCAutomation; using System.Net;

usingSystem.Threading;

namespaceOPCService {

publicclassPublicOPC_PLC {

#region私有变量 ///

///OPCServer Object ///

publicstaticOPCServerMyServer; ///

///OPCGroups Object ///

publicstaticOPCGroupsMyGroups; ///

///OPCGroup Object ///

publicstaticOPCGroupMyGroupMA; publicstaticOPCGroup MyGroupMA2; ///

///OPCItems Object ///

OPCItemsMyItemsMA; ///

///OPCItem Object ///

OPCItem[] MyItemMA; ///

///主机IP ///

publicstaticstringstrHostIP = \; ///

///主机名称 ///

publicstaticstringstrHostName = \; ///

///连接状态 ///

publicstaticboolopc_connected = false; ///

///客户端句柄 ///

intitmHandleClient = 0; ///

///服务端句柄 ///

intitmHandleServer = 0; publicOPCGroupGroupMA {

get { returnMyGroupMA; } }

#endregion

///

///初始化连接对应的状态,包括连接服务器,需要读取的初始值 ///

publicvoidInitConnect() {

//初始化OPC服务配置 GetLocalServer();

ConnectRemoteServer();//连接OPC服务器 MyGroups = MyServer.OPCGroups;

}

//枚举本地OPC服务器

publicvoidGetLocalServer() {

//获取本地计算机IP,计算机名称 strHostName = Dns.GetHostName(); //或者通过局域网内计算机名称 //获取本地计算机IP,计算机名称

IPHostEntryIPHost = Dns.Resolve(Environment.MachineName);

if (IPHost.AddressList.Length> 0) {

IPHostEntryipHostEntry = Dns.GetHostByAddress(IPHost.AddressList[0].ToString()); strHostName = ipHostEntry.HostName.ToString(); }

//获取本地计算机上的OPCServerName try

{

MyServer = newOPCServer();

objectserverList = MyServer.GetOPCServers(strHostName);

foreach (string server in (Array)serverList) {

//cmbServerName.Items.Add(turn);

Console.WriteLine(\本地OPC服务器:{0}\, server); } }

catch (Exception err) {

Console.WriteLine(\枚举本地OPC服务器出错:{0}\, err.Message); } }

//连接OPC服务器

///

/// publicboolConnectRemoteServer() { try

{

stringremoteServerIP = \, remoteServerName = \;

MyServer.Connect(remoteServerName, remoteServerIP);//连接本地服务器:服务器名+主机名或IP

if (MyServer.ServerState == (int)OPCServerState.OPCRunning) {

////MessageBox.Show(\已连接到:{0}\ //WriteLog_Station(\网络连接成功\ }

else

{

//这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档 ////MessageBox.Show(\状态:{0}\ //WriteLog_Station(\网络连接失败\ }

MyServer.ServerShutDown += ServerShutDown;//服务器断开事件 }

catch (Exception err) {

//MessageBox.Show(\连接远程服务器出现错误:{0}\ returnfalse; } returntrue; }

publicvoidServerShutDown(string Reason)//服务器先行断开 {

//WriteLog_Station(\服务器已经先行断开!\

MyServer.Disconnect(); }

publicvoidRemoveGroup(string Name) {

MyServer.OPCGroups.Remove(Name); }

voidGroupAsyncWriteComplete(intTransactionID, intNumItems, refArrayClientHandles, refArray Errors) {

Console.WriteLine(\); /*for (inti = 1; i<= 1; i++) {

Console.WriteLine(\:{0} ClientHandles:{1} Error:{2}\ClientHandles.GetValue(i).ToString(), Errors.GetValue(i).ToString()); }*/ }

voidGroupAsyncReadComplete(intTransactionID, intNumItems, refSystem.ArrayClientHandles, refSystem.ArrayItemValues, refSystem.Array Qualities, refSystem.ArrayTimeStamps, refSystem.Array Errors) {

Console.WriteLine(\); for (inti = 1; i<= 1; i++) {

//Console.WriteLine(\:{0} ClientHandles:{1} Error:{2}\TransactionID.ToString(), ClientHandles.GetValue(i).ToString(), Errors.GetValue(i).ToString()); Console.WriteLine(\:{0}\, Convert.ToString(ItemValues.GetValue(i))); } }

#region读取功能

publicvoidAddGroupItems(string Address)//添加组 {

MyItemMA = newOPCItem[1];

inti = 0;//i用于标记Item中的索引 //itmHandleServer;

MyItemsMA = MyGroupMA.OPCItems; //MyItems2 = MyGroup2.OPCItems;

MyItemMA[0] = MyItemsMA.AddItem(Address, i);

} ///

///读取byte转ASCII值 ///

publicstringReadData(string Add) {

string result = \; try

{ //初始化item数组 //GetLocalServer();

AddGroupItems(Add);

Thread.Sleep(200);//暂停线程以让DataChange反映,否则下面的同步读可能读不到

////以下同步读

objectItemValues; object Qualities; objectTimeStamps;//同步读的临时变量:值、质量、时间戳

MyItemMA[0].Read(1, outItemValues, out Qualities, outTimeStamps);//同步读,第一个参数只能为1或2

//int q0 = Convert.ToInt32(ItemValues);//转换后获取item值 Byte[] bytTemp = ItemValuesasByte[]; //将byte数组转为字符串+

result = System.Text.ASCIIEncoding.ASCII.GetString(bytTemp);//OK ////MessageBox.Show(result, \结果\

return result; }

catch (Exception ex) { //异常处理 return result; } finally

{

} } ///

///读取boolean值,需要先创建group ///


C#通过OPC连接PLC读写功能案例.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年贵州混凝土工:施工配合比考试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: