利用串行通信实现计算机与PLC协同工作

2021-07-08 06:02张勇喜胡雯雯杨文华任少鹏
仪表技术与传感器 2021年6期
关键词:数据位自动测试命令

张勇喜,金 秀,张 帆,胡雯雯,杨文华,任少鹏

(沈阳仪表科学研究院有限公司,辽宁沈阳 110043)

0 引言

近年来,随着用工成本的不断上升,越来越多的企业开始使用自动化设备来替代人工,有些是直接引进全新的自动化设备,而有些是在现有的设备上进行自动化改进升级。光纤光谱仪是一种快速光谱测试仪器,可实现滤光片的光学性能快速检测。光纤光谱仪虽然测试速度块,但需要人工放置测试样品,测试效率大约为300片/h。为提高测试效率,降低人员劳动强度,本文对光纤光谱仪进行了自动化改造,增加了样品自动进给、数据打印、自动分拣等功能,实现了滤光片产品的自动化检测。由于光纤光谱仪是定型设备,底层硬件完全固化,所以不能通过改变测试仪器硬件来实现这些自动化功能。为实现产品的自动测试,采用PLC系统完成样品的进给、分拣等过程,然后编写中间控制程序来实现PLC系统和光纤光谱仪测试系统的信息沟通,实现两者的协调工作。

1 PLC串行通信模式及命令格式

本文负责样品进给等功能的PLC系统是一个独立的子系统,负责样品测试和数据处理的测试系统是一个以通用计算机为基础的独立子系统,中间程序要实现两者的信息沟通首先要解决计算机与PLC的通信问题。PLC通常具有多个通信接口[1-2],以便和触摸屏、上/下位PLC或计算机连接。串行通讯是PLC最常用的通信方式,常用的接口方式有RS232、RS422和RS485,其中RS232接口可以直接和计算机相连,使用范围最广。

PLC串行通信都有固定的格式[3],只有按固定格式发送到信息才能被正确执行。PLC会对每一条通信指令产生一个反馈信号,这个信号可能是需要传送的数据,也可能是命令执行的结果,计算机可以通过接收这个信号来获得所需数据或判断命令是否被正确执行。与PLC通信一般先要进行“握手”[4-5],然后才能进行正式的通信,当要断开联系的时候需要发送结束命令,以免发送错误信号导致PLC异动。表1列举了几个常用的通讯指令,更多信息可以查阅产品手册。

表1 PLC通信指令格式

2 计算机与PLC的交互信号

图1为自动测试条件下PLC系统和测试系统的工作流程,根据该流程,计算机和PLC之间需要4个交互信号,但实际上为了整个自动测试系统更稳定的运行,交互信号需要增加到9个(见表2)。首先是打印机的状态必须监控,不能在打印机出错的情况下还继续工作;其次是测试仪器需要定期校准;然后是联机通信情况的监控;最后是测试合格与否的信号必须分裂成2个,不能用1个信号的2种状态来标识合格与否。在这些信号中,MR8001为状态信号,用0/1表示,等于1表明打印机正常,等于0时表明打印机异常,PLC将暂停工作进程。MR8004为心跳信号[6],即持续的脉冲信号,当按一定频率持续输出,表明计算机和PLC联机正常。其它信号均为指令信号,上升沿有效,计算机和PLC接到信号后都要执行一定的任务。

图1 自动测试子系统工作流程

表2 计算机与PLC的交互信号

3 信号处理与传递

由于串行通信在某一时刻只能接收或者发送1个信息,而PLC每收到一条通信指令都会产生1个反馈信号,所以计算机与PLC通信必须以独占方式进行,1次只处理1个指令。从PLC读取位状态信息和发送脉冲信号都是周期性通信,可以通过定时器来完成[7-8]。而计算机向PLC发送位控制命令是随测试过程而产生的,是非周期性的。如果把位控制命令的发送放到相应的过程后面,则存在与周期性通信争抢串口的风险。虽然可以设置串口占用标志来避免错误通信,但这将导致串口占用时间延长,信号传递不畅。为解决这个问题,可以参照PLC端口的输入输出工作模式——“统一读入,统一输出”来处理计算机和PLC的信号传递问题。即将通信过程都集中放入一个定时程序中,先从PLC读取所需数据,然后再将需要输出的数据写入PLC。

