vb.net与三菱plc通讯与VB 怎么通讯

利用VB的MSComm控件编程实现PC与三菱PLC FX系列通信
利用VB的MSComm控件编程实现PC与三菱PLC FX系列通信
  来源:</a
&编写PC的通信程序可采用汇编语言编写,或采用各种高级语言编写,或采用工控组态软件,或直接采用PLC厂家的通信软件(如三菱的MELSE
下面利用VB6.0以一个简单的例子来说明编写通信程序的要点。假设PC要求从PLC中读入从D123开始的4个字节的数据(D123、D124),其传输应答过程及报文如图7-16所示。
传输应答过程及命令报文
命令报文中10F6H为D123的地址,04H表示要读入4个字节的数据。校验和SUM=30H+31H+30H+46H+36H+30H+34H+03 H=174H,溢出部分不计,故SUMH=7,SUAIL=4,相应的ASCⅡ码为“37H”,“34H”。应答报文中4个字节的十六进制数,其相应的ASCⅡ码为8个字节,故应答报文长度为12个字节。
根据PC与FX系列PLC的传输应答过程,利用VB的MSComm控件可以编写如下通信程序实现PC与FX系列PLC之间的串行通信,以完成数据的读取。MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。在这个例子中使用了轮询方法。
&& 1)通信口初始化
Private Sub Initialize()
MSComm1.CommPort =1
&MSComm1.Settings
= “9600,E,7,1”
MSComm1.InBufferSize = 1024
MSComml.OutBuffersize = 1024
MSComm1.InputLen = 0
MSComml.InputMode = comInputText
MSComm1.Handshaking = comNone
MSComm1.PortOpen = True
&&& 2)请求通信与确认
Private Function MakeHandshaking()As
InPackage As String
MSComml.OutBufferCount = 0
MSComml.InBufferCount
MSComml.OutPut
= Chr(&H5)
Until MSComml.InBufferCount
InPackage = MSComml.Input
InPackage = Chr(&H6) Then
MakeHandShaking = True
MakeHandshaking = False
3)发送命令报文
Sub SendFrame ()
Outstring As String
MSComml.OutBufferCount
MSComml.InBufferCount
= Chr(&H2)+″on″+″10F604″+Chr(&H3)+″74″
MSComml.Output
= Outstring
4)读取应答报文
Sub ReceiveFrame()
Instring As String
Until MSComml.InBufferCount
= MSComml.Inpult君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
vb 6&#46;0实现pc与三菱plc通讯的几个例子
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口君,已阅读到文档的结尾了呢~~
VB6&#46;0实现PC与三菱PLC通讯的几个例子
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
VB6&#46;0实现PC与三菱PLC通讯的几个例子
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口VB与三菱PLC通讯
随着生产自动化程度的不断提高,可编程序控制器PLC得到了广泛的应用,特别是小型PLC具有编程简单、性能可靠和价格低的特点,被大量应用于单机控制系统中,如啤酒的稀释控制、离心机控制等。作为设备维修技术人员,一般都能掌握PLC和计算机PC的应用知识,但如何利用PLC和PC来设计小型自控系统,实现简单的数据采集和监控操作,从而满足生产需要,却是一个要深入学习研究的问题。
面向生产操作,设计简单有效的控制系统,涉及到三部分的软件编程:
第一:PC上人机操作界面的设计。PC作为上位机,一般都是运行在Windows&98/2000操作系统下,利用微软提供的可视化编程软件Visual&Basic&6.0,设备维修技术人员就可设计出优美的人机操作界面,只需进行主要操作功能编程和少量界面控制编程。
第二:实现生产工艺要求的PLC控制程序设计。因为是小型控制系统,其生产控制过程并不复杂,技术人员只要充分了解了生产工艺和控制要求,运用PLC编程工具,此部分设计编程并不难。
第三:PC与PLC通讯程序的设计。此部分的开发设计较难,需要掌握PC和PLC的有关通讯硬件驱动和通讯协议的知识。但对于小型控制系统来说,主要通过PC串口来通讯,所以通讯程序设计的关键是如何利用Visual&Basic&6.0中的串口通信控件——MSComm控件,并根据PLC的串口通信协议设计出上下位机的数据交换程序。
下面以啤酒稀释自控系统设计为例,主要讲解PC和PLC通讯程序的设计要点。
二.&啤酒稀释自控系统设计分析
1.&啤酒稀释控制要求
啤酒稀释是啤酒生产中一个重要环节,通过把高浓度的酒液与脱氧水按比例混合成稀释酒,从而提高啤酒产量和增加啤酒品种,稀释的控制过程很简单,主要步骤有:
1)&输入高浓度的浓度A和稀释后要达到的浓度B&;
2)&计算出加水量的百分比&[(B-A)&/&A]*100%&;
3)&根据此百分比和高浓酒的瞬时流量,计算出脱氧水要达到的流量;
4)&比较水的瞬时流量和计算出的流量,来控制水调节阀的开度,使水瞬时流量等于计算流量。
由于酒和水的瞬时流量是变化的,所以3)、4)步要反复进行。以上所有的计算功能和PID调节功能都由PLC完成。
2.&啤酒稀释的人机操作界面:
人机操作主要用来输入啤酒浓度数据、操作命令,直观显示各种流量数据并记录偏差曲线,界面图如下:
3.&硬件配置
本例子中上位机PC选用联想奔腾&#8545;品牌机,外加RS232转RS485通讯转换卡。下位机PLC选用三菱FX2N-16MR,另加模拟输入模块FX2N-2AD&和模拟输出模块FX2N-2DA各一块,外加一个485串口通讯模块PC-485BD。
三.&PC与PLC通讯程序设计分析
在分析具体的VB通讯程序之前,先要介绍有关VB串口通信控件MSComm的应用知识和三菱PLC&通讯协议。
1.&MSComm控件简介
如图所示是Mscomm控件的图标。
它可以用来提供简单的串行端口通信功能,也可以用来创建功能完备、事件驱动的高级通信工具。Mscomm控件提供了一系列标准通信命令的使用界面。使用它可以建立与串行端口的连接,通过串行端口再连接到其它设备(如调制解调器、PLC),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。
2.&MSComm控件的基本属性
MSComm&控件有很多重要的属性,基本属性如下:
属性&&&&&描述&
CommPort&&&&设置并返回通讯端口号。&
Settings&&&&&以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。&
PortOpen&&&&设置并返回通讯端口的状态。也可以打开和关闭端口。&
Input&&&&&从接收缓冲区返回和删除字符。&
Output&&&&&向传输缓冲区写一个字符串。
如下程序打开串行端口COM1
mPort&=&1&&&&&&&&&使用&COM1&
MSComm1.Settings&=&"9600,N,7,1"&&&9600波特率,无奇偶校验,7位数据,一个停止位。
MSComm1.PortOpen&=&True&&&''打开端口,开始通信。
3.&MSComm控件的通信方式
通信控件有2种不同的方式来处理和解决各类通信软件的开发和设计问题。
(1)&事件驱动
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如:当线路数据到达本端或CD线和RTS信号线状态发生变化时,要求我们使用相应的事件来跟踪和出理。在这些情况下,&Mscomm控件将触发OnComm事件,CommEvent属性值也将被改变。所以在OnComm事件中读取CommEvent属性值就可以检测和处理通信错误等方面的问题。
(2)查询方式
利用定时器控件Timer,我们可以设计程序每隔一段时间去读取CommEvent的值并处理所发生错误和事件。
4.&本实例中采用的通讯方式
在本例子中,PC与PLC&采用无握手协议的串行通信,它们只用两根数据线&TD和RD、一根信号地线连接,数据通信采用查询方式。根据系统功能要求,PC需发送两种类型的命令:
(1)&周期性命令,它由定时器触发引起,每隔0.5秒发送一次。用它来向PLC查询实时显示的数据。如酒、水的瞬时流量,调节阀开度等。
(2)&非周期性命令,它由操作者按动命令按钮引起,非周期性发送。用它来传送输入参数、操作命令给PLC&。
在啤酒稀释的人机操作界面中,有运行时不可见的通信控件(MSComm1)一个、定时器控件一个Timer1。通信控件(MSComm1)用于初始化串口数据并打开串口;定时器控件(Timer1)用于每隔0.5秒执行通讯命令,把查询命令从PC发送到PLC,同时接收PLC返回的应答数据。设计通讯数据的发送和查询功能,必须掌握PLC所遵循的通讯协议。
5.&三菱FX系列PLC通讯协议
三菱FX系列PLC共有四种通信模式,本实例采用的是PLC与计算机专用协议通信方式(无须PLC编程,电脑直接读写操纵PLC),其通讯命令字和通讯格式介绍如下:
PC发送给PLC的通信命令字
命令字&注释
BR&以1点为单位,读出位元件的状态
WR&以16点为单位,读出位元件的状态,或以1字为单位,读出字元件的值
BW&以1点为单位,写入位元件的状态
WW&以16点为单位,写入位元件的状态,或以1字为单位,写入值到字元件
BT&以1点为单位,设置/复位&位元件
WT&以16点为单位,设置/复位&位元件,或以1字为单位,写入值到字元件
RR&控制PLC运行RUN
RS&控制PLC停止STOP
PC&读出PLC设备类型
TT&连接测试
PC发送给PLC的通信命令格式
约定说明:ENQ为请求标志,ASCII值5,VB中以chr(5)表示;
     ACK为正确标志,ASCII值6,VB中以chr(6)表示;&
     STX为请求标志,ASCII值2,VB中以chr(2)表示;
     EXT为请求标志,ASCII值3,VB中以chr(3)表示;&
     表格中粗体字为需要求和效验的部分;
     和效验为每一项的ASCII值的总和转换成十六进制后,取其低两位;
     站号、PLC号、元件数量、和效验都是以十六进制表示;
   &&&&等待延时为0-150毫秒,以十六进制0H-FH表示,如100ms为AH。
