永宏PLC在VB_NET中的应用_第1页
永宏PLC在VB_NET中的应用_第2页
永宏PLC在VB_NET中的应用_第3页
永宏PLC在VB_NET中的应用_第4页
永宏PLC在VB_NET中的应用_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、永宏PLC在VB.NET中的应用Fatek Application of PLC in five - axis reciprocating machines肖艺斌永宏电机·范堤商贸(上海)有限公司·上海摘要随着IT产业的进步及网际网络的发展,传统的工业控制所使用之PLC控制器,具有高度的稳定性及抗杂讯的特性且配线容易价格便宜,因此被大量的在自动化的场所,本文介绍了永宏PLC在VB.NET中的应用。关键词:FATEK PLC;VB.NETAbstractWith the progress of IT industry and the development of the In

2、ternet, the traditional industrial control the use of PLC controller, with high stability and resistance to static characteristics and Wiring easy inexpensive, so it is a lot of places in the automation, this article describes fatek PLC in VB.Application of the net.Key Words :FATEK PLC;VB.NET一 前言随着I

3、T产业的进步及网际网络的发展,传统工业控制所使用之PLC控制器,具有高度的稳定性及抗杂讯的特性且配线容易及价格便宜,因此北大量应用的在自动化的场所,已由单机操作朝向网络控制化发展,文本在探讨网络控制化的核心技术,使PC借由RS-232通讯协定控制PLC,并透过VB.NET程序语言,达到远端控制及网际自动化控制的功能。本文以自动红绿灯控制为主题,所使用之PLC为国内永宏电机公司所制FBS-PLC,内含通讯模组,因此不需额外增购,且可由该公司网站免费下载及更新阶梯图软体(Winproladder)。二 永宏通讯协议2.1 主仆定位与通讯互动关系在永宏 PLC 的通讯结构上,永宏 PLC 是被定位为

4、仆系统( SLAVE ),而任何与永宏 PLC联机的外围设备都为主系统( MASTER ),也就是说任何外围设备与永宏 PLC 之间的通讯都是由主系统(外围设备)来主动发出命令,仆系统(永宏 PLC )只有在收到命令信息后才根 据该命令的要求响应信息给主系统,而不能主动发出信息给主系统。2.2永宏PLC通讯讯息格式永宏PLC的通讯信息格式无论是命令信息(主系统发出)或响应信息(仆系统发出)都可大概分为 6 个数据域位,如下图的范例:1) 开头字符(STX):ASCII码的开始字符STX的16进制码数为02H ,无论命令或响 应信息的开头字符都为 STX ,接收方以此来判断传输数据的开头。 2)

5、 仆站号码:为两位数的 16 进制数值,在永宏 PLC 通讯系统中的网络结构采用主仆系统在整个网络系统中只有一个主系统,但可以有 254 个仆系统,每个仆系统都有一个独一无二的站号,分别为1 FEH(站号0 则当作对所有仆系统作广播下命令),当主系统都对仆系统下命令时是以站号来指定由那个PLC,或所有PLC(广播时)来接收这个命令。在响应信息 时,仆系统会将自己的站号响应给主系统,以供主系统确认是它所指定的那个仆站(PLC)所送回的信息。3) 命令号码:为两位数的 16 进制数值,所谓命令号码是由主系统要求仆系统所执行的动作类型,例如要求读取或写入单点状态、填入或读取缓存器数据、强制设定、运转

6、、停止 .等,和站号一样,在响应信息时,仆系统也会将从主系统接收的命令号码原原本本地随同本文数据一块传回主系统。 4) 本文资料:本文数据可为 0 (无文本资料)500 个 ASCII 字符,在命令信息中此 字段数据用来指定命令所要运作或存取的对象 (地址)或要写入的数值。在响应信息中本字段的开头为一个错误码字符,在正常(没有错误)情况下此错误码必为字符 0 (30H ),其后跟着的才是要响应给主系统的状态或数值等本文数据。当有错误时,本开头字符不再是 0 ,取而代之的是错误码,同时其后不再有其它本文数据(即本文数据仅为一个字符的错误码)。 5) 校验码 (CHECKSUM) :校验码是将前述

