基于VBPLC串口通讯在背散射人体检查仪动作控制中的应用
              颜志国  沈天明  金洁 温亚珍
                公安部第三研究所
简介:本文介绍了三菱PLCX光背散射人体检查仪执行机构动作控制中的应用。在文中,针对三菱FX系列PLC,我们介绍了基于MSComm控件和MX Component控件的两种串口通讯协议。在PLC和电脑串口的硬件连接方式上,介绍了基于编程口连接方式以及基于FX2N-232BD三菱plc字符串截取拓展板的连接方式。在我们设备研发中,我们试验了这两种协议和硬件连接方式的四种不同组合,都能够满足预定的控制要求,实现了减少外围配件、简化布线和增加可靠性的目的。
关键词:PLC 串口通讯 编程口 FX2N-232BD
一. 应用背景
近年来,随着国内外分子的猖狂贩运活动,国内的查毒禁毒形势较为严峻,且毒贩越来越隐蔽狡猾的藏毒运毒手段,也对公安干警查毒缉毒的方式提出了更高的要求。根据实际情况的
要求,在公安部十一五和十二五科研计划的指导下,我所研发了基于X光背散射的人体藏毒检查仪,用于边防检查站和境内交通口岸过往人的快速甄别。
图一  X光背散射成像系统结构图
基于X光背散成像原理的人体藏毒检查仪结构原理图如图一,探测器(backscatter detector)放在X光源和被照物体之间。 X射线(X-ray)扫描采用飞点装置(fly-spot)X射线源经过静止准直缝(collimator),形成扇形束1fan beam),再经过旋转的圆盘(chopper whee
l),形成X射线笔形束2pencil beam),对物体(object)在扇形束方向即Z轴上进行扫描,结合Y方向的物体移动,可得到物体二维(y-z)扫描图象。
                图二  X光背散射检测机构示意图
在图二中,探测器由电动缸经过连杆机构带动,从下向上摆动,经过三个区域,分别是区域
1,区域2和区域3。区域1和区域3对应的是探测器刚启动和即将停止的工况,由于整套检测机构惯性较大,我们希望在这两个阶段,机构运动以较小的速度运动,避免冲击。区域2是工作区域,速度要大些,以保证从下向上的摆动过程在8s内完成。三个阶段的速度分别为V1V2V3。在从上到下的回程中,要求电机以匀速V4运行。
                        图三  控制箱按钮布置图
图三是未采用PLC控制前的控制箱按钮接线图。在研发中,我们对检测机构的控制方式进行
改进,采用上位机控制PLC方式结合变频器对伺服电机进行控制(如图四所示),PLC的输入输出端子定义如表1
            1  PLC输入输出端子设定
输入
X0
X1
X2
X3
X4
X5
X6
X7
X10
急停
匀速
变速
上行
下行
归零
上限
下限
零限
输出
Y0
Y1
Y2
Y14
Y15
Y16
Y17
Y20
Y21
制动
限位
归零
使能
零速
V1
V2
V3
V4
X5是归零操作开关,X6X7分别对应电动缸行程的上限位置和下限位置处的接近开关信号,X10是电动缸零点位置的接近开关信号。Y0是伺服电机制动信号,Y1是电动缸活塞到达上限位或下限位时的报警信号,Y2是活塞到达零点位置时候的提示信号,Y14是伺服器使能信号,Y15是电机零速钳位信号。
                      图四 PLC串口通信界面
二. 三菱PLC串口通讯中的二种常用的控件
这里我们介绍在三菱PLC控制中常用的两种控件,一个是MSComm控件,另外一个是三菱MX Component控件。
MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VCVBDelphi等语言中均可使用。
在VB6中采用MSComm编程时,先新建一个工程文件。添加Microsoft Comm Control 6.0组件,在窗体文件中拖拉加入MSComm控件并命名为MSComm1,设置好通讯协议后根据控制要求进行相应编程即可。
MX Component是三菱公司开发的用于三菱系列PLC以及触摸屏等产品和上位机串口通讯的一个控件,具有标准界面和自编界面两种方式。在电脑上安装MX Component控件后,运行VB6.0,新建项目文件,需要包含Actdefine.bas模块到项目文件中并在组件中选择要使用的Dll文件,相应的ACT控制被添加到工具箱。当上位机采用MX Component实现串口通信时,我们可以有两种选择,一种是根据所采用的具体的PLC的型号选择相应的控件,比如FX系列的PLC我们则调用ActFXCPU控件,A系PLC则调用ActACPU控件,通讯协议等在我们的程序中进行设置。另外一个选择就是选用与硬件无关的ActEasyIF控件,上位机与PLC之间的通讯协议通过MX  Component的communication setting utility  进行设定即可。
根据我们的PLC型号,我们采用ActFXCPU控制,选择工具栏上相应的标有“FXCom”的控件拖入到表单文件中进行相应编程即可。
MX Component的ACT控制常用属性有ActCpuType,ActPortNumber,ActBaudRate,ActDataBit,ActParity,ActStopBit,ActSumCheck,分别用于指定PLC类型,串口号,波特率,数据位数,奇偶校验,停止位以及和检验。
ACT控制常用功能为Open,Close,SetDevice,GetDevice,GetCpuType,SetCpuStatus。在后面的程序中将会说明。
下面,为了说明如何用串口通讯程序界面中的按钮来代替实际硬件配置中的按钮,我们以电动缸变速上行工况(X2=1,X3=1)为例,给出4种不同的组合方式下VB编写的串口通讯程序。
在利用控件和PLC进行通讯时,我们需要对PLC的特殊寄存器进行通讯协议的设置并在我们的程序中与之保持一致。我们设定M8002启动后D8121为0(PLC站号为0),D8120中通讯协议设置成H6881。
三. 基于编程口和串口的编程方式
三菱FX系列PLC和上位机的串口通讯可以采用两种方式,一种是通过编程电缆连接PLC的编程口和上位机串口来实现,另外一种是在PLCRS422端口插接RS422/RS232的转接板来实现。如图五所示。我们的PLCFX2N系,所采用的转接板是FX2N-232BD
            图五  FXPLC的编程口和FX2N-232BD转接卡
