紫外工控论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2778|回复: 3

[VB/VB.NET] PLC_VB图形监控(转)

[复制链接]
冰糖 发表于 2013-12-3 08:38:47 | 显示全部楼层 |阅读模式
作 者:台湾南台科技大学 电机系 宓哲民

1  概论

在plc的图形监控技术中,虽然以使用通用型的人机接口搭配套装式图形监控软件较为简易、便利,但是就学习或使用者本身而言,只是就图形监控组件的变量(编号)或属性作一些简单的设定,至于plc  pc间如何透过rs-232或rs-485串行通讯端口执行接点状态或数据缓存器数值之读取、写入与控制等,就有些雾里看花了。此外条形码扫瞄器(bar code reader,bcr)、电子磅秤(electronic load cell)、温度控制器、modus通讯、区域或网络通讯…等,若不知道相关的通讯协议,就无法与pc或plc联机以读取或写入所需的数据。有鉴于plc在产业自动化中的枢纽地位,加以各技职院校均开设有plc及vb等相关课程,若使用vb 作为plc的图形监控,在教学、自学及实作上不但可坐收事半功倍之效,同时也可达到科技整合的目标,提升机电控制的技术层次,因此本专栏就以plc_vb图形监控作为探讨主题。



图1 通讯协议数据格式



图2 位元元件位址的计算方式

2  plc通讯协议

pc  plc通讯之目的,不外乎是pc与plc间进行相关接点状态或数据缓存器数值之读取、写入或控制,上述数据存取或控制,除了在硬件联机及通讯参数设定方面必须双方一致外,在讯息格式方面亦必须符合专属的通讯协议。在pc与plc的通讯架构中,pc为主系统(master),plc则为仆系统(slave),亦即pc与plc间通讯,是由pc发出命令讯息给plc,只有在plc接收到pc的命令后,才会响应一讯息给pc。

以下以丰炜(vigor)plc为例,介绍其m、vb、vh系列plc之通讯协议:

2.1 传输讯息格式

为了使得各类型pc能够互通讯息,美国国家标准局制定了ascii码。ascii码原先仅使用7bits,因考虑到一些特殊的图形码,故目前已扩充为8bits。不过在plc  pc通讯上,ascii码还是采用原先7bits的编码方式,所以其数据位为7bits。

2.2 通讯参数

(1)传输格式:usb或标准rs-232、异步(asynchronous)、双向传输。

(2)传输速率或鲍率(baud):plc内建之cp1固定为19200bps;cp2有4800、9600、19200、及38400bps等可供选择,由ladder master设定;至于 cp3则固定为19200bps。

(3)同位检查(parity check):偶同位(even parity,e)。

(4)数据位(data bits):7 bits。

(5)停止位(stop bit):1 bit。

2.3 通讯协议数据格式

通讯协议数据格式如下图1所示:

(1)起始码

数据传输的开头字符,pc下达命令给plc时之起始码为stx(2h),plc回传资料给时为ack(6h)。

(2)站号

数据传输对象的辨识码,在通讯回路中每一台plc都必须有一个站号,当pc对plc下达命令时,就是以站号来指定要将命令下达给那一台plc。plc内建之cp1固定为0号;cp2可选择范围为0~255号,由ladder master设定;cp3由vb-cadp模块左侧旋转开关设定,范围为0~99号。

(3)命令

通讯命令系pc要求plc所执行之动作,可以经由pc对plc执行位组件之状态或缓存器的值连续读取、写入或位组件on/off等命令共有4种,各命令码代号、种类、对象组件及其功能,如表1所示。

(4)传送数据

数据传输的内容,包含:数据地址、长度、内容及错误码…等。

(5) 结束码

数据传输的结束字符为etx(3h),当plc收到代表通讯结束的etx字符后,即可开始处理该次通讯命令或数据。

(6)检查码

