WINDOWS下上位机与PLC网络之间数据通讯的实现方案

分享到:
点击量: 202743

  一、引言

  PLC以其高可靠性、适应工业过程现场、强大的联网功能等特点,被广泛应用。可实现顺序控制、PID回路调节、高速数据采集分析、计算机上位管理PLC分散控制的集散管理系统,是实现机电一体化的重要手段和发展方向。

  WINDOWS操作系统以其图形用户界面、多任务、自动内存管理等特点,已取代了DOS操作系统的地位。WINDOWS操作系统为用户提供了API接口函数,但非专业开发人员难以掌握。VB作为WINDOWS下的应用软件开发平台以其易学好用的优点给程序员提供了强大的可视化编程工具。

  在微机与PLC之间构成的集散控制系统中,多数是由一台PC计算机与数台PLC之间形成1-N的通信模式。该模式系统中PLC负责现场高速数据采集、实现逻辑、定时、计数、PID调节等控制任务并通过串行通讯口向微机传送PLC工作状态机有关数据从而实现计算机对控制系统的管理,提高了PLC的控制能力的控制范围。使其从设备级的控制发展到生产线级乃至工厂级的控制,从而实现工厂智能化的目标。该集散控制系统中,PLC与微型计算机之间的通讯显得尤为重要。因此如何提高保证它们之间的通讯准确程度、可靠性及效率是通讯成功与否的关键技术之一,下面就对该关键技术做一些探讨。

  二、上位计算机与PLC之间的链接方式

  本文介绍的是上位机与多台PLC组成的多链系统,常用的连接方式有两种:

  方式一使用连接适配器较少,也不用信号转换,但若中间一台PLC出故障,其后续的PLC无法与上位机通讯。

  

 

  方式二虽然使用了信号转换,但可避免前级故障对后级的影响。

  

 

  三、上位计算机与PLC的链路通讯

  以OMRON公司CPM1A型PLC和上位计算机通讯为例,通讯协议如下:

  

 

  按上图顺序发送/接受命令。每次通讯发送/接受的一组数据称为一“帧”。帧由少于131个字符的数据构成,若发送数据要进行分割帧发送,分割帧的结尾用CR码(CHR(13))一个字符的分界符(分段字符)来代替终端。发送帧的一方具有发送权,发送方发送完一帧后,将发送权交给接受方。

  发送帧的基本格式为:

  @机号 识别码 正文 FCS *CR

  其中:@ 为帧开始标志

  机号 网络通讯中每一台PLC被分配给的**番号

  识别码 该帧的通讯命令码

  正文 用来设定命令参数

  FCS 帧校验和

  终端 命令结束符

  响应的基本格式为:

  @机号 识别码 结束码 正文 FCS *CR

  其中:@机号 识别码 正文等同发送帧意义

  结束码 返回命令结束有无错误等状态

  关于多于131个字符的分割帧这里不在赘述。

  四、通讯过程

  通讯开始先由上位计算机依次对网的PLC发出一串字符的测试帧命令。为充分利用上位机CPU的时间,可使上位机与PLC并行工作,在上位机等待PLC回答信号的同时,使CPU处理其它任务或线程。某PLC在接到上位机的一个完整帧以后,首先判断是不是自己的代号,若不是就不予理睬,若是就发送呼叫回答信号。上位机接到回答信号后,与发送测试的数据比较,若两者无误,发出可以进行数据通讯的信号,转入正常数据通讯,否则提示用户检查线路重新测试或通讯失败。

  五、上位计算机WINDOWS下的通讯程序设计

  上位机通讯软件是用VB开发的,因VB具有强大的图形显示功能,可以开发出界面良好的WINDOWS标准风格的图形用户界面。同时VB还提供了串行端口控件MSCOMM,程序员在利用该控件时,只需设置、监视其属性和事件,即可完成对串行口的初始化和数据的传输工作。

  Sub forml_load()

  Mscomml.comport = 1

  Mscomml.settings = "9600,n,8,1"

  End sub

  Sub commandl_click

  Mscomml.inputlen = 0

  If mscomml.portopen = false then

  Mscomml.portopen = true

  End if

  For I = 1 to n ;N为网络系统中的PLC个数

  If i<10 then

  S$ = "@"+"0"+str$(i)+"ts"+"abcd"

  Else

  S$ = "@"+str$(i)+ts"+"abcd" ;abcd为测试字符

  Endif

  … ;形成上位机测试命令数据块sedata$;

  Mscomml.output = sedata$

  Timerl_on = false

  Timetl.enable = true

  Do until (mscomml.inbuffercountáñ0)

  or (timerl_on = true)

  Domy = doevents()

  Loop

  Timerl.enable = false

  …

  Redata$ = mscomml.input

  If redata$ = sedata$

  … ;转入正常通讯数据处理

  Else

  Labell.caption = str$(i)+“测试通讯失败,检查线路后再测试”

  Endif

  Endsub

  六、PLC方的通讯设置

  计算机与PLC通讯的目的是实现计算机对PLC运行状态、数据区的监控、PLC工的管理并可用计算机编程。一般来说,在通讯过程中PLC是被动的,每一次通讯都由计算机发起与终止,但也可由PLC发起。

  通讯前需用外部输入设备在系统设定区域的DM6650-DM6653中进行通讯条件设定。

  通道地址 位 设定 功能说明