0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过VB实现PC机与PLC的以太网通信,解决方案分析

电子设计 来源:电子工程网 作者:电子工程网 2021-05-27 11:54 次阅读

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)是面向对象的程序设计语言,用它来开发Windows操作系统下的应用程序,它提供了很多接口成员,对象、属性、事件、方法就是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。

State:控件的状态, 只读且设计时不可用。可为以下值:

常量描述

sckClosed 0 缺省值,关闭套接字

sckOpen 1 打开套接字

sckListening 2 正监听端口

sckConnectionPending 3 正在进行未定的连接

sckResolvingHost 4 正解析主机地址

sckHostResolved 5 主机地址已解析

sckConnecting 6 正在连接

sckConnected 7 已连接

sckClosing 8 连接关闭

sckError 9 错误

8、VB与PLC基于MODBUS TCP的以太网通信的实现

以下举例说明如何实现VB与PLC的以太网通信。

(1)控制要求:用交替型按钮控制Y0,并用指示灯显示Y0状态(绿色为运行,红色为停止);能够对D100、D200两个寄存器进行数值写入与读出的操作。

(2)实现思路:同样Y0的地址分别为H0500。写入FF00为ON,0000为OFF,按功能码05操作;D100,D200地址分别为H1064,H10C8,按功能码03操作即可实现寄存器的读功能,按功能码10H操作即可实现寄存器的写功能。

(3)VB接口的设计如图8所示

在界面中用按钮控制Y0的ON/OFF及D100、D200数据的写与读;用shape组件做指示灯,指示Y0的ON/OFF状态;用Winsock控件实现PLC与VB的通信。

(1)实现功能的代码构成

(2)建立网络连接

Private Sub Command1_Click()

Winsock1.Close

Winsock1.Connect Text1, 502

Label2.Caption = “Version: 1.0 : ” + Format(Now, “mmm dd yyyy Hh:Nn:Ss”)

Command1.Enabled = False

Command1.Enabled = False

Text1.Enabled = False

End Sub

(2)、Y0的ON/OFF控制

Private Sub Comd_send_Click()

On Error GoTo ErrProc

Dim sendstr(14) As Byte

sendstr(0) = &H0 ‘交换识别号高字节,通常为0

sendstr(1) = &H0 ’交换识别号低字节,通常为0

sendstr(2) = &H0 ‘协议识别号高字节,为 0

sendstr(3) = &H0 ’协议识别号低字节,为 0

sendstr(4) = &H0 ‘字节长度高字节

sendstr(5) = &H9 ’以下字节长度低字节

sendstr(6) = &HFF ‘单元识别号,确省为 255

sendstr(7) = &H5 ’写一个线圈命令代码

sendstr(8) = &H0 ‘写线圈的起始地址高字节

sendstr(9) = &H1’写线圈的起始地址低字节

sendstr(10) = a ‘=FF打开线圈,=00关闭线圈

sendstr(11) = &H0 ’

Dim aStr As String

Dim i, j As Integer

For i = 0 To 11

aStr = aStr & Chr(sendstr(i))

Next

Winsock1.SendData aStr

Exit Sub

ErrProc:

MsgBox “传输数据失败”, vbCritical, “网络传输”

End Sub

(3)线圈状态显示及寄存器读出数据显示

Private Sub winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strdata() As Byte

Dim i, j As Integer

Dim s As String

Dim s1 As String

Dim IO As Byte

i = Winsock1.BytesReceived

ReDim strdata(i)

Winsock1.GetData strdata, vbByte, i

For j = 0 To i - 1

s = s + Hex(strdata(j))

Next

If s Like “*5*” Then

s1 = Mid(s, 12, 2)

If s1 = “FF” Then

IO = 1

a = &H0

Else

IO = 0

a = &HFF

End If

If IO = 1 Then

Shape1.FillColor = RGB(0, 255, 0) ‘green

Labl3.Caption = “IO点接通”

Else

Shape1.FillColor = RGB(255, 0, 0) ’red

Labl3.Caption = “IO点断开”

End If

End If If s Like “*3*” Then

Text3.Text = Text3.Text + Mid(s, 11) + “”

End If

(4)、读多个寄存器数据

End Sub Private Sub Command4_Click()

On Error GoTo ErrProc

Dim str(12) As Byte

str(0) = &H0 ‘交换识别号高字节,通常为 0

str(1) = &H0 ’交换识别号低字节,通常为 0

str(2) = &H0 ‘协议识别号高字节,为 0

str(3) = &H0 ’协议识别号低字节,为 0

str(4) = &H0 ‘字节长度高字节

str(5) = &H6 ’以下字节长度低字节

str(6) = &HFF ‘单元识别号,确省为 255

str(7) = &H3 ’读多个寄存器命令代码

str(8) = &H10 ‘读数据的起始地址高字节

str(9) = &HC8 ’读数据的起始地址低字节

str(10) = &H0 ‘数据长度高字节

str(11) = &H1 ’数据长度低字节

Dim bStr As String

Dim i As Integer

For i = 0 To 11

bStr = bStr & Chr(str(i))

Next

Winsock1.SendData bStr

Exit Sub

ErrProc:

MsgBox “传输数据失败”, vbCritical, “网络传输”

End Sub

D100寄存器的写入操作类似,由于篇幅所限其他代码在此就不再赘述。

9.结速语

