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

加入VIP,省得不是一点点
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

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

2、eateGroup(“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 OPCServicepublic class PublicOPC_PLC#region 私有变量/ / OPCServer Object / pu

3、blic static OPCServer MyServer;/ / OPCGroups Object / public static OPCGroups MyGroups;/ / OPCGroup Object / public static OPCGroup MyGroupMA;public static OPCGroup MyGroupMA2;/ / OPCItems Object / OPCItems MyItemsMA;/ / OPCItem Object / OPCItem MyItemMA;/ / 主机IP / public static string strHostIP = “

4、;/ / 主机名称 / public static string strHostName = “;/ / 连接状态 / public static bool opc_connected = false;/ / 客户端句柄 / int itmHandleClient = 0;/ / 服务端句柄 / int itmHandleServer = 0;public OPCGroup GroupMAget return MyGroupMA; #endregion/ / 初始化连接对应的状态,包括连接服务器,需要读取的初始值/ public void InitConnect()/初始化OPC服务配置Get

5、LocalServer();ConnectRemoteServer();/连接OPC服务器MyGroups = MyServer.OPCGroups;/枚举本地OPC服务器 public void GetLocalServer()/获取本地计算机IP,计算机名称 strHostName = Dns.GetHostName();/或者通过局域网内计算机名称 /获取本地计算机IP,计算机名称IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);if (IPHost.AddressList.Length 0)IPHostEntry ipH

