1、  必备软件

Rslinx classic 2.57

.net framework 2.0

VS2013

OS: win7 enterprise x64

2、  软件安装

2.1、安装RSlinx,安装时选择xp3兼容模式。

2.2、安装后启动RsLinx,对PLC进行配置。首先,建立驱动,驱动类型选择“EnterNet device”,将PLC设备的IP地址输入,如下图:

2.3、正确配置后,结果如下图,

在图中“192.168.1.254”的节点上,鼠标右键,可以看到datamonitor选项,点击这个选项,可以看到PLC中的各个数据。看到了,表示RsLinx和PLC已经连接成功,如果看不到表示连接失败。

3、  编写代码

3.1、首先建立C#工程;

3.2、导入三个DLL: OPCNetApi.com.dll, OpcNetApi.dll, OpcNetApi.Xml.dll,这三个dll在rslinx安装目录下;

3.3、编程思路:

首先,建立程序(clinet)和OPC server的连接。注意OPC Server是安装有RsLinx的机器(127.0.0.1)而不是PLC的IP地址。

其次,连接建立成功之后,建立订阅组状态,建立订阅组;将要读取的item填入到订阅组中。

然后,就可以读取需要的数据了。

最后,释放资源。

3.4、具体代码如下:

public static void GetData(ref int zhValue, ref int nsValue, ref int deviceStopTime, ref int materialStopTime, ref int qualityStopTime)
{
try
{
Opc.Da.Server lt1_server = null;
Opc.URL lt1_url = null;
Opc.ConnectData lt1_connData = null;
Opc.Da.SubscriptionState lt1_state = null;
Opc.Da.Subscription lt1_subcription = null;

string url1 = "opcda://127.0.0.1/RSLinx Remote OPC Server/{a05bb6d5-2f8a-11d1-9bb0-080009d01446}";
lt1_url = new Opc.URL(url1);
lt1_server = new Opc.Da.Server(new OpcCom.Factory(), lt1_url);
System.Net.NetworkCredential credential = null;
System.Net.WebProxy proxy = null;
lt1_connData = new Opc.ConnectData(credential, proxy);

try
{
lt1_server.Connect(lt1_connData);
}
catch (Exception ex)
{
return;
}

//创建订阅组的状态
lt1_state = new Opc.Da.SubscriptionState();
lt1_state.Name = "LowTube1";
lt1_state.ServerHandle = null;
lt1_state.ClientHandle = Guid.NewGuid().ToString();
lt1_state.Active = false;
lt1_state.UpdateRate = 1000;
lt1_state.Deadband = 0;
lt1_state.Locale = null;

//创建订阅组
lt1_subcription = (Opc.Da.Subscription)lt1_server.CreateSubscription(lt1_state);

//内饰线数据采集I:2.2
//底盘线数据采集I:3.2
//当天设备故障时间T4:161.ACC
//当天物料求助时间T4:162.ACC
//当天品质求助时间T4:163.ACC
string[] item_names_ary = new string[] { "[UNTITLED]I:2.2", "[UNTITLED]I:3.2",
"[UNTITLED]T4:161.ACC", "[UNTITLED]T4:162.ACC", "[UNTITLED]T4:163.ACC" };

Opc.Da.Item[] readItems = new Opc.Da.Item[item_names_ary.Length];

for (int ii = 0; ii < item_names_ary.Length; ii++)
{
Opc.Da.Item model_item = null;
Opc.ItemIdentifier model_id = new Opc.ItemIdentifier(null, item_names_ary[ii]);
model_item = new Opc.Da.Item(model_id);
model_item.ReqType = null;
model_item.MaxAge = 0;
model_item.MaxAgeSpecified = false;
model_item.Active = false;
model_item.ActiveSpecified = false;
model_item.SamplingRate = 0;
model_item.SamplingRateSpecified = false;
model_item.EnableBuffering = false;
model_item.EnableBufferingSpecified = false;
model_item.ClientHandle = Guid.NewGuid().ToString();
readItems[ii] = model_item;
}

Opc.Da.ItemResult[] m_r = lt1_subcription.AddItems(readItems);
Opc.Da.ItemValueResult[] results = lt1_subcription.Read(lt1_subcription.Items);
nsValue = Convert.ToInt32(results[0].Value);
zhValue = Convert.ToInt32(results[1].Value);
deviceStopTime = Convert.ToInt32(results[2].Value);
materialStopTime = Convert.ToInt32(results[3].Value);
qualityStopTime = Convert.ToInt32(results[4].Value);

lt1_server.CancelSubscription(lt1_subcription);
lt1_server.Disconnect();
lt1_server.Dispose();
}
catch (Exception ex)
{
LogMessage.WriteLog(ex);
}
}