系将图1中之站号~结束码中各字段所有ascii字符之16进制数值依序相加,但不考虑进位,也就是取其和最右边的2个数值作为检查码,此一核算方式称为2纵式余数查核法2(longitudinal redundancy check,lrc)。当接收端收到命令讯息后会依相同计算法则重新核算其检查码,若两者数值相同,则表示所传输数据正确,否则表示在传输过程中有错误发生。

(7)错误码

在plc的回传数据中会有一个错误的讯息码,错误码及其说明如表2所示。

2.4 数据地址

pc  plc通讯必须了解plc内部有那些组件,以及那些组件的实际地址(address),以便于进行数据的存取。

(1)群组地址

适用于连续数据读取【51h】及连续数据写入【61h】等通讯命令,可分为下列二种:

① 位型态组件

诸如:x、y、m、s、t、c等多个字节(bytes)数据。若字节数byte=1时,则群组地址定义8个连续的位型态组件。

② 字符组型态组件

诸如:t/c现在值或缓存器d之数值等。

常用群组地址如表3所示,t/c现在值或d数值占有2个连续的地址。

(2)位组件地址

适用于将指定的bit设定为on【70】及设定为off【71】等通讯命令。位组件地址=数据地址+组件位置,计算方式说明如下:

【例1】求位组件y10的地址

解答:10/8=商数=1…余数=2;y0群组之数据地址=0040,取前3位=004+商数+余数=00412。之后将00412的前三个位舍弃,即可求得y10组件地址为020a,详细步骤如图2所示。经上述计算程序转换后之常用位组件地址如表4所示:



图4 检查码计算_vb窗体


图5 检查码计算结果



图6 位组件on/off_vb窗体

表1  pc→plc通讯命令


表2 错误码及其说明

表3 常用群组地址

表4   经过转换后之常用位元元件位址

3  vb简介

visual basic(vb)由于它提供了完善的图形化接口,兼具对象导向、事件驱动的程序设计理念,让使用者在vb的整合开发环境(ide)下,点选工具箱中所提供的识别图式工具按钮,经由对象在窗体的适当配置,不用编写程序即可完成所须的输入/输出接口,并可立即在屏幕上看到画面设计的实际结果,诸如:对象大小、位置、标题、颜色、图形…等。此外vb方便且强大的除错功能,更大大地提升了程序设计的效能,因此在 windows多任务作业环境下,具亲和力且易学易用的vb,无疑是初学者开发应用程序的最佳选择。

在plc的图形监控技术中,虽然以使用套装式图形监控软件较为简易、便利,但是就学习过程或使用者本身而言,并无法提升自己的技术层次。有鉴于plc在产业自动化中的枢纽地位,并考虑plc_pc通讯和vb建构输入/输出接口的便利及自行开发应用程序的重要性与日俱增,加上vb新增的进阶功能,诸如:多媒体、对象连结与内嵌(ole)、动态链接库(dll)、动态数据交换(dde)…,若搭配其它数据库软件包(excel、access、dbase、foxpro…),以及因特网支持(active x…),则vb在plc图形监控中将更形简易和便利。

microsoft不断的推陈出新,将vb 6.0先后加以更新为vb.net、vb 2005及2008,虽然增加了许多因特网的应用功能,但其硬件规格及需求不但较vb 6为高,而且作业环境及工作窗口亦较vb 6来得复杂,无形中拉高了学习的门坎,使初学者不禁望而却步。一些简单的机电控制或应用,并非一定得使用vb 2005或2008不可,vb 6依然受到大多数人的关爱。有鉴于此,本文仍然以vb 6为主,相信具备了程序设计的理念和经验之后,跨入vb 2005或2008的学习及应用领域,应该可以触类旁通。



图7 mscomm控件通讯参数设定



图8 y0设定为on的通讯格式



图9组件群组连续写入及读取_vb窗体



图10连续写入_y0~y7全亮

4  vb通讯对象_mscomm

在vb6的专业版及企业版中,mscomm控件并不是预设之常用工具,但是可以经由新增工具的方式来开启mscomm控件,使应用程序具有串行通讯的功能。启动vb之后执行菜单列中『项目』『设定使用组件』,出现一[设定使用组件]对话框,在控件中勾选microsoft comm control 6.0,按下『确定』钮后,即可将mscomm控件加载一般工具箱内,使其成为预设的工具选项,mscomm控件的识别图标为一电话盒,如图3所示。