7、 各字段的所有 ASCII 字符的 16 进制数值以纵式余数查核法LRC(Longitudinal Redundancy Check )计算产出一个 Byte 长度(两个 16 进制数值 00 FF )的校验码。当接收端收到信息后按照同样的计算方法则将 字段的所有字符算出其校验码,两个值相同表示传输的数据正确,否则就是有传输错误发生。本通讯协议 LRC 校验码的计算方法是将各 ASCII 字符的 16 进制数码值( 8 位长度)从头到尾按照顺序相加,但不考虑进位,因此最终结果仍为 8 位长度的校验码。 6) 结尾字符( ETX ):ASCII 码的结尾字符 ETX 的 16 进制数码为 03H

8、 ,无论命令或响应信息的结尾字符均都为 ETX ,当接收方收到 ETX 字符后便知道该次通讯已结束,可开始处理该命令或数据了。三 红绿灯控制阶梯图程序【程序说明】 1. 按下启动按钮X0交通灯开始工作,按下停止按钮X1,交通灯系统停止运行。2. 设东西方西车流量较小,红灯亮的时间为60秒,而南北方向车流量较大,红灯亮的时间为30秒。3. 东西方向的红灯时间就是南北方向的“绿灯时间绿灯闪烁时间黄灯时间”,反之,南北方向红灯,时间就是东西方向的“绿灯时间绿灯闪烁时间黄灯时间”。4. 黄灯亮时车和人不能再通过马路,黄灯亮5秒的目的是让正在十字路口通行的人和车有时间到达对面马路。5. 东西方向交通灯状

9、态变化规律:6. 南北方向交通灯状态变化规律:【阶梯图如下】四 VB.NET即时监控程序架构及程序设计PC借由RS232与PLC取得连线,通讯参数如下:9600,7,E,1,整个连线设定可参考Form1_Load()及btnStart_Click()段。即时监控如图一所示,当执行系统启动按钮时,桌面将呈现如图二图五所示,状态的侦测采用200ms定时触发的方式,依次读取Y0Y8,R0R1的即时状态,程序执行段参考Timer1_Tick()段,系统启动功能代码可参考Button2_Click()段,系统停止功能代码可参考Button3_Click()段图一 即时监控画面设计 图二 状态一 图三 状

10、态二 图四 状态三 图五 状态四五 结论随着网际网络的普及,远端监控已是必然的趋势,本文所提供PC与FBS-PLC间的连线,仅需在VB.NET程序中加入网际网络物件即可达到Internet的远距控制,亦可透过RS485界面达到远端即时监控。六 附录6.1 参考文献1 范堤商贸(上海)有限公司. 永宏可编程控制器使用手册I【硬件篇&指令篇】. 20102 范堤商贸(上海)有限公司. 永宏可编程控制器使用手册II【进阶应用篇】. 20106.2 VB.NET程序段Imports Public Class Form1 Dim i As Boolean = False Dim WithEven

11、ts RS232 As SerialPort Delegate Sub SetTextCallback(ByVal InputString As String) '声明一个代理 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Enabled = False Button2.Enabled = False Button3.Enabled = False TextBox.Enabled = False txtReceiv

12、e.Enabled = False For Each sp As String In SerialPort.GetPortNames() (sp) Next cmbCom.Sorted = True cmbCom.SelectedIndex = 0 End Sub Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click Dim mBaudRate As Integer Dim mParity As IO.Ports.Parity D

