ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:19.08KB ,
资源ID:13059378      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13059378.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C#通过OPC连接PLC读写功能案例.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、C#通过OPC连接PLC读写功能案例C#通过OPC连接PLC读写功能案例最简单、最有效的PLC连接程序,里面包含了各种类型的读写功能,绝对是拷贝过去,直接把地址替换就可以使用。功能简介:本程序主要是针对PLC发送请求信号,收到信号执行调用,例如:由PLC发送请求信号1,程序自动去调用,当调用完毕,信号恢复为0,直到下一次变为1,再次进展调用;1、手工下载一个Interop.OPCAutomation.dll2、手工创立一个类PublicOPC_PLC3、直接调用即可,调用方法:PublicOPC_PLC Plc = newPublicOPC_PLC(); Plc.InitConnect();

2、Plc.CH160CreateGroup(PLC地址);/此处的PLC地址必须为PLC中DB块对应的BOOL型的地址例如:C1.S7.DB35.DBX544.0using System;using System.Collections.Generic;using System.Linq;using System.Text;using OPCAutomation;using System.Net;using System.Threading;namespace OPCServicepublicclassPublicOPC_PLC #region私有变量/ OPCServer Object /pu

3、blicstaticOPCServer MyServer;/ OPCGroups Object /publicstaticOPCGroups MyGroups;/ OPCGroup Object /publicstaticOPCGroup MyGroupMA;publicstaticOPCGroup MyGroupMA2;/ OPCItems Object /OPCItems MyItemsMA;/ OPCItem Object /OPCItem MyItemMA;/主机IP /publicstaticstring strHostIP = ;/主机名称/publicstaticstring s

4、trHostName = ;/连接状态/publicstaticbool opc_connected = false;/客户端句柄/int itmHandleClient = 0;/效劳端句柄/int itmHandleServer = 0;publicOPCGroup GroupMA get return MyGroupMA; #endregion/初始化连接对应的状态,包括连接效劳器,需要读取的初始值/publicvoid InitConnect() /初始化OPC效劳配置 GetLocalServer(); ConnectRemoteServer();/连接OPC效劳器 MyGroups