工业以太网是工业自动化网络发展的必然趋势,为了对工业设备进行实时的管理与监控,工业以太网设备大多都支持远程管理,而且各厂商业都有各自的网络管理软件以提供对网络设备进行友好的图形化界面操作。管理员还可以通过远程telnet或web界面的方式直接对设备进行调试。完善的兼容性,可靠的稳定性,对恶劣环境的适应性,强大的冗余能力和方便的可管理性,是人们越来越多地在网络设计过程中采用工业以太网的原因,而这也势必成为工业以太网在越来越多的网络环境里大显身手的重要契机。借台达即将推出以太网模块之际撰写此文,希望能够为其以太网模块的推广提供一些帮助。由于本人水平有限本文编写难免会有错漏之处,也请读者给予批评指正。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    40

    文章

    5073

    浏览量

    166204
  • plc
    plc
    +关注

    关注

    4974

    文章

    12244

    浏览量

    454813
  • 数据采集
    +关注

    关注

    38

    文章

    4510

    浏览量

    112313
收藏 人收藏

    评论

    相关推荐

    欧姆龙PLC以太网通过CHNet-CP与MatrikonOPC ModbusTCP通信配置

    欧姆龙CP系列PLC以太网通过CHNet-CP与MatrikonOPC ModbusTCP通信配置
    发表于 10-19 09:42 847次阅读

    三菱Q系列PLC以太网通过CHNet-Q实现以太网通信及ModbusTCP配置方法

    三菱Q系列PLC连接CHNet-Q实现以太网通信配置方法 CHNet-Q是兴达易控研制的一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生产管理)而设计,用于三菱
    发表于 10-14 18:29 6217次阅读

    三菱FX系列PLC以太网通过CHNet-FX实现以太网通信及ModbusTCP配置方法

    三菱FX系列PLC连接CHNet-FX实现以太网通信配置方法 产品简介 CHNetS7-FX是一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生产管理)而设计,用于
    发表于 10-14 18:14 3673次阅读
    三菱FX系列<b class='flag-5'>PLC</b>转<b class='flag-5'>以太网通过</b>CHNet-FX<b class='flag-5'>实现以太网通信</b>及ModbusTCP配置方法

    PC与FPGA的以太网通信

    我现在在做FPGA和PC之间的以太网通信PC和FPGA用交叉线直连,板子上的以太网phy芯片是88e1111,以太网是千兆的,RGMII接
    发表于 07-05 21:37

    FPGA和PC通过以太网通信的问题

    想问一下,pc和FPGA通过以太网通信有什么比较好的参考资料吗?(本人小白一枚,FPGA和计算机网络都在自学,现在有一个项目需要实现这个功
    发表于 03-05 16:07

    NI OPC 与三菱PLC以太网通信

    各位大神,谁用过NI OPC与三菱PLC通过以太网通信的,我遇到以下问题,请不吝指教:1.NI OPC Driver库里没有L系列的驱动,只有A/Q/FX系列,如果需要与L系列作以太网通信
    发表于 12-04 09:17

    PLCPC基于工业以太网通信研究与实现,不看肯定后悔

    PLCPC基于工业以太网通信研究与实现,不看肯定后悔
    发表于 05-28 06:35

    信捷PLC以太网通讯数据采集解决方案 相关资料推荐

    描述:信捷XC/XD等系列PLC及一体, 以太网通讯数据采集解决方案。桥接器采用三通设计,不占用PLC通讯口,不对原系统做任何硬件和软件修
    发表于 07-02 07:31

    如何使用AT32F407以太网通信接口实现在应用中编程(IAP)的解决方案

    AT32F407 IAP using the EMAC提供了如何使用AT32F407以太网通信接口实现在应用中编程(IAP)的解决方案
    发表于 10-24 07:35

    如何使用AT32F437以太网通信接口实现在应用中编程(IAP)的解决方案

    本应用笔记专为使用AT32F437微控制器的开发人员编写。它提供了如何使用AT32F437以太网通信接口实现在应用中编程(IAP)的解决方案。有两种基于LwIP TCP/IP协议栈的解决方案
    发表于 10-25 07:41

    利用Winscok控件实现VBPLC以太网通信

    利用Winscok控件实现VBPLC以太网通信 工业以太网以其特有的低成本,高实效,高扩展性及高智能的魅力,吸引着越来越多的制造业
    发表于 06-16 14:04 2335次阅读
    利用Winscok控件<b class='flag-5'>实现</b><b class='flag-5'>VB</b>与<b class='flag-5'>PLC</b>的<b class='flag-5'>以太网通信</b>

    关于工业以太网通信解决方案介绍

    瑞萨电子工业以太网通信解决方案
    的头像 发表于 07-23 00:43 3859次阅读

    上位机与两台PLC之间无线以太网通信

    本文以组态王和2台三菱FX5u PLC为例,介绍组态王与多台 PLC的无线以太网通信实现过程。在本方案中采用了三菱PLC无线通讯终端DTD4
    的头像 发表于 06-25 09:53 1032次阅读
    上位机与两台<b class='flag-5'>PLC</b>之间无线<b class='flag-5'>以太网通信</b>

    plc以太网通讯模块在哪个位置

    PLC以太网通信模块是一种常用的工业自动化设备,广泛应用于工厂、机械设备和自动化控制系统中。它被用来实现PLC与其他设备之间的数据传输和通信
    的头像 发表于 01-10 15:30 437次阅读

    plc以太网通讯模块在哪 plc以太网通讯掉线怎么解决

    PLC(可编程逻辑控制器)是一种用于工业自动化控制的设备,常用于监控和控制机器、生产线、工厂等。PLC通常使用多种通信接口进行数据交换,以太网通信是其中一种常用的方式。 一、
    的头像 发表于 02-05 10:14 881次阅读