13、im mDataBit As Integer Dim mStopBit As IO.Ports.StopBits Dim mPortName As String Button2.Enabled = True mPortName = mBaudRate = 9600 mParity = Parity.Even mDataBit = 7 mStopBit = StopBits.One Me.txtReceive.Text = mPortName RS232 = New IO.Ports.SerialPort(mPortName, mBaudRate, mParity, mDataBit, mSto

14、pBit) Try RS232.Open() '打开串口 txtReceive.Text = RS232.IsOpen If RS232.IsOpen = True Then txtReceive.Text = "串口已连接“ txtReceive.ForeColor = Color.Green Timer1.Enabled = True btnStart.Enabled = False btnClose.Enabled = True cmbCom.Enabled = False End If Catch ex As Exception MessageBox.Show(ex.

15、Message) End Try End Sub Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click Button2.Enabled = False Button3.Enabled = False Try RS232.Close() '关闭串口 txtReceive.Text = RS232.IsOpen If RS232.IsOpen = False Then Timer1.Enabled = False txtRec

16、eive.Text = "串口未打开" txtReceive.ForeColor = Color.Red btnStart.Enabled = True btnClose.Enabled = False cmbCom.Enabled = True Button2.Enabled = False End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub '发送数据 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVa

17、l e As System.EventArgs) Handles Timer1.Tick If i = 0 Then i = 1 Try RS232.Write("_014409Y00004D_") Catch ex As Exception MessageBox.Show(ex.Message) End Try Else i = 0 Try RS232.Write("_014602R0000071_") Catch ex As Exception MessageBox.Show(ex.Message) End Try End If End Sub &#

18、39;触发接收事件 Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived Me.Invoke(New EventHandler(AddressOf Sp_Receiving) '调用接收数据函数 End Sub '接收数据 Private Sub Sp_Receiving(ByVal sender As Object, ByVal e As EventArgs) Di

19、m strIncoming As String Dim Y0, Y1, Y2, Y6, Y7, Y8, R0, R1 As String Dim Y00, Y01, Y02, Y06, Y07, Y08 As Integer Dim Mystr As String Try TextBox.Text = Str(Val(txtReceive.Text) + RS232.BytesToRead) If RS232.BytesToRead > 0 Then Threading.Thread.Sleep(100) '添加延时 strIncoming = RS232.ReadExistin

20、g.ToString '读取缓冲区中的数据 RS232.DiscardInBuffer() TextBox.Text = strIncoming Mystr = (strIncoming, 4, 2) If Mystr = "44" Then Y0 = (strIncoming, 7, 1) Y1 = (strIncoming, 8, 1) Y2 = (strIncoming, 9, 1) Y6 = (strIncoming, 13, 1) Y7 = (strIncoming, 14, 1) Y8 = (strIncoming, 15, 1) Y00 = Integ

21、er.Parse(Y0) Y01 = Integer.Parse(Y1) Y02 = Integer.Parse(Y2) Y06 = Integer.Parse(Y6) Y07 = Integer.Parse(Y7) Y08 = Integer.Parse(Y8) If Y00 = 1 Then OvalShape6.BackColor = Color.Red Else OvalShape6.BackColor = Color.Black End If If Y01 = 1 Then OvalShape4.BackColor = Color.Lime Else OvalShape4.BackC

22、olor = Color.Black End If If Y02 = 1 Then OvalShape5.BackColor = Color.Yellow Else OvalShape5.BackColor = Color.Black End If If Y06 = 1 Then OvalShape3.BackColor = Color.Lime Else OvalShape3.BackColor = Color.Black End If If Y07 = 1 Then OvalShape2.BackColor = Color.Yellow Else OvalShape2.BackColor = Color.Black End If If Y08 = 1 Then OvalShape1.BackColor = Color.Red Else OvalShape1.BackColor = Color.Black End If ElseIf Mystr = "46" Then R0 = (strIncoming, 7, 4) R1 = (strIncoming, 11, 4) Label4.Text = Val("&H" & R0) Label4.ForeColor = Color.Blue Label

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论