mscomm控件在pc和plc串行通讯中较常使用的属性如下:

(1)mscomm1.output = commandcode

将commandcode(命令码)写入传送暂存区,亦即pc经由通讯端口送出命令字符串给plc。

(2)mscomm1.input

传回接收暂存区中之数据,亦即pc经由通讯端口接收plc传回来的响应字符串讯息。

(3)mscomm1.portopen = false

关闭通讯端口。

(4)mscomm1.portopen = true

开启通讯端口。



图11连续读取_y0~y7全亮



图12 1个byte数据读取示意图





图13连续写入_y0~y17全亮



图14连续读取_y0~y17全亮

5  plc_vb基本通讯命令学习范例

5.1【例1】检查码计算

(1)设计一vb窗体如图4所示,并分别在窗体中设置如图所示的对象(或控件)。为了帮助读者理解程序代码,我们在相关的对象上方以卷标(label)项作了一些批注。

(2)若要将位组件m10(组件地址:040a)设定为on(命令:70),且采plc内建之cp1(站号:0),则程序执行后在text1文字方块内输入0070040a,之后按下检查码计算钮,检查码计算结果为9f,如图5中之text2所示。

(3)程序代码

为了缩短篇幅,我们直接在程序代码中加上批注,亦即单引号`或rem,它属于不被执行叙述,其目的在于增加程序的可读性或便于日后修改。

private sub command1_click()

`变量宣告:integer为整数、string为字符串

dim n, sum as integer

dim checkstring as string

`通讯格式中的英文字符必须为大写(a~f),故先行将text1.text所输入之传送数据,经由程序自动转换为大写字母,然后加上结束码etx:chr(3),形成一字符串checkstring

checkstring = ucase(text1.text + chr(3))

` for--next属于重复结构中之计数循环,指令pc在一定的次数内,重复的执行某一叙述区段,亦即取出checkstring字符串中每一个字符,并累加每一个字符的ascii码,而得出一整数sum。

for n = 1 to len(checkstring)

sum=sum + asc(mid(checkstring, n, 1))

next n

`将10进制整数sum转换为十六进制,并取其右边二位数,即为所求检查码。

text2.text = right(hex(sum), 2)

end sub

private sub command2_click()

`将text1及text2等控件内容予以清除成为空白字符串

text1.text = “” : text2.text = “”

`设定text1控件为驻点对象,亦即使text1取得窗体控制权

text1.setfocus

end sub

private sub command3_click()

end

end sub

5.2【例2】基本通讯命令_位组件on/off【70、71】

(1)设计一vb窗体如图6所示,并分别设置如图所示的对象或控件。

(2)将鼠标移到电话盒图标上,按一下鼠标右键,在下拉式快捷菜单中分别设定正确的:a、通讯连接端口,b、通讯参数,c、交握协议,如图7所示。

(3)若要将位组件y0设定为on,并采plc内建之cp1(站号固定为0号),程序执行后分别在各text文字方块内键入如图8所示的通讯格式,之后按下on/off钮,此时主机led面板上之y0灯号亮起。将y0设定为off时,只要将命令改为71、检查码改为8d,再度按下on/off钮后,则led面板上之y0灯号熄灭。

(4)程序代码

private sub command1_click()

`开启通讯端口

mscomm1.portopen = true

` pc下达位组件on/off命令给plc

mscomm1.output = chr(2) & text4.text & text1.text & text2.text & chr(3) & text3.text

`关闭通讯端口

mscomm1.portopen = false

end sub

private sub command2_click()

text1.text = "": text2.text = "": text3.text = "": text4.text = ""

text1.setfocus

end sub

private sub command3_click()

end

end sub

5.3【例3】基本通讯命令_组件群组连续写入【61】及读取【51】

