质子治疗技术具有质子束能量大、穿透力强、对正常组织损伤小、精准治疗等特点,近年来已成为世界各国优先发展的肿瘤治疗新技术[1],目前国外已有多台质子治疗装置开放使用。上海质子治疗示范装置作为中国科学院上海应用物理研究所自主研发的首台国产质子医用加速器,由注入器、低能输运线、同步加速器储存环、高能输运线以及两个固定支架治疗室和一个旋转支架治疗室组成[2]。注入器产生的质子束经由低能输运线进入同步加速器升能引出到高能输运线再由束配系统分配给不同的治疗室使用。患者治疗所需不同能量的质子束,主要是通过控制位于同步加速器主环上的约30台动态电源电流,快速改变对应磁铁磁场实现。
和普通加速器储存环静态电源相比,动态电源对应的磁铁在磁场快速改变过程中,存在于磁铁极板的涡流效应导致了磁场严重滞后于电流,导致束流轨道的偏移,进而导致束流不能正常升能。为减少磁铁极板的涡流效应,对极板材料和结构重新设计,可以减少涡流效应带来的磁场滞后问题。但是耗费周期较长,成本高且效果有限。为此重新设计了磁铁电源控制系统,使其动态输出符合磁铁特性和能量需求,最终解决了涡流导致的磁场滞后问题。
1 设计思路为了避免磁场滞后效应,采用如图 1所示方法,在电源电流产生的磁场接近所需磁场时,产生一个周期的电流过调,迫使磁场加速到达设定值,减小磁场的滞后时间。这里电源电流产生的过调并不是普通意义上的由于电源系统欠阻尼特性产生的过调,因为电源系统的欠阻尼特性导致的过调是周期性衰减的,而磁场到达设定值后即要求电源电流稳定,不允许电源电流有周期性变化。所以电源电流要产生单周期过调可采用电流描点的方式,让电源电流跟随一个有单周期过调波头的特殊波形工作。
针对单个能量的磁铁动态电源工作单周期如图 1所示:
1) 电源电流上升到设定的Offset值后,等待升能触发信号;
2) T0时刻电源收到升能触发信号后,电源电流按一定斜率上升并微量过调再回到设定值(目标能量值);
3) T1到T2为引出时间。该能量治疗结束后,T2时刻电源收到引出结束触发信号后,电源再次过调,即按一定斜率上升到最大,再按一定的斜率回到Offset值消除磁铁涡流;
4) 对治疗所需不同能量,过调周期的时间dT与过调幅度dA也不相同。同时为了尽量减少患者治疗等待时间,在T2-T3约0.7 s的时间段内,上层控制系统需要将对应下一能量的电流波形数据传输到电源本地控制卡中,为下一周期的电源按照波形输出做好准备。
治疗过程中,对患者肿瘤部位照射剂量是通过加速器输出不同能量分层照射和累积实现,即周期性重复以上过程。每个周期的输出电流曲线对不同的质子束能量是不固定的,需预先测量获得。以描点方式为例,每台电源约有100个波形长度为4 M字节的浮点数组用于描述输出电流。
为实现以上电源控制过程,上层电源控制系统需解决如下问题:
1) 每个周期控制电流的约4 M字节的波形数据需要在T2-T3的0.7 s之内,由上层控制系统从数据库中读取后通过传输控制协议/因特网互联协议(Transmission Control Protocol/Internet Protocol, TCP/IP)传输到电源控制卡内存中。
2) 通过特定通讯协议和电源握手应答,并且数据需要校验。
3) 鉴于整个控制系统基于实验物理及工业控制系统(Experimental Physics and Industrial Control System, EPICS),以上功能需要建立在符合EPICS规范的IOC (Input Output Controller)程序框架内。
2 实现方法单台电源控制结构如图 2所示,整个动态电源控制系统则由数十个独立的SOFT IOC组成,一起运行在一个实体的嵌入式EPICS控制器中。
从图 2可以看出,系统的核心是EPICS IOC程序。标准的IOC程序通常由C程序编写,包括runtime database处理控制逻辑,device/record driver实现操作系统对被控设备的驱动[3]。对于网络等串行设备的控制,较为流行的方法是采用例如Streamdevice这样的协议解析驱动完成,用户只需将重心放在通讯协议的解析,繁琐复杂的底层任务切换和数据传输等过程则由标准模板实现[4]。只是针对动态电源控制这种定制性实时性要求高的需求,该方式已经完全无法满足需要。我们最终选择了基于PCASpy的EPICS IOC框架程序,在此基础上定制了多线程和数据传输程序,从而避免了用C语言大量修改或重新开发驱动,同时Python语言灵活的特性和多模块支持,加速了开发进程。
2.1 EPICS和PCASpy介绍PCASpy是瑞士PSI (Paul Scherrer Institute)的王晓强[5]编写的第一个Python实现的EPICS PCAS (Portable Channel Access Server)程序框架。其主要由caServer类、casPV类、casChannel类等基类构成,同时支持EPICS核心的CA协议、PV通道、Securityaccess及同步/异步驱动等功能。最新版本是2017/9月的0.65。我们遵循PCASpy的标准构建符合动态电源控制需求3的派生类即可生成标准的EPICS IOC和CA server程序[6],在此基础上进行的二次开发可将重心放在满足§1提及的上层电源控制系统需解决问题1和2。
2.2 基于PCASpy的动态电源控制程序通过class psDriver(Driver)语句构建PCASpy驱动类的派生类psDriver,该子类包含如表 1所示的方法。
电源驱动派生类中的send_slice函数是整个系统最复杂的部分,需完成将4 M字节的波形数据分割成多个1 K字节的片段并高速传输至电源,传输过程中完成对每片数据的封包和校验,且包含完整的异常处理功能。
整个IOC程序中除主线程以外,还创建并开启了两个线程tidpoll和tidrdb,分别用于数据查询和数据库操作:
self.tidpoll= threading.Thread(target=self.tpoll)
self.tidpoll.setDaemon(True)
self.tidpoll.start()
self.tidrdb=threading.Thread(target=self.trdb)
self.tidrdb.setDaemon(True)
self.tidrdb.start()
为了协调进程间通信和数据的互斥访问,定义了3个Thread的Event:
self.evtpollfast = threading.Event()
self.evtpollpause = threading.Event()
self.evtrdb = threading.Event()
分别对应于快速/慢速设备查询及数据库操作。区分对设备的快/慢速查询可以减轻网络和电源的通信负载,对于需要快速更新的数据,采用0.1 s的查询速度;对于设备更新较慢的状态量如电源温度,采用1 s或者更长时间查询。这样的目的是保证网络带宽和设备中央处理器(Central Processing Unit, CPU)资源有足够剩余,满足0.7 s内传输大数据波形的需要。
定义了一个Event和一个Rlock,配合Python的异常处理机制,用来实现IOC和电源的TCP/IP连线检测和断线后重连功能:
self.evtdcomok = threading.Event()
self.socklock = threading.RLock()
实现此功能后,对于网络/硬件故障引起的通讯中断可以在上层界面提示和记录,且故障恢复后软件自动恢复系统正常,以充分考虑医用设备智能化需求。
此外,PCASpy的特点是基于Python语言编程,Python提供的众多模块也减轻了编程负担,通过引入如下14个外部模块:sys、os、time、string、threading、socket、struct、pcaspy、random、optparse、OptionParser、MySQLdb、MySQLdb.cursors、hashlib,快速实现了如命令行参数选择、MD5数据校验、浮点数/二进制转换等功能。
2.3 数据库程序鉴于新版Centos操作系统采用MariaDB作为默认的Mysql数据库,其完全兼容Mysql数据库并遵循Mysql规范和协议[7]。因此针对治疗所需数据,我们定义了数据库表结构包括:索引、姓名、疗程、能量、MD5字段,分别采用:INT、VARCHAR、INT、MEDIUMBLOB和VARCHAR数据类型。
在Python 2.7版本中对MariaDB数据库进行操作需导入MySQLdb模块,如下简单操作即可实现对数据库Table的访问。
conn=MySQLdb.connect(host=ops.rdbip, user=", passwd=", port=3306, cursorclass=MySQLdb.cursors.DictCursor)
cur=conn.cursor()
conn.select_db(dbname)
cur.execute('select * from '+tablename)
为了避免相对较慢的数据库波形文件读取,我们采用了IOC启动时访问数据库并将数据存入IOC内存中的方式,保证IOC对电源的控制时间严格限制在T2-T3的0.7 s之内。一次性将数据库记录导入内存后,动态电源控制系统可根据治疗系统发送的病人姓名、能量值索引等查找到对应记录并将波形数据分片传输到动态电源,最终实现一个完整的波形下载和输出过程。
我们也编写了Python3.x版本的程序,值得注意的是3.x版本的Python中,数据库模块需采用PyMySQL,但是基本操作原理及方式和2.x版本Python类似,这里不再赘述[8]。
2.4 控制界面单台动态电源控制界面如图 3所示,GUI (Graphical User Interface)界面由工程数据管理(EDM)软件绘制,主要由电源设置、电源状态、电流显示、波形文件索引等功能显示区组成。在电源状态/设置部分,可以对电源参数如电流、门限等进行设置,显示IOC启动时间、网络连接状态等。电流显示区动态显示输出电流,波形索引显示区显示当前正在下装的波形文件信息等。从电流曲线可以清晰看出,输出电流的过调波形功能成功实现。
最终全部动态电源的控制由约30台Soft IOC实现。这些软IOC通过不同Linux进程同时运行在一台INTEL CPU为核心的嵌入式控制器上。通过设置操作系统启动文件并结合ProcServ、iocConsole等IOC专用管理软件,全部软IOC实现了开机自启动、运行状态信息实时监控等功能。为了进一步验证该控制系统可靠性,设计了如下流程进行长期稳定性测试:
1) 客户端软件随机产生电源波形、用户信息等内容写入数据库。
2) 电源IOC程序读取数据库获得电源波形并经MD5校验后下载到电源。
3) 软件记录每次电源波形下载耗时。
4)等待5 s后自动重复步骤1)-3)。
通过对一周测试数据分析可知传输单个波形耗时0.3-0.5 s。在实验室测试环境中,采用百兆交换机和以太网连接IOC控制器和多台电源。考虑到现场使用环境采用全千兆以太网,因此网络传输时间可进一步缩小,即单次波形传输时间可严格限制在设计目标之内。此外通过查看嵌入式控制器资源消耗情况可知单个IOC约消耗1.5% CPU计算能力,全部IOC运行时CPU占用率约为50%,控制器还有较多CPU计算余量。
4 结语通过对电源磁铁特性的研究,在EPICS控制系统架构下利用PCASpy强大的功能及Python多模块灵活特性的支持,设计的全新动态电源控制系统较好地解决了磁场涡流问题。目前质子治疗装置加速器部分已在上海嘉定瑞金北院完成安装和初步调试,引出束流已经达到70-250 MeV的设计指标。从机器调试和电源受控使用情况来看,该动态电源控制系统运行正常,控制功能和软硬件实时特性都达到设计指标并满足后期治疗系统需要。
[1] |
唐劲天, 左焕琮. 质子治疗肿瘤的现状与发展趋势[J]. 中华肿瘤杂志, 2001, 23(1): 7-10. TANG Jintian, ZUO Huanzong. Current situation and development trend of proton therapy[J]. Chinese Journal of Oncology, 23(1): 7-10. http: //kns. cnki. net/KCMS/detail/detail. aspx?filename=zhzl200101001&dbname=CJFD&dbcode=CJFQ |
[2] |
汤启升, 王志山, 李雪军. 上海质子治疗装置同步环真空布局及真空室设计[J]. 原子能科学技术, 2015, 49(Suppl 2): 529-532. TANG Qisheng, WANG Zhishan, LI Xuejun. Vacuum layout and chamber design for synchrotron ring of Shanghai proton therapy facility[J]. Atomic Energy Science and Technology, 2015, 49(Suppl 2): 529-532. |
[3] |
Kraimer M R. EPICS input/output controller (IOC) application developer's guide[EB/OL]. 2013-9-17. http://www.aps.anl.gov/epics/base/R3-14/12-docs/AppDevGuide/.
|
[4] |
Zimoch D. EPICS StreamDevice[EB/OL]. 2015-2-15. http://epics.web.psi.ch/software/streamdevice/.
|
[5] |
Wang X Q. PCASpy documentation[EB/OL]. 2017-7-2. https://pcaspy.readthedocs.io/en/latest/.
|
[6] |
张玉亮, 雷革, 徐广磊, 等. EPICS PCAS及其在BEPCⅡ上的应用[J]. 核技术, 2012, 35(10): 731-734. ZHANG Yuliang, LEI Ge, XU Guanglei, et al. EPICS PCAS and its application in BEPCⅡ[J]. Nuclear Techniques, 2012, 35(10): 731-734. |
[7] |
PetrovskyM. Linux数据库宝典[M]. 北京: 电子工业出版社, 2002, 179-200. Petrovsky M. Linux database collection[M]. Beijing: Publishing House of Electronics Industry, 2002, 179-200. |
[8] |
吴光华, 闫怀海, 陈又新, 等. 嵌入式数据库MySQL在兰州重离子加速器数字化电源上的应用[J]. 核技术, 2014, 37(5): 050401. WU Guanghua, YAN Huaihai, CHEN Youxin, et al. Application of embedded database to digital power supply system in HIRFL[J]. Nuclear Techniques, 2014, 37(5): 050401. DOI:10.11889/j.0253-3219.2014.hjs.37.050401 |