6、ostEntry = Dns.GetHostByAddress(IPHost.AddressList0.ToString();strHostName = ipHostEntry.HostName.ToString();/获取本地计算机上的OPCServerName tryMyServer = new OPCServer();object serverList = MyServer.GetOPCServers(strHostName);foreach (string server in (Array)serverList)/cmbServerName.Items.Add(turn); Conso

7、le.WriteLine(“本地OPC服务器:0“, server);catch (Exception err)Console.WriteLine(“枚举本地OPC服务器出错:0“, err.Message);/连接OPC服务器 / OPCServerIP / OPCServer名称 public bool ConnectRemoteServer()trystring remoteServerIP = “, remoteServerName = “KEPware.KEPServerEx.V4“;MyServer.Connect(remoteServerName, remoteServerIP)

8、;/连接本地服务器:服务器名+主机名或IP if (MyServer.ServerState = (int)OPCServerState.OPCRunning)/MessageBox.Show(“已连接到:0“, MyServer.ServerName);/WriteLog_Station(“网络连接成功“);else/这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档 /MessageBox.Show(“状态:0“, MyServer.ServerState.ToString();/WriteLog_Station(“网络连接失败“);MyServer.ServerShut

9、Down += ServerShutDown;/服务器断开事件 catch (Exception err)/MessageBox.Show(“连接远程服务器出现错误:0“ + err.Message);return false;return true;public void ServerShutDown(string Reason)/服务器先行断开 /WriteLog_Station(“服务器已经先行断开!“);MyServer.Disconnect();public void RemoveGroup(string Name)MyServer.OPCGroups.Remove(Name);vo

10、id GroupAsyncWriteComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array Errors)Console.WriteLine(“%AsyncWriteComplete%“);/*for (int i = 1; i / 读取byte转ASCII值/ public string ReadData(string Add)string result = “;try/初始化item数组 /GetLocalServer();AddGroupItems(Add);Thread.Sleep(200

11、);/暂停线程以让DataChange反映,否则下面的同步读可能读不到 /以下同步读 object ItemValues; object Qualities; object TimeStamps;/同步读的临时变量:值、质量、时间戳 MyItemMA0.Read(1, out ItemValues, out Qualities, out TimeStamps);/同步读,第一个参数只能为1或2 /int q0 = Convert.ToInt32(ItemValues);/转换后获取item值 Byte bytTemp = ItemValues as Byte;/将byte数组转为字符串+res

12、ult = System.Text.ASCIIEncoding.ASCII.GetString(bytTemp);/OK/MessageBox.Show(result, “结果“);return result;catch (Exception ex)/异常处理return result;finally/ / 读取boolean值,需要先创建group/ / / public Boolean ReadData_Boolean(string Add)Boolean result = false;try/初始化item数组 /GetLocalServer();AddGroupItems(Add);T

13、hread.Sleep(200);/暂停线程以让DataChange反映,否则下面的同步读可能读不到 /以下同步读 object ItemValues; object Qualities; object TimeStamps;/同步读的临时变量:值、质量、时间戳 MyItemMA0.Read(1, out ItemValues, out Qualities, out TimeStamps);/同步读,第一个参数只能为1或2 /int q0 = Convert.ToInt32(ItemValues);/转换后获取item值 Boolean result1 = (Boolean)ItemValue

14、s;result = result1;return result;catch (Exception ex)/异常处理return result;finally/ / 读取Object值,需要先创建group/ / / public object ReadData_Object(string Add)tryCreateGroup(Add);catch (Exception ex)object result = null;tryAddGroupItems(Add);Thread.Sleep(200);/暂停线程以让DataChange反映,否则下面的同步读可能读不到 /以下同步读 object I

15、temValues; object Qualities; object TimeStamps;/同步读的临时变量:值、质量、时间戳 MyItemMA0.Read(1, out ItemValues, out Qualities, out TimeStamps);/同步读,第一个参数只能为1或2 /int q0 = Convert.ToInt32(ItemValues);/转换后获取item值 result = ItemValues;if (result != null)if (result.ToString() = “)return “;elseresult = result.ToString

16、().Replace(“0“, “);result = result.ToString().Replace(“n“, “);result = result.ToString().Replace(“r“, “);result = result.ToString().Replace(“t“, “);return result;catch (Exception ex)/异常处理result = “;return result;finally/RemoveGroup(Add);public bool CreateGroup(string Address)tryMyGroupMA = MyServer.

17、OPCGroups.Add(Address);/添加组 /以下设置组属性 MyServer.OPCGroups.DefaultGroupIsActive = true;/激活组。 MyServer.OPCGroups.DefaultGroupDeadband = 0;/ 死区值,设为0时,服务器端该组内任何数据变化都通知组。 MyServer.OPCGroups.DefaultGroupUpdateRate = 200;/默认组群的刷新频率为200ms MyGroupMA.UpdateRate = 100;/刷新频率为1秒。 MyGroupMA.IsSubscribed = true;/使用订

18、阅功能,即可以异步,默认false /MyGroupMA.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(GroupDataChange_Heart);MyGroupMA.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(GroupAsyncWriteComplete);MyGroupMA.AsyncReadComplete += new DIOPCGroupEvent_AsyncReadCompleteEventHandler(Gr

19、oupAsyncReadComplete);catch (Exception err)/this.WriteLog_Station(“过点创建组出现错误:“ + err.Message);return false;return true;#endregion#region 写入功能/ / 写入方法ascII/ / public void WriteFa(string Value)int temp;temp = new int 0, MyItemMA0.ServerHandle ;/机型string typecode = Value;byte arrValue = System.Text.Enc

20、oding.Default.GetBytes(typecode);/将string转为 byte Array serverHandles = (Array)temp;object valueTemp = new object2 “, arrValue ;/item数量为2Array values = (Array)valueTemp;Array Errors;int cancelID;MyGroupMA.AsyncWrite(1, ref serverHandles, ref values, out Errors, 1, out cancelID);/第一参数为item数量/ / 写入obje

21、ct/ / public void WritecharFa(string Value)int temp = new int 0, MyItemMA0.ServerHandle ;/写入数据Item数量2Array serverHandles = (Array)temp;object valueTemp = new object2 “, Value ;/item数量为2Array values = (Array)valueTemp;Array Errors;int cancelID;MyGroupMA.AsyncWrite(1, ref serverHandles, ref values, ou

22、t Errors, 1, out cancelID);/第一参数为item数量private void WriteByteFa(byte Value)int temp = new int 0, MyItemMA0.ServerHandle ;/写入数据Item数量2Array serverHandles = (Array)temp;object valueTemp = new object2 “, Value ;/item数量为2Array values = (Array)valueTemp;Array Errors;int cancelID;MyGroupMA.AsyncWrite(1, r

23、ef serverHandles, ref values, out Errors, 1, out cancelID);/第一参数为item数量#endregion#region CH160/ / 创建组/ / / / OPCGroups MyGroupsStationCH160;/ / OPCGroup Object / OPCGroup MyGroupStationCH160;/ / OPCItems Object / OPCItems MyItemsStationCH160;/ / OPCItem Object / OPCItem MyItemStationCH160;public OPC

24、Group GroupStationCH160get return MyGroupStationCH160; public bool CH160CreateGroup(string Address)tryMyGroupStationCH160 = MyServer.OPCGroups.Add(Address);/添加组 /以下设置组属性 MyServer.OPCGroups.DefaultGroupIsActive = true;/激活组。 MyServer.OPCGroups.DefaultGroupDeadband = 0;/ 死区值,设为0时,服务器端该组内任何数据变化都通知组。 MyS

25、erver.OPCGroups.DefaultGroupUpdateRate = 200;/默认组群的刷新频率为200ms MyGroupStationCH160.UpdateRate = 100;/刷新频率为1秒。 MyGroupStationCH160.IsSubscribed = true;/使用订阅功能,即可以异步,默认false MyGroupStationCH160.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(GroupDataChange_CH160Heart);MyGroupStationCH160.Asyn

26、cWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(GroupAsyncWriteComplete);MyGroupStationCH160.AsyncReadComplete += new DIOPCGroupEvent_AsyncReadCompleteEventHandler(GroupAsyncReadComplete);AddGroupItemsCH160(Address);catch (Exception err)return false;return true;void GroupDataChange_CH160Heart(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)tryfor (int i = 1; i = 1; i+)if (ItemValues.GetValue(i) != null)object bb = ItemValues.GetValue(i);string s = bb.ToString();

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。