关键词:远程控制;分布式模块;高压
1 引言
直流高压电源在离子束流传输中,对离子束进行加速、偏转和引出。在实际操作中,需要频繁调节输出高压值,用电位器调节往往达不到输出电压调节精度的要求,也不易调节精确的输出高压值。由于高压电源在离子束流传输中的重要性,实现对高压电源的远程控制尤为重要。研华ADAM-4000系列分布式模块采用RS-485总线标准,有多种功能模块,其中有数字量输入输出、数模转换、模数转换和通信等功能模块。我们结合相应模块的功能,通过设计附加电路,实现了10KV高压电源的远程控制。通过主控计算机,实现了对直流高压电源远程开机、关机和故障复位等开关量操作,实时获取电源的运行状态,调节输出高压等远程控制功能。
2 RS-485总线概述
RS-485是总线型通信网络,支持半双工通信和全双工通信模式。RS-485以差分平衡方式传输信号,从根本上消除信号地线,具有很强的抗共模干扰能力,允许在一对双绞线上一个发送器驱动多个负载设备以及传输线成本低的特性。典型RS-485半双工通信网络如图1所示。在RS-485网络中,每个站点有固定的地址。同一时刻只能有一个站点与上位机建立数据通信,发送和接收数据,而其他站点则只能处于接收状态,以免发生数据碰撞错误。在标准的RS-485总线上最大允许接入32个控制节点。
图1. 典型RS-485半双工通信网络
在当前的自动化领域中,由于RS-485构成的控制网络具有接口简单、信号传输距离远(达到4000英尺)、传输速率高(最大为10M)和可靠性高等特点而被广泛采用。同时,由于网络技术的迅速发展,由RS-485总线构成的现场设备控制网络可以通过网关等技术接入以太网中,实现网络化控制的目的。
3 功能概述
主控计算机通过数字量输入输出模块和电源内部相应的驱动电路实现对高压电源远程开关机操作和电源运行状态实时采集;通过数模转换模块对高压电源的输出电压进行调节;通过模数转换获取电源的输出高压值和输出电流值。ADAM-4000系列的数字量输入输出模块、数模转换模块、模数转换模块采用RS-485标准总线,每个功能模块均可设置地址。在RS-485网络中使用的是主从模式,主控计算机作为一个主节点,其余的功能模块都是从节点。在组成控制系统后,主控计算机通过访问各功能模块的地址,发送控制指令字符串实现相应的控制功能。采用RS-232/RS-485转换器,可以通过将主控计算机的RS-232电平信号转换成RS-485总线标准信号,从而实现对各功能模块的控制。高压电源的控制原理如图2所示。高压电源远程控制系统中采用的模块分别介绍如下:
数字量输入输出模块ADAM4050:该模块具有7路数字量输入通道和8路数字量输出通道。其数字量输入信号为TTL电平或继电器节点,数字量输出为集电极开路输出,可驱动微型继电器。通过高压电源内部的控制接口驱动电路部分,实现对高压电源的开关机操作和运行状态获取。
模拟量输出模块ADAM4024:该模块可输出4路模拟量,分辨率为12位。具有电流输出和电压输出方式,采用电压输出方式时的输出范围是±10V,其输出的上升斜率可以通过编程调节。该模块的一路模拟量输出作为高压电源远程控制调节输出的电压基准。
模拟量输入模块ADAM4017:该模块具有6路差分信号输入通道和2路单端信号输入通道,信号输入模式为电流信号和电压信号,其电压信号的输入范围是±1V、±5V和±10V。其两路差分信号输入端分别采集高压电压的输出电压值和负载电流值。
隔离RS-232/RS-485转换器ADAM4520:实现RS-232电平信号到RS-485总线信号的转换,隔离电压为3000VDC。主控计算机以RS-485总线协议实现与各功能模块的控制通信。
用VisualBasic6.0集成开发环境开发高压电源的控制软件。其控制功能包括:高压电源的开机、关机和故障复位;实时获取电源运行状态;调节输出电压值和输出电压值的实时测量及通信端口检测等。通过在控制软件中设计特殊的定时器,主控计算机实时获取电源的运行状态和输出高压值。
图2. 高压电源的控制原理图
4 通信软件设计
主控计算机的控制软件主要包括主要包含通信模块、控制功能模块、数据显示与处理模块。其中控制功能模块实现对高压电源的远程开机、关机、故障复位、输出电压调节和电源运行状态显示等功能。通过通信控制软件实现与各功能模块的数据通信。当计算机端发送数据给高压电源时,安装在电源内部的相应的功能模块会返回对应的指令符,将执行结果显示在操作界面上。每一个控制指令指令中包含的地址和控制数据是以字符串的方式传输到相应的控制模块,各模块根据主控计算机发送的模块地址和指令相应的操作。
VB6.0提供了许多供用户选择的控件,其中MSComm32.OCX是用于串行通信的控件。MSComm通信控件具有丰富的用于串口通信的属性及事件,可以创建全双工、事件驱动、高效实用的通信程序。
Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。可以用它创建全双工、事件驱动、高效实用的通信程序。具体的来说,它提供了两种处理通信的方法:一是事件驱动(Event-driven)方法,一是查询法。
事件驱动方法,事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在串口接收到或发送完指定数量的数据时,或当状态发生改变时,MSComm控件都触发OnComm事件。OnComm 事件还可以检查和处理通讯错误。这种方法的优点是程序响应及时,可靠性高。每个MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。
查询方法,查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过查询MSComm 控件的某些属性,如CommEvent 属性和InBufferCount属性的值来检测事件和通信错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。
以上两种通信方式都可以达到数据发送和接收的目的,至于使用什么方式,必须根据实际的系统环境而定。对于高压电源的控制通信软件采用查询法来设计。通信子程序的功能是将主控计算机发送的命令字符串传输到RS-485总线上,不同的控制模块接收命令字符串,只有与命令字中所包含的地址信息相同的模块才执行相应的控制功能并返回执行结果的字符串,通信软件子程序清单如下:
Private Sub sendadv(Outstring, n)
MSComm1.CommPort = Comm_Port ’选择RS232通信端口
MSComm1.Settings = "9600,N,8,1" ’设置波特率、检验位、数据位、停止位
MSComm1.InputLen = 512 ’设置缓冲区大小
MSComm1.PortOpen = True ’打开串行口
MSComm1.RThreshold = n
MSComm1.Output = Outstring + Chr(13) ’发送以回车符结束标志的字符串
Do Until MSComm1.InBufferCount > 0
DoEvents
Error_Flag = Error_Flag + 1
If Error_Flag > 1000 Then
Error_info = "发送控制指令失败!"
ok = MsgBox(Error_info, vbOKOnly + vbExclamation)
GoTo Return1
End If
Loop
Instring = MSComm1.Input
… …
Return1:
MSComm1.PortOpen = False
End Sub
5 模块初始化
ADAM-4000系列模块都有相应的指令集以便控制软件实现相应的控制功能,各模块的指令字是ASCII字符的形式。控制软件以规定的指令格式将指令发送到相应的模块,就可以实现相应的控制功能。在控制软件中,首先对各功能模块进行初始化,包括对各模块的地址、波特率、输入输出模式和模块类型等参数进行设置。对模块进行设置的指令以字符串形式发送出去,以回车符为结束标志。在控制软件启动时对各模块分别初始化如下:
… …
Outstring = "%0101400600" ’设置4050的地址为01H,I/O模块,波特率为9600。
n = Len(Outstring)
Call sendadv(Outstring, n) ’调用通信子程序
Outstring = "%0202000603" ’设置4024的地址为02H,波特率为9600,输出模拟量上升斜率。
n = Len(Outstring)
Call sendadv(Outstring, n)
Outstring = "$027C0R32" ’设置4024的0号通道的电压输出范围是 -10V-+10V。
n = Len(Outstring)
Call sendadv(Outstring, n)
Outstring = "%0303080600" ’设置4017的地址为03H,模拟量输入范围是±10V,波特率为9600。
n = Len(Outstring)
Call sendadv(Outstring, n)
… …
6 结论
基于分布式模块的直流高压电源的远程控制系统,具有高分辨率的数模转换器和模数转换器,满足了对高压电源输出调节精度要求。由于采用RS485总线控制方式,系统具有较强的灵活性和可扩充性;由于采用隔离通讯控制方式,系统的安全性和可靠性得到提高。通过高压电源远程控制的实现,减少了实验人员直接在实验场地调节高压电源输出的操作,使实验人员通过主控计算机就可以了解高压电源的运行状态及输出高压值。经过反复的调试和可靠性测试,达到了电源远程控制的要求。本文作者创新点是利用分布式模块实现高压直流电源的高精度远程控制,保证了物理实验人员地操作安全,在工程实践中具有很好的推广价值。
参考文献:
[1]范逸之, 陈立元. Visual Basic与RS-232串行通信控制[M]. 北京:清华大学出版社, 2002.
[2]毛晓波.基于RS-485的分布式温度采集系统[J]. 微计算机信息, 2005, 9-1: 101-103
[3]B & B Electronics. RS-422 and RS-485 Application Note,1997
[4]石东海. 单片机数据通信技术从入门到精通[M]. 西安:西安电子科技大学出版社, 2002.
[5]ADAM 4000 Data Acquisition User’s Manual, http://www.advantech.com.cn/