5、 = MyServer.OPCGroups; /枚举本地OPC效劳器publicvoid GetLocalServer() /获取本地计算机IP,计算机名称 strHostName = Dns.GetHostName();/或者通过局域网计算机名称/获取本地计算机IP,计算机名称IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);if (IPHost.AddressList.Length 0) IPHostEntry ipHostEntry = Dns.GetHostByAddress(IPHost.AddressList0.To

6、String(); strHostName = ipHostEntry.HostName.ToString(); /获取本地计算机上的OPCServerName try MyServer = newOPCServer();object serverList = MyServer.GetOPCServers(strHostName);foreach (string server in (Array)serverList) /cmbServerName.Items.Add(turn); Console.WriteLine(本地OPC效劳器:0, server); catch (Exception

7、err) Console.WriteLine(枚举本地OPC效劳器出错:0, err.Message); /连接OPC效劳器/OPCServerIP/OPCServer名称publicbool ConnectRemoteServer() try string remoteServerIP = , remoteServerName = KEPware.KEPServerEx.V4; MyServer.Connect(remoteServerName, remoteServerIP);/连接本地效劳器:效劳器名+主机名或IP if (MyServer.ServerState = (int)OPCS

8、erverState.OPCRunning) /MessageBox.Show(已连接到:0, MyServer.ServerName);/WriteLog_Station(网络连接成功); else /这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档/MessageBox.Show(状态:0, MyServer.ServerState.ToString();/WriteLog_Station(网络连接失败); MyServer.ServerShutDown += ServerShutDown;/效劳器断开事件 catch (Exception err) /MessageB

9、ox.Show(连接远程效劳器出现错误:0 + err.Message);returnfalse; returntrue; publicvoid ServerShutDown(string Reason)/效劳器先行断开 /WriteLog_Station(效劳器已经先行断开!); MyServer.Disconnect(); publicvoid RemoveGroup(string Name) MyServer.OPCGroups.Remove(Name); void GroupAsyncWriteComplete(int TransactionID, int NumItems, refA

10、rray ClientHandles, refArray Errors) Console.WriteLine(%AsyncWriteComplete%);/*for (int i = 1; i = 1; i+) Console.WriteLine(Tran:0 ClientHandles:1 Error:2, TransactionID.ToString(), ClientHandles.GetValue(i).ToString(), Errors.GetValue(i).ToString(); */ void GroupAsyncReadComplete(int TransactionID,

11、 int NumItems, ref System.Array ClientHandles, ref System.Array ItemValues, ref System.Array Qualities, ref System.Array TimeStamps, ref System.Array Errors) Console.WriteLine(*GroupAsyncReadComplete*);for (int i = 1; i = 1; i+) /Console.WriteLine(Tran:0 ClientHandles:1 Error:2, TransactionID.ToStri

12、ng(), ClientHandles.GetValue(i).ToString(), Errors.GetValue(i).ToString(); Console.WriteLine(Vaule:0, Convert.ToString(ItemValues.GetValue(i); #region读取功能publicvoid AddGroupItems(string Address)/添加组 MyItemMA = newOPCItem1;int i = 0;/i用于标记Item中的索引/itmHandleServer; MyItemsMA = MyGroupMA.OPCItems;/MyIt

13、ems2 = MyGroup2.OPCItems; MyItemMA0 = MyItemsMA.AddItem(Address, i); /读取byte转ASCII值/publicstring ReadData(string Add) string result = ;try /初始化item数组/GetLocalServer(); AddGroupItems(Add);Thread.Sleep(200);/暂停线程以让DataChange反映,否那么下面的同步读可能读不到/以下同步读object ItemValues; object Qualities; object TimeStamps;

14、/同步读的临时变量:值、质量、时间戳 MyItemMA0.Read(1, out ItemValues, out Qualities, out TimeStamps);/同步读,第一个参数只能为1或2 /int q0 = Convert.ToInt32(ItemValues);/转换后获取item值Byte bytTemp = ItemValues asByte;/将byte数组转为字符串+ result = System.Text.ASCIIEncoding.ASCII.GetString(bytTemp);/OK/MessageBox.Show(result, 结果);return res

15、ult; catch (Exception ex) /异常处理return result; finally /读取boolean值,需要先创立group/publicBoolean ReadData_Boolean(string Add) Boolean result = false;try /初始化item数组/GetLocalServer(); AddGroupItems(Add);Thread.Sleep(200);/暂停线程以让DataChange反映,否那么下面的同步读可能读不到/以下同步读object ItemValues; object Qualities; object Tim

16、eStamps;/同步读的临时变量:值、质量、时间戳 MyItemMA0.Read(1, out ItemValues, out Qualities, out TimeStamps);/同步读,第一个参数只能为1或2 /int q0 = Convert.ToInt32(ItemValues);/转换后获取item值Boolean result1 = (Boolean)ItemValues; result = result1;return result; catch (Exception ex) /异常处理return result; finally /读取Object值,需要先创立group/

17、publicobject ReadData_Object(string Add) try CreateGroup(Add); catch (Exception ex) object result = null;try AddGroupItems(Add);Thread.Sleep(200);/暂停线程以让DataChange反映,否那么下面的同步读可能读不到/以下同步读object ItemValues; object Qualities; object TimeStamps;/同步读的临时变量:值、质量、时间戳 MyItemMA0.Read(1, out ItemValues, out Qu

18、alities, out TimeStamps);/同步读,第一个参数只能为1或2 /int q0 = Convert.ToInt32(ItemValues);/转换后获取item值 result = ItemValues;if (result != null) if (result.ToString() = ) return; else result = result.ToString().Replace(0, ); result = result.ToString().Replace(n, ); result = result.ToString().Replace(r, ); result

19、 = result.ToString().Replace(t, ); return result; catch (Exception ex) /异常处理 result = ;return result; finally /RemoveGroup(Add); publicbool CreateGroup(string Address) try MyGroupMA = MyServer.OPCGroups.Add(Address);/添加组/以下设置组属性 MyServer.OPCGroups.DefaultGroupIsActive = true;/激活组。 MyServer.OPCGroups

20、.DefaultGroupDeadband = 0;/ 死区值,设为0时,效劳器端该组任何数据变化都通知组。 MyServer.OPCGroups.DefaultGroupUpdateRate = 200;/默认组群的刷新频率为200ms MyGroupMA.UpdateRate = 100;/刷新频率为1秒。 MyGroupMA.IsSubscribed = true;/使用订阅功能,即可以异步,默认false /MyGroupMA.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(GroupDataChange_Heart);

21、 MyGroupMA.AsyncWriteComplete += newDIOPCGroupEvent_AsyncWriteCompleteEventHandler(GroupAsyncWriteComplete); MyGroupMA.AsyncReadComplete += newDIOPCGroupEvent_AsyncReadCompleteEventHandler(GroupAsyncReadComplete); catch (Exception err) /this.WriteLog_Station(过点创立组出现错误: + err.Message);returnfalse; re

22、turntrue; #endregion #region写入功能/写入方法ascII/publicvoid WriteFa(string Value) int temp; temp = newint 0, MyItemMA0.ServerHandle ;/机型string typecode = Value;byte arrValue = System.Text.Encoding.Default.GetBytes(typecode);/将string转为 byte Array serverHandles = (Array)temp;object valueTemp = newobject2 ,

23、arrValue ;/item数量为2Array values = (Array)valueTemp;Array Errors;int cancelID; MyGroupMA.AsyncWrite(1, ref serverHandles, ref values, out Errors, 1, out cancelID);/第一参数为item数量 /写入object/publicvoid WritecharFa(string Value) int temp = newint 0, MyItemMA0.ServerHandle ;/写入数据Item数量2Array serverHandles =

24、 (Array)temp;object valueTemp = newobject2 , Value ;/item数量为2Array values = (Array)valueTemp;Array Errors;int cancelID; MyGroupMA.AsyncWrite(1, ref serverHandles, ref values, out Errors, 1, out cancelID);/第一参数为item数量 privatevoid WriteByteFa(byte Value) int temp = newint 0, MyItemMA0.ServerHandle ;/写

25、入数据Item数量2Array serverHandles = (Array)temp;object valueTemp = newobject2 , Value ;/item数量为2Array values = (Array)valueTemp;Array Errors;int cancelID; MyGroupMA.AsyncWrite(1, ref serverHandles, ref values, out Errors, 1, out cancelID);/第一参数为item数量 #endregion #region CH160/创立组/OPCGroups MyGroupsStati

26、onCH160;/ OPCGroup Object /OPCGroup MyGroupStationCH160;/ OPCItems Object /OPCItems MyItemsStationCH160;/ OPCItem Object /OPCItem MyItemStationCH160;publicOPCGroup GroupStationCH160 get return MyGroupStationCH160; publicbool CH160CreateGroup(string Address) try MyGroupStationCH160 = MyServer.OPCGroups.Add(Address);/添加组/以下设置组属性 MyServer.OPCGroups.DefaultGroupIsActive = true;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1