(1)如前所述,组件群组定义为8×n个连续的位型态或字符组组件。设计一vb窗体如图9所示,并分别设置如图所示的对象或控件。

(2)若要将字节组件y0~y7全部设定为on,并采plc内建之cp1,程序执行后分别在各text文字方块内键入如图10所示的通讯格式,之后按下write钮,此时主机led面板上之y0~y7灯号亮起。若键入如图11所示的通讯格式,按下read钮,则经由plc读取的数据亦为ff。

(3)程序代码

private sub command1_click()

mscomm1.portopen = true

` pc下达连续写入命令给plc

mscomm1.output = chr(2) & text6.text & text1.text & text2.text & text3.text & text4.text & chr(3) & text5.text

mscomm1.portopen = false

end sub

private sub command4_click()

dim strtmp as string

mscomm1.portopen = true

` pc下达连续读取命令给plc

mscomm1.output = chr(2) & text6.text & text1.text & text2.text & text3.text & chr(3) & text5.text

`后测试循环,等待plc响应字符串

do

strtmp = strtmp & mscomm1.input

loop until len(strtmp) >= 12

`取出数据

text7.text = mid(strtmp, 8, 2)

mscomm1.portopen = false

end sub

(4)1个byte数据读取程序代码解说

1个byte数据读取,plc响应字符串的字符数为12,数据由响应字符串的第8个字符开始往后取2个字符即为所求,如图12所示。

(5)本程序可扩充为字符组(word)连续写入及读取,以1个字符组为例,因为1word=2 bytes,故y0~y17全亮时之连续写入通讯格式如图13所示,连续读取通讯格式则如图14所示。

(6)1个word数据读取程序代码解说

1个word数据读取,plc响应字符串的字符数为14,数据由响应字符串的第8个字符开始往后取4个字符。因为数据是由较低次位lsb开始传输,故将low byte(b7~b0)和high byte(b15~b8)对调即为所求,因此祇要修改下列程序代码即可执行1个word数据读取,示意图如图15所示。

do

strtmp = strtmp & mscomm1.input

loop until len(strtmp) >= 14

response = mid(strtmp, 8, 4)

text7.text = right(response, 2) & left(response, 2)

6  plc_vb进阶学习范例

【例4】马达起动停止控制

综合运用基本通讯命令,利用单一组件mn之on及off,来仿真一plc外部输入按钮。并启动定时器(timer)控件每隔一特定的时间持续不断的经由串行通讯端口去侦测plc是否已将响应讯息传送到接收暂存区,并将其内容值执行and运算,以取出所拟监看接点。在接点状态on/off变化时,则更改形状(shape)控件背景颜色(backcolor)的属性,达到图形监控的目的。

(1)plc程序设计

马达起动停止控制阶梯图,如图16所示。

(2)vb窗体

设计一马达起动停止控制之vb窗体如图17所示,并分别设置如图所示的对象或控件;vb执行结果则如图18所示。

(3)程序代码

private sub form_load()

`启动定时器

timer1.enabled = true

end sub

private sub command1_click()

`m0_on

mscomm1.portopen = true

mscomm1.output = chr(2) & "00" & "70" & "0400" & chr(3) & "8e"

mscomm1.portopen = false

`m0_off

mscomm1.portopen = true

mscomm1.output = chr(2) & "00" & "71" & "0400" & chr(3) & "8f"

mscomm1.portopen = false

end sub

private sub command2_click()

` m1_on

mscomm1.portopen = true

mscomm1.output = chr(2) & "00" & "70" & "0401" & chr(3) & "8f"

mscomm1.portopen = false

`m1_off

mscomm1.portopen = true

mscomm1.output = chr(2) & "00" & "71" & "0401" & chr(3) & "90"

mscomm1.portopen = false

end sub

private sub timer1_timer()

dim strtmp as string

dim inttmp as integer

mscomm1.portopen = true

` pc下达连续读取y0~y7命令给plc

mscomm1.output = chr(2) & "00" & "51" & "0040" & "01" & chr(3) & "ee"

do