方案1、基于MSComm组件和编程口连接的编程
当采用编程口连接方式时,对PLC的字元件和位元件进行读写的命令见表2
                      表2  基于编程口的串口通讯命令
命令
命令字符
控制元件
备注
读元件
0
X,Y,M,S,T,C,D
读字/位元件状态
写元件
1
X,Y,M,S,T,C,D
写字/位元件状态
置位
7
X,Y,M,S,T,C
位元件置位
复位
8
X,Y,M,S,T,C
位元件复位
通信格式为:起始符+命令字符+首地址+数据区+结束符+和校验。
求和操作的范围为STX之后的所有字符的ASCII码,求和的结果转换成16进制,取低2位。
在软元件读写操作中,地址转换公式为:Address=address*2+1000HAddress为命令字符串中的地址,address为软元件地址。
对位设备进行强制置/复位时,地址转换公式为Address=address*100H+(*)。 *号所代表值:C:14  M:8  T:6  Y:5  X:4  S:0。转换后的地址必须为四位,不足四位前面补零。下面给出源程序:
Private Sub UpVaSpeed_Click() '变速上下状态程序
Dim sd As String
Dim tmp As String
MSComm1.OutBufferCount = 0  ’清空输出缓冲区
MSComm1.InBufferCount = 0  ’清空输入缓冲区
MSComm1.InputLen = 0      读取接收缓冲区中全部的内容
GetAddr2 = AddrConvert("X2")  ’对X2软元件地址进行转换
GetAddr3 = AddrConvert("X3")  ’对X3位元件地址进行转换
CheckString2 = "7" + GetAddr2 + Chr(3)
CheckString3 = "7" + GetAddr3 + Chr(3)
    CmdCode2 = Chr(2) + "7"+ GetAddr2 + Chr(3) + SumChkCheckString2
    CmdCode3 = Chr(2) + "7"+ GetAddr3 + Chr(3) + SumChkCheckString3
    MSComm1.Output = CmdCode2
    MSComm1.Output=CmdCode3
End Sub
程序中AddrConvert是根据地址转换公式编写的地址转换子程序,SumChk是和校验子程序。
方案2 基于MX Component组件和编程口连接的编程。
对应的源程序如下:
Private Sub CommOpen_Click()                  'Open Comm
Dim lRet As Long
      ActFXCPU1.ActCpuType = CPU_FX2NCPU  ’设定PLC型号
      ActFXCPU1.ActPortNumber = PORT_1    ’设定串口端口号
      lRet= ActFXCPU1.Open                ’打开串口
      lRet = ActFXCPU1.SetDevice("X2", CLng(1)) ’位元件X21
      lRet = ActFXCPU1.SetDevice("X3", CLng(1)) ’位元件X31
End Sub
方案3 基于MSComm232BD扩充板的编程
这种方式下,对PLC位元件和字元件进行读写的命令分别是BTBW
  Private Sub ComSet_Click()  ’通讯协议初始化设置程序
MSComm1.PortOpen = False  ’关闭串口
MSComm1.CommPort = 1  ’设定串口号
MSComm1.Settings = "9600,N,8,1"  ’设置通讯协议
MSComm1.InputLen = 0  读取接收缓冲区中全部的内容
MSComm1.InBufferCount = 0  ’清空输入缓冲区
MSComm1.OutBufferCount = 0  ’清空输出缓冲区
MSComm1.InputMode=comInputModeText  以文本方式取回数据
MSComm1.PortOpen = True  '打开串口
End Sub
Private Sub UpVaSpeed_Click()  '变速上行

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。