如何通过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)是面向对象的程序设计语言,用它来开发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界面的方式直接对设备进行调试。完善的兼容性,可靠的稳定性,对恶劣环境的适应性,强大的冗余能力和方便的可管理性,是人们越来越多地在网络设计过程中采用工业以太网的原因,而这也势必成为工业以太网在越来越多的网络环境里大显身手的重要契机。借台达即将推出以太网模块之际撰写此文,希望能够为其以太网模块的推广提供一些帮助。由于本人水平有限本文编写难免会有错漏之处,也请读者给予批评指正。
用PLC控制称重,其实很容易,5分钟学会S7-200称重编程和校称
原创不易,请勿抄袭!
我知道这么写一点意义都没有,我也不可能去追究别人盗版我文章的责任,但我希望我写了近6个小时的文章会有人真心喜欢,会有人能够学到文章里的知识点,并应用到工业中,这样我的目的就达到了,然后希望大家能支持我一下,点赞收藏并分享,让更多的人看到这篇写之不易的文章,谢谢。
上篇文章我们讲了PLC连接称重传感器的几种方法以及这几种方法的优缺点,今天我们说一下如何使用西门子S7-200编写称重程序。下篇文章我们会再讲一下西门子S7-300的称重程序;本文提到的所有程序实例,手册和库文件还有称重模块的详细信息以及校称软件等等我都已打包好,有需要的在评论区留下邮箱,我会一一发送。
1 称重传感器+二次表+模拟量输入的方式比较简单,只需要识别好模拟量输入通道,然后将模拟量输入转换为需要的数值范围就可以。
2 称重传感器+二次表+通讯的方式,需要选择带232/485通讯接口的PLC,设置好通讯参数后,从接收口读到的数值就是称重的实际数值,然后进行换算即可,232/485通讯也是PLC使用的一个知识点,大家有兴趣的话可以在下方留言,我可以给大家讲解。
3 我们主要讲讲这个最经典的方式吧,那就是重传感器+接线盒+称重模块。
要想使用这种方式称量的话,我们需要编写PLC程序,并且通过软件设置称重模块参数,并进行校称等操作。
一首先我们先说说PLC编程,其实称重系统的编程学起来非常难,但应用起来非常简单。为什么这么说呢?
举个例子,1+1=2大家都知道,但是要问1加1为什么等于2那就复杂多了。
所以大家想用PLC控制称重系统的话,只需要把我给大家做的例子按照现场实际设备简单修改一下,然后下到PLC里就可以使用,下载后有疑问的话再去测试各个点的功能,多用几次后就熟练了。(几乎所有人的第一套PLC程序都是抄袭别人的,一点一点探索然后自己才有思路。)
但是为了让大家理解更深一些,我除了把程序发给你们让你们模仿外,还会将一些重要的信息列出来,让大家对称重系统有一个系统的了解,这样才能快速的学会称重的编程。
我们选用的PLC是CPU226.西门子S7-200其他型号也可以,但是需要注意:1不同PLC可以拓展的称重模块数量不同,2程序设置的起始位置可能有变化,因为有的PLC自带模拟量,所以接到PLC后的称重模块的起始值就不是AIW0,而称重模块前没有模拟量输入的一般起始地址就是AIW0.具体起始值以硬件监测到的为准,这个后文我们会说到。
然后按照接线图将传感器接到接线盒,再由接线盒接到PLC模块,然后检查下回路,没有问题后送电。
连线方式
SIWAREX MS称重模块
用西门子的专用编程电缆连接到PLC,以前说过西门子PLC的区别,S7-200没有以太网口,S7-200smart不能拓展称重模块,有点尴尬,所以只能用这种特定电缆进行编程。
西门子称重模块可以理解成一种硬件,所以需要驱动,对西门子S7-200来说,这个驱动就是库文件,我们将库文件倒入程序中,库文件也打包在文件包里。
打开软件,添加库文件
添加成功
程序出现在库里
倒入后大家可以看到两个程序块,一个程序块是用来读取称重数值的,另一个是用来清零的,这两个程序块我们可以直接拉出来用。
连接好PLC后先将滤波功能去掉,以前的文章说过,滤波会导致称重有延迟,所以需要去掉。工业自动化的知识网络就是由一个一个知识点构成,我需要将整个知识网络拆分成一个一个知识点,大家需要一个一个知识点学习,然后构建自己的知识网络。
删除滤波功能
然后我们读取下PLC信息,可以看到状态是AIW0,图片为例子为截图,德国的E是输入I,A是输出Q的意思,所以有些德国图纸标记是E和A,大家了解一下就可以。
可以看出起始值是AIW0,和AQW0,后面程序设置会用到
然后我们进行编程。
第一行和第二行为数据转换,其中第一行的firstA为PLC硬件读到的地址,其他的依次后移一个字节;比如文中读到的地址是AIW0,AQW0参数设置就是AIW0,AIW2,AIW4,AIW6,AQW0,AQW2,AQW4,AQW6;如果读到的地址是AIW8,AQW8参数设置就是AIW8,AIW10,AIW12,AIW14,AQW8,AQW10,AQW12,AQW14。
FirstVB是数据转换的起始位置,以指针的形式,实际数据为后移一位,如果是&VB200,那实际读数就是VW202,这个数可以任意填写,只要不侵占其他程序就可以。
第三行和第四行是清零指令,按照上述程序即可实现清零,但需谨记,清零仅在称的重量小于一定数值以下才可,否则无法清零,我用的传感器的清零上限是50g。
PLC程序就是这样,因为VW是字的格式,不可以与数值作比较,需要转换到可计算的数据格式,所以例子程序转换为VD1000,VD1000就是可以比较的最终重量数值,如果需要以设定值控制外部设备的话就用VD1000做数值比较就可以。
二除了PLC程序,我们还需要按照称重传感器设置称重模块参数。我们需要用到的软件是Siwatool_V4或者Siwatool_MS,这两个软件的区别就在于Siwatool_V4可以针对多个称重模块,Siwatool_MS只对应一种模块,所以我一般两个都装,哪个好用用哪个,用法大致一样。
我们需要一根线连接称重模块和安装以上软件的电脑;
两侧各为9针串口,称重模块上有串口接口,电脑侧如果没有的话需要串口转USB转换器。
连接之后。
第一步:建立通信
点击Module name,选择SIWAREX MS
然后点击Online按钮,软件与模块建立通信,如果通讯不上的话,切换一下COM口就可以了。
PC列参数表示SIWATOOL软件中的参数设置,SIWAREX列为称重模块内实际设置的参数,当二者不一致时,参数为红色。
将鼠标点击Adjustment parameter (DR3) 上,鼠标右键,选择Receive data record,将DR3中的所有参数读取到SIWATOOL软件中。
第二步:称重模块参数设置
Adjustment weight 1:标定砝码重量,因为SIWAREX MS只能通过一个Word来存储重量,无法显示小数点,所以此处输入砝码重量时需要考虑小数点个数。此处输出2000,如果小数点个数为2,那么代表标定砝码重量为20.00
Decimal place for the remote display:小数点个数
Weighing range:称量范围,指容器或者秤台上被称量的物料的最大重量,而不是传感器量程。当重量大于此处设置的称量范围时,称重模块的MAX指示灯会变为红色。
第三步:将参数发送到称重模块中
完成上述参数设置后,将鼠标点击Adjustment parameter (DR3) 上,鼠标右键,选择Send data record,将DR3中的所有参数写入到称重模块中。
第四步:零点标定
将秤清空,然后执行零点标定,此时重量显示为0。
第五步:砝码标定
将标定砝码(重量与第二步设定的砝码重量一致)放在秤上,然后执行砝码标定,此时显示砝码重量。
第六步:参数备份。
点击Receive all data按钮,将称重模块参数全部上载,然后单击Save as按钮,将参数保存为文件。如果需要更换新模块时,只需要将该文件打开,通过Send all data,将参数下载到新模块中即可,无法重新进行标定。
西门子有多种称重模块,软件也有多个,但都大同小异,只要我们熟悉一个效称软件,其他的就非常容易了。
最后提醒大家一下,无论是更换称重模块还是更换称重传感器我们都需要重新效称,然后即使不坏的话,传感器使用时间过长也需要重新效称才能保持准确度。
六小时的心血啊,希望大家喜欢,分享知识是我最大的快乐!想要资料的留下邮箱。
(如果喜欢这篇文章,请点赞并关注,以便优秀文章在第一时间收到推送)
相关问答
西门子plc中VB,VW,VD的含义和怎么使用,这些地址选用有什么标准?
这些是V寄存器中不同数据类型表示方法:VBbyte型,VWword型,VDdoubleword型,使用时按你的需要选择。例如VB0,VB1……或者VW0,VW2……或者VD0,VD4,VD8…...
plc程序中vb是什么意思?
在西门子PLC中,VB表示V存储区的一个字节。在西门子PLC中,VB、VW、VD分别表示V存储区的一个字节、一个字、两个字的长度。其中,字节(Byte)可以存放短整型数...
plc中vb200什么意思?
VB200表示V存储区编号为200的那个字节。西门子plc编程软件支持新款CP243-1(6GK7243-1-1EX01-0XE0)。通过下列改进实现新的互联网向导:支持BootP和DHC...
PLC中的操作数VBIBQBMBSMBSBLBAC*VD*AC*LD西门子PLC中的操作...
[最佳回答]你说的应该是200里边的东西V是内存区B是按照字节读的一个字节8各位既1BYTE=8BITVB100就是V第100的字节的意思IB是输入字节例如IB0就是I0.0、I...
西门子plc中vb和vw区别?
在西门子PLC中,VB和VW是两种不同类型的变量存储区,它们用于存储不同大小的数据。1.**VB(Byte)**:VB代表字节,它是PLC中的一个数据存储区,用于存储一个字...
plc控制卡用什么语言编写?
哦,我理解你所说的控制卡,是指运动控制卡吧,最常用的就是:basic语言、VB语言和C语言。用编程语言写程序比较简单,一条指令就能让伺服电机动作。但编程语言...
plc200联调协议怎么编写?
通过硬件和软件侦听的方法,分析PLC内部固有的PPI通讯协议,然后上位机采用VB编程,遵循PPI通讯协议,读写PLC数据,实现人机操作任务。这种通讯方法,与一般的自...
电脑与三菱PLC通信怎么设定呀?
要实现电脑与三菱PLC之间的通信,你需要进行以下设定:1.确认通信接口:首先确定你使用的是何种通信接口,例如串口(RS232C/RS485)或以太网(Ethernet)。不...1...
西门子plc传送指令vb0是什么意思?
不是vbo是vb0,vb0中:v表示存储区域这里指的是数据存储区,b表示存储单位这里是字节,0表示字节编号,所以vb0的含义就是数据存储区的第0个字节,在西门子PLC当中字...
西门子200plc的问题。假如VB100等于2,那VW100是不是等于20,VD100是不是等于2000?
假如VB100等于2,那VW100等于512,VD100等于33554432(都是十进制表示)因为在PLC内部,字和双字分别是以2个和4个字节组成,而且地址低的字节为字或双字的高位...