LabVIEW通过以太网与西门子S7-1200PLC通信,制作你自己的WINCC
原创不易,请勿抄袭!
很多人可能听过或者用过这个软件,其实简单来说就是一个信息采集的系统,在工业中,对应的就是人机界面,类似于WINCC,INTOUCH,组态王等等,近几年在国内很火,今天和大家分享一下。
其实,建立自己的人机界面的方式有很多种,其中包括文中所讲的Labview,除此之外作者还使用过VB运用prodave驱动或者Libnodave驱动连接PLC数据制作画面,也非常好用。都是非常好用且有趣的应用,而且使用这些小众化的方式可以使得编出来的人机界面很高大上,最重要的是没有刻苦学习过的人无法更改或者判断故障,也就是不可替代性!搞工控的都知道不可替代性代表了什么,尤其是在每年数万电气自动化毕业生就业的前提下。
除了上述的目的,我觉得对于这些应用,一般的工控人员来讲只需要简单了解,需要用的时候再去研究学习即可,毕竟自动化知识不是纸上谈兵,没有实际应用再好的学生也学不来。
好吧,开始我们今天的案例!
一 概述
西门子S7-1200 PLC支持多种协议通过以太网通讯方式,如OPC、TCP、S7、MODBUS-TCP等。TCP方式相比其它协议,具有更多的灵活性,更快的数据响应等优点,本人即介绍LabVIEW通过TCP方式与S7-1200 PLC通信。
S7-1200 PLC的TCP通信方式,称之为“开放式用户通讯”,通过以太网发送或读取数据。
二 测试硬件和软件
硬件包括:
博途S1200PLC:CPU 1215C和PC一台;
软件包括:
博途 TIA V14 SP1和LabVIEW 2012 或以上版本
编程思路分为两步;
1PLC编程:配置PLC --> 添加发送和接收数据块 --> 发送数据程序 --> 接收数据程序 --> 编译下载
2LabVIEW编程:创建TCP连接 --> 接收或发送数据 --> 关闭连接
三 操作步骤
3.1 CPU配置
1 打开 TIA Portal,创建项目,添加CPU为1215C。
2 双击“设备组态”,切换到“设备视图”,点击CPU,右键选择属性。
3 在常规栏,选择PROFINET 接口[X1]/以太网地址属性,设置CPU的IP地址,本例设置为 192.168.0.10,如下图所示:
4 在常规栏,选择系统和时间存储器属性,启用系统存储器字节和时钟存储器字节,如下图:
5 如果传输的数据量大,且实时性要求高,可选择通信负载属性,把由通信引起的循环负荷由默认为20%,提高到 50%。
3.2 添加数据块
1 添加发送数据块。该数据块用于存储PLC向LabVIEW发送的数据。点击程序块/添加新块,在打开的对话框中选择数据块,输入名称,如 PlcSendData ,类型可选择全局DB。注意如果不一次性传输大量数据,可以直接使用PLC变量,单次发送一个数据,不需要创建数据块。
2 打开该数据块PlcSendData ,添加数据,名称如 ArySendData,选择数据类型Array of Byte,即字节数组,数组长度设置为10。
3 修改数据块属性。选中数据块PlcSendData ,右键属性,在属性栏去掉优化的块访问,以支持绝对寻址模式。
4 添加接收数据块。该数据块用于存储LabVIEW向PLC发送的数据。数据块名称PlcRecvData,数据类型Array of Byte,操作方法同步骤1、2、3。
3.3 编写发送数据程序
1 打开 Main 程序
2 添加指令通信/开放式用户通信/TSEND_C到程序段1,调用选项的数据块名称采用默认。
3 配置 TSEND_C 的通讯参数。选中 TSEND_C,右键属性,切换到组态页,选择连接参数属性。伙伴项选择未指定,连接数据选择新建,系统会自动创建一个连接数据 ,如PLC_1_Send_DB。输入伙伴的IP地址,如192.168.0.12。由伙伴主动建立连接 ,PLC的端口可保留默认的2000。连接类型为TCP,连接ID采用默认值。(注:所谓伙伴即与PLC通信的另一方,可以为上位机PC、HMI等)
4 配置 TSEND_C 的输入输出。TSEND_C在检测到参数 REQ 上升沿时执行发送作业,因此每次发送数据时,都应在REQ上产生一个脉冲,此处为了简便,调用系统时钟 Clock_10Hz(每秒10次),周期性的发送数据。参数DATA为待发送的数据,此处调用数据块 PlcSendData。注意 DATA采用纯符号寻址时,发送 LEN 应设置为0,而采用绝对寻址时,应设置为实际发送数据的长度。通讯状态参数 DONE\BUSY等按需要连接。
3.4 编写接收数据程序
1 添加指令通信/开放式用户通信/TRCV_C 到程序段2,调用选项的数据块名称采用默认。
2 配置 TRCV_C 的通讯参数。选中 TRCV_C,右键属性,切换到组态页,选择连接参数属性。伙伴项选择未指定,连接数据选择3.3 步骤自动创建的数据,如PLC_1_Send_DB,切记不要选择新建 (此例的通讯连接为自动创建,因此发送与接收共用一个连接,必须保持一致才能正常通讯)。
3 配置 TRCV_C 的输入输出。TRCV_C在检测到参数 EN_R 为1时启动接收。参数DATA为数据接收区,此处调用3.2步骤所创建的数据块PlcRecvData。注意DATA采用纯符号寻址时,接收 LEN 应设置为0,而采用绝对寻址时,应设置为实际发送数据的长度。通讯状态参数 DONE\BUSY等按需要连接。具体参数信息请查看帮助文档。
4 为了判断PLC是否正确接收到LabVIEW所发送的数据,可通过以下两种方法测试。
a、将第3.3 的数据发送区设置为与数据接收区相同的数据块,即 PlcRecvData,使PLC把接收到数据发送回LabVIEW。
b、添加 MOVE 指令采用数据移动的方法完成此功能,如下所示:
3.5 编写LabVIEW程序
1) 创建TCP连接TCP OpenConnection。输入PLC的IP地址 192.168.0.10 和端口号2000。
2) 读取数据TCP Read。输入读取长度10(PLC程序的发送数据块长度为10个字节)。
3) 发送数据TCP Write。
4) 关闭连接TCP Close Connection。
5) 前面板如下。点击 Write,把数据WriteData写入PLC,同时PLC把该数据发回LabVIEW,通过 ReadData显示。如果ReadData数据与WriteData一致,即通信正常。
3.6 下载程序,连接测试
哎呀妈呀,累死我了,大家点个赞支持我一下呗!
喜欢的话请点赞并分享,您的支持是我坚持下去的动力!送人玫瑰,手有余香!
LabVIEW编程实例:如何通过TCP协议进行数据通信
对于网络通信来说,LabVIEW平台本身提供了多种方法加以实现,如可以通过TCP协议、UDP协议、DataSocket技术、甚至远程面板通信技术等方式进行通信。
下面通过一个简单的例子,演示在LabVIEW中如何通过TCP协议实现两个程序之间的数据通信功能。
实例说明
编写两个程序,分别为服务器端程序和客户端程序。其中,服务器端程序开始运行时,处于等待客户端连接的状态中,一旦有客户端成功连接,则向客户端发送带有时间信息的字符串“I`m sever!”;客户端程序与服务器成功建立连接后,则读取服务器端发送的信息,并在前面板上显示出来,以此来实现服务器端与客户端的通信。
编程思路
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。使用LabVIEW基于TCP协议编写通信软件时,一般其整个传输过程如下:
(1)服务器通过主机名或者IP地址与端口号,建立侦听,等待客户端连接;
(2)客户端根据主机的IP地址和端口号发出连接请求;
(3)服务器与客户端建立连接后,通过读写函数进行TCP数据通信;
(4)关闭连接。
在LabVIEW中,提供了一组专门的相关TCP的操作函数,在后面板程序框图中进入函数®数据通信®协议中选择TCP可以进入TCP子模板,主要节点函数如下图所示。
使用上面的函数,下面分别给出服务器端程序和客户端程序的具体实现方法。
服务器端程序
服务器端前面板如下图所示,其中,“端口号”设置服务器程序的端口,该值即为客户端程序的要连接的服务器程序的端口标识值;“待发送字符串”为发送给客户端程序的内容,该处设置为“I`m sever!”。
服务器端程序框图如下:
在程序框图中,首先利用“TCP侦听”函数创建一个侦听,该函数需要2个关键参数:端口号和超时时间(单位为ms)。该示例超时时间设为-1表示永远不超时,即无限等待下去直到有一个客户端程序连接。该函数运行后返回一个“连接ID”参数,该参数是其它TCP相关操作函数的输入参数接口。利用“格式化日期/时间字符串”函数取得当前的系统日期及时间,然后与待发送的字符串连接后得到实际发送的消息内容,利用“写入TCP数据”函数发送到客户端程序即可。该例中采用了两个“写入TCP数据”节点函数发送数据,首先发送消息内容的字节数(此处使用“强制类型转换”函数将“I32”类型的长度数据转换为字符串),其次发送实际的内容字符串数据。这种先发字符串长度再发字符串内容的发送方式有利于客户端正确的接收数据。最后调用“关闭TCP连接”函数,退出程序。
客户端程序
客户端前面板如下图所示,其中,“端口号”即为服务器端程序设置的端口标识值;“IP地址”设置服务器端程序的IP地址,“已接收字符串”显示服务器端程序发送的消息及收到该消息时的时间信息。
客户端端程序框图如下:
在程序框图中,首先调用“打开TCP连接”函数建立与服务器端程序的连接,该函数需要2个关键参数:IP地址和端口号,即服务器端程序所在的主机的IP地址及服务器端程序设置的端口号。该函数与服务器端程序正确建立连接后返回一个“连接ID”参数,该参数是其它TCP相关操作函数的输入参数接口。与服务器端框图程序相对应,该程序也采用了2个“读取TCP数据”节点函数读取服务器端程序发送的数据,与“写入TCP数据”节点函数不同的是,该函数还需要一个参数:要读取的字节数。由于服务器端程序先发送的是总字节信息,因此客户端首先读取接收消息内容的字节信息,输入I32类型的常数“4”,表示读取4个字节的内容,然后将读取的字符串内容使用“强制类型转换”函数转换为“I32”类型的字节值,将字节值作为第2个“读取TCP数据”节点函数的读取的字节值参数,然后将实际的消息内容读出显示到前面板的“已接收字符串”控件上即可。这种方法是TCP通信中常用的方法,可以保证在不丢失数据的前提下有效地发送或接收数据。最后调用“关闭TCP连接”函数,退出程序。
总结
通过上面的程序可以看出,由于LabVIEW对TCP协议通信底层的具体实现方法进行了高度的封装,因此使用这些函数构建复杂、灵活的网络测试系统时,相对于其它高级编程语言,将会大大降低编程人员的开发难度,提高编程效率,这也是图形化编程语言的高效、简洁的魅力所在。
另外,需要说明的是:
(1)采用TCP节点通信时,在服务器端框图程序中必须指定网络通信端口,客户端也要指定相同的端口,才能与服务器之间进行正确的通信,如上面例子中指定端口号为1800。在一次通信连接建立后,就不能改变端口的值了。如的确需要改变端口值,则必须首先断开连接,才能重新设置新的端口值。
(2)在客户端要指定服务器的IP地址才能与服务器之间建立连接。若服务器和客户机在同一台机子上运行时,客户端框图程序中输入的服务器地址可以设置为下面任意一个值:“localhost”、“127.0.0.1”、空字符串或者当前计算机的名称。
如果你觉得这篇文章对你有用的话,收藏 +点赞 吧。
相关问答
用LabVIEW怎样与台达plc通讯?
不需要驱动程序(除非你的硬件需要,如usb-rs232),可直接通讯,通讯时可以监控一下发送的指令与用串口调试工具时的是否一致,方便调试,你懂的不需要驱动程序(除...
如何用labview用一个串口同时监视多台plc?
1.学会基本的LABVIEW编程2.了解PLC的编程3.掌握PLC通讯协议MODBUS4.掌握CRCLRC校验码算法5.掌握通过MODBUS组合命令串6.掌握用LBVIEW串口通讯原理通过...
S7-300如何通过串口与LABVIEW通讯?
S7-300是PLC,1.建立硬件链接,工控机方使用串口PCI卡与PLC端串口连接2.编写PLC端T型图程序3.找LV自带的OPC驱动程序,做上位机程序多了别问了,自己查...
学会了plc,下一步该怎么去深造,以后会更有钱途?
我来说一下我个人的看法,学会了PLC控制这块,如感觉还想再深造,我建议要学自动化控制,因为工业制造业会不断持续的升级,现在已经到了自动化过程控制这一步了...
plc设计需要哪些软件?
一、西门子系列1、西门子S7-200系列plc编程软件STEP_7_MicroWIN_V4.0_incl_SP92、西门子S7-SMART_200系列PLC编程软件STEP_7_MicroWI...
到了工业2025后,现在的PLC工控技术会落后被替代吗?
关注冀工控,我们一起长知识现在是2019年,距离2025年还有六年的时间,题主的问题PLC工控技术会落后被取代吗?我个人观点是不会被取代,下面我就来论证一下我...就...
labview属于什么类型的工作?
这个就不好说了,LabVIEW是工程师的语言,很多领域都会用到的,它不仅仅是软件编程了。我现在从事的是测试控制行业,这就需要我们对需要测试的产品的规格的了解...
为什么没有人创造一种中文的编程软件?
首先明确一点,的确有人创造了一种中文的编程软件,“易语言”就是,不过这么多年了,基本处于没人管的状态了。究其原因,个人觉得将程序语言由英文替换成中文...首...
用mpi/pi怎么链接plc和电脑?
现在PC上建立OPCserver,可以下载西门子公司SIMATICNETOPCserver,这时候可以用ETHERNET、PROFIBUS、MPI都可以和西门子PLC建立通讯关系。通讯成功...
老师们我想问问随到随学的PLC自动化编程培训地址,PLC自动...
[回答]本人是一名2011届毕业的测控技术与仪器的学生,虽然对这个专业至今都不是很了解,还是说说我们学校这个专业开设的编程课吧,希望能帮到你!测控技术与...