使用OPC的方式去连接PLC进行AB SLC-5_04数据的采集的更多相关文章

  1. 用Window Authentication的方式去连接SQLServer

    用Window Authentication的方式去连接SQLServer Connection String: jdbc:sqlserver://${serverName};databaseName ...

  2. 如何从一台OPC Server访问多个PLC

    项目中遇到如下情况: 1. 整条生产线由多个PLC分别控制,但是所有PLC在同一个局域网内.PLC采用西门子的S7-200 Smart 2. 客户希望在操作工站的电脑(跟PLC在同一个局域网内)上提供 ...

  3. 在非SQL客户端使用命令行方式定期连接SQL Server 服务器并模拟用户查询操作,同时输出信息内容

    一个很长的标题,实现的功能就是尽量使用非人力的方式模拟人去做一件事情,为了便于记录,将他们输出成文件方便查阅. 图形界面方式,使用微软自己的ConnMaker.exe,或者Microsoft 数据连接 ...

  4. 怎么从docker 内部去连接host 上的mysql

    一般来说数据最好放在一个公共的地方,这样在多个docker 可以共享这些数据. 这篇文章就是讲怎么从docker 内部去连接host上的 mysql 数据库. 因为我的host 有public ip, ...

  5. JDBC、DBCP、C3P0、jdbc-pool--链接方式?连接池?

    连接方式: java连接数据库的四种方式 - Cece_2012的专栏 - CSDN博客http://blog.csdn.net/cece_2012/article/details/7485482 J ...

  6. Linux 内核探测和去连接的细节

    在之前章节描述的 struct usb_driver 结构中, 驱动指定 2 个 USB 核心在合适的时候 调用的函数. 探测函数被调用, 当设备被安装时, USB 核心认为这个驱动应当处理; 探测 ...

  7. 痞子衡嵌入式:其实i.MXRT下改造FlexSPI driver同样支持AHB方式去写入NOR Flash

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下改造FlexSPI driver以AHB方式去写入NOR Flash. 痞子衡前段时间写过一篇 <串行NAND Fl ...

  8. 12Mybatis_用mapper代理的方式去开发以及总结mapper开发的一些问题

    上一篇文章总结了一些Dao开发的问题,所以我们这里开始讲一种mapper代理的方式去开发. 我先给出mapper代理开发的思路(mapper代理开发的规范): 我们用mapper代理开发时要写2个: ...

  9. 在虚拟机里连接PLC S7-200

    1-使用PPI线连接 这次选择了在虚拟机里面来调试PLC,s7-200的型号是214-2AD23-0XB8 ,连接线是在淘宝上卖的(连接),在虚拟机里面试的时候没有反应,如下 在设备管理器里面观察,在 ...

随机推荐

  1. libsvm使用方法总结

    1.所需要软件下载: (1)libsvm(http://www.csie.ntu.edu.tw/~cjlin/libsvm/) (2)python (3)gnuplot 画图软件(ftp://ftp. ...

  2. 第二百八十九天 how can I 坚持

    今天好伤啊,太把自己当回事了. 现在在弟弟这,下午和他一块看了看西客站附近的房子,感觉暂时好难,只是暂时的,一切都会好起来的. 弟弟上班也挺不容易,不该来给他添麻烦,替他心疼. 确实不知道该咋办了,好 ...

  3. Subversion 1.8.1编译安装(self)

    Subversion 1.8中http客户端基于neon已经被移除,改用self.如果要支持http方式需要在安装svn前安装serf,安装serf推荐用serf-1.2.1,安装是./configu ...

  4. homework_08

    一.C++变量的作用域和生命周期 上面的程序中第一个正整数a的作用域是整个程序,而第二个正整数a的作用域是大括号内,除了大括号它的生命周期就结束了.因此先输出的是2,而后输出的是1. 二.理解堆和栈, ...

  5. 链表逆序(JAVA实现)

    题目:将一个有链表头的单向单链表逆序 分析: 链表为空或只有一个元素直接返回: 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继: 重复步骤2,直到q为空: 调整链表头和链表尾: 图 ...

  6. 模板引擎:Velocity&FreeMarker(转)

    Velocity,名称字面翻译为:速度.速率.迅速,用在Web开发里,用过的人可能不多,大都基本知道和在使用Struts,到底Velocity和Struts(Taglib和Tiles)是如何联系?在技 ...

  7. Red5边源服务器集群部署

    http://www.myexception.cn/open-source/446184.html Red5简介: Red5是一个采用Java开发开源的Flash流媒体服务器.它支持:把音频(MP3) ...

  8. Spring Object/XML mapping example

    In this tutorial, we will extend last Maven + Spring hello world example by adding JDBC support, to ...

  9. Spring Auto-Wiring Beans

    In Spring framework, you can wire beans automatically with auto-wiring feature. To enable it, just d ...

  10. [转]directsound抓取麦克风PCM数据封装类

    网上有很多方法从麦克风读取PCM数据,不想一一举例.只是在这里发布一个我自己写的directsound的麦克风PCM数据采集类,通过它,可以很方便的利用directsound技术把麦克风的数据采集到, ...