由于PLC具有上升沿判定指令,而且控制程序在响应指令后会清除数据位,所以计算机只需将1写入PLC的数据位即可。根据PLC系统的工作流程,在一个测试周期内,测试合格与否和打印完成这2个指令只需要响应一次,所以计算机只需在这个时间段内将信号写入一次即可,多次写入将引发错误。此时,测试系统的主程序需要为每一个数据位设置一个写入标志,定时程序根据该标志输出数据。如果写入成功,则清除该写入标志,防止下次循环再次输出,引发错误;如果写入不成功,则保留标志,等待下次扫描循环时写入数据。由于定时扫描程序设置的扫描周期很短,所以在一个样品测试周期内有很多次机会向PLC写入数据,写入成功的概率非常高。

计算机没有直接的上升沿判断指令,从PLC获得的信息只是原始的位状态信息,需要转换方可成为正确的命令信息。定时程序不断地扫描端口,计算机会重复地读入0或者1,只有从0到1的上升时刻才是命令到来的时刻。为获得这一变化的时刻,协作控制程序给每一个数据位设置了一个全局变量,用于记录上次读取的结果,如果上次为0,本次新读入的为1,则该数据位发生0到1的跳变,命令标志有效。协作主程序则根据命令标志位来决定程序的运行。

4 程序实现

本文采用VB6编写协作控制程序,串行通信采用了MSComm控件[9-10],通信相关程序如下。

串口参数设置程序:

MSComm1.PortOpen = False

MSComm1.CommPort = 3

MSComm1.PortOpen = True

MSComm1.Settings = ″19200,e,8,1″

MSComm1.InputMode = comInputModeText

MSComm1.InputLen = 0

串口中断程序:

Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent

Case comEvReceive’接收事件

Serial_bck = MSComm1.Input’将接收内容存储到全局变量中

End Select

End Sub

串行通信输入输出定时处理程序如下:

Serial_in = MSComm1.Input ’清串口

Serial_bck = "" ’清空旧数据

MSComm1.RThreshold = 27 ’响应字节数

MSComm1.Output=″RDS MR800013″+Chr(13)

Delay 30 ’等待中断响应

Serial_in = Serial_bck ’读取响应数据

If Right(Serial_in,2) = vbCrLf Then

StrBit = Split(Serial_in,″ ″)

MR8000.Value = Val(StrBit(0))

If Last8010 = 0 And MR8010.Value = 1

Then ’0/1上升沿判断

MR8010UP = True

End If

Last8010 = MR8010.Value

If Last8011 = 0 And MR8011.Value = 1

Then

MR8011UP = True

End If

Last8011 = MR8011.Value

End If

Heart_Time = Heart_Time + 1 ’心跳信号

If Heart_Time = 5 Then

If Heart Then

MSComm1.Output=″ST MR8004″&Chr(13)

MR8004.Value = 1′’状态显示

Heart = False ’状态反转标记

Else

MSComm1.Output=″RS MR8004″&Chr(13)

MR8004.Value = 0

Heart = True

End If

Heart_Time = 0

End If

If WR_8000 Then ’数据写入标志为真

Serial_in = MSComm1.Input ’清串口

Serial_bck = ″″ ’清空旧数据

MSComm1.RThreshold = 4 ’响应字节数

If V_8000 Then

MSComm1.Output=″ST MR8000″&Chr(13)

Else

MSComm1.Output=″RS MR8000″&Chr(13)

End If

Delay 10 ’等待反馈

Serial_in = Left(Serial_bck,2)

If Serial_in=″OK″Then WR_8000=False

’写入成功则清除标志

End If

5 结束语

改造后的自动测试仪器基本不需要人工干预,可以实现滤光片的批量自动测试,测试效率可达到340片/h,比人工测试提高了10%。自动测试系统是由2个独立的子系统构成,让两者协调工作的关键在于信号的高效准确地传递。本文将通信任务集中放置在定时程序中,一方面短定时周期提高了信息传递的时效性,另一方面信息处理逐项以独占式完成提高了信息传递的准确性,一些时效性要求较高的系统可以借鉴此方法。由于定时程序会重复输入输出数据,所以在控制程序中设置了一些标志位和全局变量,通过这些标志位和全局变量来输入输出准确的命令信息,通过该方法确保了信息传递的准确性。

猜你喜欢
数据位自动测试命令
A320飞机大气数据的采集和计算在排故中的应用
只听主人的命令
JXG-50S型相敏轨道电路接收器自动测试台
关于某型雷达自动测试系统的几点认识和建议
移防命令下达后
微弱GPS信号避开比特跳变的捕获算法
一种适用于FPGA系统中的变速箱电路设计
减少调度自动化设备通讯串口丢包率的措施
这是人民的命令
基于ATE与BIT组合的NAMP自动测试与故障诊断系统设计