1)&批量读出位元件—BR指令格式
1&2&3&4&5&6&7&8&&&&&&&15&16&17
PC侧:&ENQ&站号&PLC号&BR&延时&首地址&数量&和校验&&&&&&&ACK&站号&PLC号
PLC侧:&&&&&&&&&STX&站号&PLC号&数据&EXT&和校验&&&
&&&&&&&&&9&10&11&12&13&14&&&
例如:要读出站号为5的PLC的X40到X44共5点的状态值,延时100毫秒,假设PLC中X40与X43为OFF,其余为ON,则指令数据如下:
注释:&请求&站号&PLC号&命令&延时&元件首地址&元件数量&和校验
代码:&ENQ&0&5&F&F&B&R&A&X&0&0&4&0&0&5&4&7
ASCII码:&05H&30H&35H&46H&46H&42H&52H&41H&58&30H&30H&34H&30H&30H&35H&34H&37H
只要将以上代码以字符串形式(VB中可以表示为chr(5)&”05FFBRAX”)发送到PLC,就会有正确的回应信息,如下:
注释:&头&站号&PLC号&位元件状态值&尾&和校验
代码:&STX&0&5&F&F&0&1&1&0&1&EXT&E&7
ASCII码:&02H&30H&35H&46H&46H&30H&31H&31H&30H&31H&03H&45H&37H
2)&批量读出字元件—WR指令格式
1&2&3&4&5&6&7&8&&&&&&&15&16&17
PC侧:&ENQ&站号&PLC号&WR&延时&首地址&数量&和校验&&&&&&&ACK&站号&PLC号
PLC侧:&&&&&&&&&STX&站号&PLC号&数据&EXT&和校验&&&
&&&&&&&&&9&10&11&12&13&14&&&
该命令使用与BR命令相同。
3)&批量写入位元件—BW指令格式&&
1&2&3&4&5&6&7&8&9&&&
PC侧:&ENQ&站号&PLC号&BW&延时&首地址&数量&写入值&和校验&&&
PLC侧:&&&&&&&&&&ACK&站号&PLC号
&&&&&&&&&&10&11&12
4)&批量写入字元件—WW指令格式
1&2&3&4&5&6&7&8&9&&&
PC侧:&ENQ&站号&PLC号&WW&延时&首地址&数量&写入值&和校验&&&
PLC侧:&&&&&&&&&&ACK&站号&PLC号
&&&&&&&&&&10&11&12
6.&VB通讯功能块设计分析
根据三菱PLC的通讯指令格式,在PC中编写数据查询功能块RevData(&)和数据发送功能块SendData(&),就可以在定时中断处理块TIMER1(&)中调用查询功能块RevData(&),实现PC界面数据定时刷新;在每一次操作命令执行时,调用数据发送功能块SendData(&),把控制值写入PLC中,从而实现控制。下面给出这两个功能块的设计程序。
1)&查询数据函数RevData(&)
(没有和校验)
Sub&&RevPLC&(iNo&As&String,&iType&As&String,&iAdd&As&String,&iNum&As&String)
''&iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量
Dim&Stmp&As&String
Dim&cha,&j&As&Integer
Dim&ChaCount&As&Integer
Dim&Comm&As&String
Select&Case&&iType
Case&"D"&&&&&&&&&&''查询数据寄存器的值
Comm&=&"WR"&&&&&&&''命令类型:数据字读
cha&=&Val("&H"&&&iNum)&*&4&&&&&&''数据寄存器的值为十六进制表示,占4个字符
Case&"M",&"X",&"Y"&&&&&''查询继电器触电的值
Comm&=&"BR"&&&&&&''命令类型:二进制位读
cha&=&Val("&H"&&&iNum)
End&Select
iAdd&=&Right$("000"&&&iAdd,&4)
iNum&=&Right$("0"&&&iNum,&2)
Stmp&=&Chr$(5)&&&iNo&&&"FF"&&&Comm&&&"A"&&&iType&&&iAdd&&&iNum&&&&''输出命令格式
ChaCount&=&6&+&cha&&''要返回字符个数
main.MSComm1.InBufferCount&=&0&&''输入缓冲区清零
main.MSComm1.Output&=&Stmp&&''设传送缓冲区内容为命令格式
Now=Second()
DoEvents&&&&&&&&&&&&&&''转让控制权,以便让操作系统进行数据传输
If&&Second()-Now&1&&Then&&Exit&&Sub
Loop&Until&main.MSComm1.InBufferCount&=&ChaCount&&''当接收到规定字符时停止循环
RevDataTmp&=&Mid$(main.MSComm1.Input,&6,&cha)&&&&&''返回数据字符串保存在全局变量
''RevDataTmp中
2)&发送数据函数SendData(&)
(没有和校验)
Sub&SendPLC(iNo&As&String,&iType&As&String,&iAdd&As&String,&iNum&As&String,&iValue&As&String)
''&iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量,iValue为写入值
Dim&Stmp&As&String
Dim&Comm&As&String
Select&Case&&iType
Case&"D"&&&&&&&&&&''写数据寄存器的值
Comm&=&"WW"&&&&&&&&''命令类型:数据字写
iValue&=&Right$("0000"&+&Hex$(Val(iValue)),&4)&&''写入值转换成十六进制表示
Case&"M"&&&&&&&&&&''写继电器触点的值
Comm&=&"BW"&&&&&&&&''命令类型:二进制位写
End&Select
iAdd&=&Right$("000"&&&iAdd,&4)
iNum&=&Right$("0"&&&iNum,&2)
Stmp&=&Chr$(5)&&&iNo&&&"FF"&&&Comm&&&"A"&&&iType&&&iAdd&&&iNum&&&iValue&&''输出命令格式
MSComm1.Output&=&Stmp&&&&&&&&&&&&&&&&&&&''输出命令到传送缓冲区
Now=&Second()
DoEvents&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''转让控制权,以便让操作系统进行数据传输
If&&Second()-Now&1&&Then&&Exit&&Sub
Loop&Until&main.MSComm1.OutBufferCount&=&0&&&''当命令传送完时停止循环
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。VB与三菱PLC的通讯数值读取_vb吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:96,851贴子:
VB与三菱PLC的通讯数值读取收藏
我是做电控的,想用VB读取控制器里面的元件状态和数值控制器里面有布尔量也有变量数值我想问下有做过的大神没,指教 一下
3D双端东方魔幻网游「大青云」勾魂公测,穿越逆转,封神故事,全新演绎!
我做过OMRON的原理都一样,按编程手册上的发送格式发送到COM串口,处理返回的字符
Private Sub Timer1_Timer()Dim outstring As StringDim instring As StringCall clean'清空发送接收区子程序outstring = Chr(&H2) + "0" + "117C02" + Chr(&H3) + "71"'地址算法MSComm1.Output = outstringDoDoEventsLoop Until MSComm1.InBufferCount = 8instring = MSComm1.Inputc = Mid(instring, 2, 2)c1 = Mid(instring, 4, 2)c2 = c1 & cc2 = Val("&H" & c2)Text8.Text = c2 'D190END SUB这是一个读取三菱FXPLC里面D190的数值的程序,只是一个范例给你参考一下....
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 三菱plc485通讯案例 的文章

 

随机推荐