strtmp = strtmp + mscomm1.input

loop until len(strtmp) >= 12

strtmp = mid$(strtmp, 8, 2)

`将plc响应数据转换成10进制数值,并与1(y0为b0)作and运算,以取出y0

a = val("&h" + strtmp) and 1

`判断y0的值

select case a

case 1   ` 1表示y0 on

shape1.backcolor = vbred`淡红色

label4.caption = "启动"

  case 0   ` 0表示y0 off

shape1.backcolor = vbgreen  `淡绿色

label4.caption = "停止"

end select

mscomm1.portopen = false

end sub



图15 1个word数据读取示意图



图16马达起动停止控制阶梯图



图17 马达起动停止控制_vb窗体  



图18 马达起动停止控制执行结果

7  结论

在plc的图形监控技术中,虽然以使用通用型的人机接口搭配套装式图形监控软件较为简易、便利,但是就学习或使用者本身而言,并不知晓pc plc间如何透过串行通讯端口执行接点状态或数据缓存器数值之读取、写入与控制等。此外更新版的vb虽然增加了许多因特网的应用功能,但作业环境及工作窗口亦变得较为复杂,使初学者不禁望而却步。一些简单的机电控制或应用,使用vb 6依然游刃有余。相信具备了vb6程序设计的理念和经验之后,跨入vb 2005或2008的学习及应用领域,应该可以触类旁通。

本文以丰炜plc通讯协议为例,就数据传输时之检查码计算、位组件on/off及组件群组连续写入及读取等基本通讯命令,使用vb6并按部就班为读者作一解说,最后综合运用上述基本通讯命令,以马达起动停止控制为例,使用定时器每隔一特定的时间,持续不断的经由串行通讯端口执行数据或数值的连续读取,并在接点状态on/off变化时,更改形状控件的背景颜色,达到plc_vb图形监控的目的。

通讯协议一般而言实属大同小异,故文中所提及之指令解说与实作,其它厂牌或机种之plc亦可适用。俗云:“师傅领进门,修行在个人”,6次专栏在此暂时告一段落,但愿您能针对每月专栏主题用心体会、勤加练习,相信假以时日您亦可“青出于蓝,而更胜于蓝”。

作者简介

宓哲民  男  硕士,副教授,主要研究方向为plc、人机接口及图形监控。

颜见明  男  现任丰彰国际贸易(上海)有限公司总经理。

参考数据

[1] 宓哲民,劉春山,戴源良,等.vb图形监控_f(a)x系列plc(修订三版)[m].台湾:文京书局,2010.

[2] 王义文,宓哲民,陈文轩,陈文耀,等.可编程控制器(plc)原理与应用实务.北京:科学出版社,2010.

[3]  "m、vb、vh系列plc程序编辑手册".丰炜科技企业有限公司.2010年.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
习惯 发表于 2013-12-4 07:49:58 | 显示全部楼层
顶一个,之前做过和三菱PLC的,但我只能做到强制ON的,其他的就没再深入
 楼主| 冰糖 发表于 2013-12-4 21:57:43 | 显示全部楼层
习惯 发表于 2013-12-4 07:49
顶一个,之前做过和三菱PLC的,但我只能做到强制ON的,其他的就没再深入

能做到强制ON,其他的也基本差不多了
zwk34 发表于 2024-1-11 14:49:16 | 显示全部楼层

谢谢楼主,支持共享!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


--------------------------------------------------------------------------------------------------------------------
本站是工控技术交流站点,论坛内容均为网络收集或会员所发表,并不代表本站立场,会员拥有该内容的所有权力及责任!
本站内容如有侵犯您的版权,请按下面方式联系本站管理员,我们将及时删除处理
管理员:冰糖 QQ:5483695(请直击主题), Mail:admin#ziwai.net(#改成@) 其它非本人.
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

QQ|Archiver|手机版|小黑屋|紫外工控论坛. ( 苏ICP备11032118号-1 )

GMT+8, 2024-4-28 21:46 , Processed in 0.421880 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表