如何通过VB实现PC机与PLC的以太网通信

1、引言
在网络的各个层上,随着自动化和控制工程师需要与网络打交道的机会越来越多,联网的愿望和需要也正在逐渐高涨。而且,在监控和数据采集应用中,大多数工程师已将以太网协议应用于数据采集与监视控制系统(scada)和工厂的诊断、测试及维护。如何简便地实现与plc的交互已经成为众多厂商新的竞争战场。由此产生了人机界面及各种组态软件产品,这些产品的出现简化了对plc的控制、操作,使plc的应用更加方便。但也有其共同的缺点,价格普遍偏高和可二次开发性较差。vb作为“原始”的编程语言,兼具了上述两方面的优势。本文结合一个简单的案例来粗略讨论如何通过vb实现pc机与plc的以太网通信问题。
2、以太网通信的基本概念
2.1以太网的标准
以太网是一种局域网。早期标准为ieee 802.3,数据链路层使用csma/cd,10mb/s速度物理层有:
(1)10 base 5粗同轴电缆,rg-8,一段最长为500m。
(2)10 base 2细同轴电缆,rg-58,一段最长为185m。
(3)10 base t双绞线,utp或stp,一段最长为100m。
2.2工业以太网与商用以太网的区别
什么是工业以太网?技术上,它与ieee802.3兼容,故从逻辑上可把商用网和工业网看成是一个以太网,而用户可根据现场情况,灵活装配自己的网络部件。但从工业环境的恶劣和抗干扰的要求,设计者希望采用市场上可找到的以太网芯片和媒介,兼顾考虑下述工业现场的特殊要求:首先要考虑高温、潮湿、振动。二是对工业抗电磁干扰和抗辐射有一定要求,如满足en50081-2、en50082-2标准,而办公室级别的产品未经这些工业标准测试,表1列出了一些常用工业标准。为改善抗干扰性和降低辐射,工业以太网产品多使用多层线路板或双面电路板,且外壳采用金属如铸铝屏蔽干扰。三是电源要求,因集线器、交换机、收发器多为有源部件,而现场电源的品质又较差,故常采用双路直流电或交流电为其供电,另外考虑方便安装,工业以太网产品多数使用din导轨或面板安装。四是通信介质选择,在办公室环境下多数配线使用utp,而在工业环境下推荐用户使用stp(带屏蔽双绞线)和光纤。
2.3 使用tcp/ip协议的原因及其概述
最主要的一个原因在于它能使用在多种物理网络技术上,包括局域网和广域网技术。tcp/ip协议的成功,很大程度上取决于它能适应几乎所有底层通信技术。20世纪80年代初,先在x.25上运行tcp/ip协议;而后又在一个拨号语音网络(如电话系统)上使用tcp/ip协议,又有tcp/ip在令牌环网上运行成功;最后又实现了tcp/ip远程分组无线网点与其他internet网点间tcp/ip通信。所以tcp/ip协议极其灵活,具备连接不同网络的能力。另外,使用tcp/ip也简化了osi模型,因为它省略了表示层和会话层。如果现在把以太网的物理层和数据链路层加到osi模型,就构成了基于以太网的tcp/ip网,如图1所示。用以太网实现tcp/ip也是经济的一种方式。
ip是internet最基本的协议。ip是面向报文的协议,它独立处理每个报文包,每个报文包必须含有完整的寻址信息。ip报文包的格式如图2所示。
图2 ip报文包的格式
ip地址的类型共有4种(如图3所示):a类用于处理超大型网络,最多16387064个主机(1~126);b类网络最多可有64516个主机(网络地址的第一段为128~191);c类用于小型网络,最多可有254个主机(网络地址的第一段为192~223);d类用于多点播送,用于多目的信息的传输。全零(“0.0.0.0”)地址对应于当前主机,全1地址(“255.255.255.255”)是当前子网的广播地址。
tcp是基于传输层的协议,协议文件可从rfc793得到,使用广泛,面向连接的可靠协议。它能把报文分解为数段,在目的站再重新装配这些段,支持重新发送未被收到的段,提供两台设备间的全双工连接,允许它们高效地交换大量数据。tcp使用滑动窗口协议来高效使用网络。由于tcp很少干预底层投递系统的工作,它适应各种投递系统,且提供流量控制,能使各种不同速率的系统进行通信。报文段是tcp所使用的基本传输单元,用于传输数据或控制信息。
3、modbus数据帧格式
在tcp/ip以太网上传输,支持ethernet ii和802.3两种帧格式。图3所示,modbus tcp数据帧包含报文头、功能代码和数据3部分。
4、modbus功能代码
4.1 3种类型
(1)公共功能代码(如表2所示):已定义好的功能码,保证其唯一性,由modbus.org认可。
(2)用户自定义功能代码有两组,分别为65~72和100~110,无需认可,但不保证代码使用的唯一性。如变为公共代码,需交rfc认可。
(3)保留的功能代码,由某些公司使用在某些传统设备的代码,不可作为公共用途。
表2 modbus常用公共代码功能
4.2功能代码划分:按应用深浅,可分为3个类别。
(1)类别0,对于客户机/服务器最小的可用子集:读多个保持寄存器(fc.3);写多个保持寄存器(fc.16)。
(2)类别1,可实现基本互易操作的常用代码:读线圈(fc.1);读开关量输入(fc.2);读输入寄存器(fc.4);写线圈(fc.5);写单一寄存器(fc.6)。
(3)类别2,用于人机界面、监控系统的例行操作和数据传送功能:
(4)强制多个线圈(fc.15);读通用寄存器(fc.20);写通用寄存器(fc.21);屏蔽写寄存器(fc.22);读写寄存器(fc.23)。
5、vb的基本概念
vb(visual basic)是面向对象的程序设计语言,用它来开发winoows操作系统下的应用程序,它提供了很多接口成员,对象、属性、事件、方法就是4个重要的接口,vb提供了许多常用的控件。
5.1卷标控件
卷标控件如图4(a)所示,该控件专用于显示文字、数字用,显示如图4(b)所示。
5.2 按钮控件
按钮控件如图5(a)所示,该控件使用率很高,提供一个供系统用户操作用的按钮,如图5(b)所示。
6、基于winsock控件的tcp/ip以太网通信
要完成vb与plc等设备的以太网通信要用到winsock控件,在此有必要对该控件作较详细的说明。winsock是一个activex控件,需要要手动添加许多项目,其步骤如下:
(1)选择菜单的【工程】。
(2)选择【部件】。
(3)在弹出的对话框中做如图6的选择。
图6 对话框界面
(4)如图7所示,在部件选项卡就会出现winsock控件
7、winsock控件的基本属性
此控件对于用户在运行时不可见,提供了一个简单的途径访问tcp及udp网络服务而无需了解底层细节,使用时你只需设置属性、在恰当的时候调用它提供的方法即可。
主要属性有:
bytesreceived:返回当前缓冲区中的字节数量,我们可以使用 getdata 方法以接收数据。只读且设计时不可用。
localhostname:返回本机名字符串,设计时不可用。
localip:返回以(xxx.xxx.xxx.xxx)格式表达的ip地址串。设计时不可用,运行时只读。
localport :本机使用接收端口可读写,设计时可用,long型。对于客户,如果无需指定端口,则用端口0发送数据。在此情况下,控件将随机选择一个端口。在一个连接确定后,为tcp的端口。对于服务器,指用于监听的端口。如设置为0,则用随机数。在调用listen 方法后,该属性自动包含用到的端口。端口0总是用于在两计算机间建立动态连接。客户希望通过端口0获得一个随机端口以”回调”连接服务器。
protocol :套接字类型,为tcp或udp二者之一,缺省为tcp类型。设置为scktcpprotocol表示tcp协议sckudpprotocol表示udp协议。在此属性被重置之前需用close方法关闭之。
remotehost:发送或接收数据的主机,你可提供主机名如:ftp://ftp.microsoft.com,或一ip地址串,例如“100.0.1.1”。
remotehostip:远程主机的ip地址。对于客户程序,在连接确定后使用connect方法,此属性包含远程主机的ip名串。对于服务器程序, 在引入连接需求后(connection request 事件),此属性包含ip串。当使用udp套接字,在data arrival事件发生后,此属性为发送udp数据的机器ip地址串。
remoteport:连接套接字端口值。例如通常http应用使用80端口,ftp则使用21。