论文部分内容阅读
摘 要:田湾核电站3、4号机组全范围模拟机(FSS)由俄罗斯ETC-GET公司总包建造,西门子分包模拟机T2000&TXS仪控模型虚拟仿真和2层人机界面实物模拟仿真。后备盘的棒位指示仪表是由ETC-GET公司按照3、4机组后备盘仪表外观仿造的。仿造仪表的接口和通讯协议与3、4号机组仪表不同,无法实现互换共用。并且在进行田湾核电站1、2、3、4号机组全范围模拟机备控室科研项目中,备控室盘台的棒位指示仪表、接口装置和通讯程序属于业主自己承担的职责。基于以上两点因素,需要对3、4号机组模拟机盘台中GICS(棒控棒位)系统的棒位指示仪表进行改造。本文介绍了一种基于串口服务器、UDP通信和共享内存的方法,实现了US3工艺模型平台和实体仪表通讯的方法,对全世界范围内使用相同模型平台的核电站模拟机具有借鉴意义。
关键词:全范围模型机;FSS;US3;后備盘;仪表;UDP通信;棒位指示仪表
1 后备盘系统结构简介
3、4号机组模拟机后备盘设备主要包括了AXIOMTEK ICO300嵌入式工业计算机、MOXA ioLogik以太网IO模块、VVFG控制器、T2000&TXS仪表(包括同期相位、频率和电压仪表)、NFME/GICS俄供仪表和MOXA交换机等硬件。AXIOMTEK ICO300是运行linux系统的嵌入式工业计算机,拥有RJ45和COM端口,其主要功能是接收IO-gate服务器发送的仪表控制信号,并将仪表控制信号通过网络或者串口发送给仪表控制器。
2 棒位指示仪表改造
由于3、4号机组模拟机的后备盘先于3、4号机组到达田湾核电站,同时3、4号机组的GICS棒位指示仪表属于核级仪表,采购费用较贵,因此俄罗斯ETC-GET公司在外观一致的基础上仿造了GICS的仪表。仿造的GICS仪表外观与机组仪表一致,但是接口和通讯方式都有所不同。仿造仪表带有地址拨码开关,通过接线端子使用RS485协议与ICO300嵌入式工业计算机通讯,ICO300系统中装有特有的通讯程序。
由于备控室的后备盘需要安装GICS的棒位指示仪表IP261,同时机组仪表和仿造仪表无法实现互换共用,并且仿造仪表比机组仪表的采购单价更贵、采购时间更长,因此需要开发一套解决方案,实现模拟机同IP261仪表的通信。
后备盘IP261仪表改造方案主要是使用2组MOXA NPort 5600-8-DT系列串口联网服务器(8个DB9端口)实现工艺模型的数据传递给NFME和GICS的仪表,硬件线路使用与机组仪表相匹配的接口,同时发送信号的数据结构是机组仪表可以解析的,以实现数值的正确显示。
3 实施过程
3.1 硬件实现
在1、2号模拟机的GICS主机中,IP261仪表连接的是研华公司的工作于电流环状态的PCL-741板卡,IP261仪表接收的是300b/s波特率的TTY232电流环信号。
在3、4号模拟机中,IP261仪表和MOXA串口服务器连接是通过四星公司出品的SC-20通讯转换器实现的,四星公司SC-20转换器可以双向转换RS232信号和TTY232电流环信号。将MOXA串口服务器的DB9端口连接SC-20转换器DB9端口(RS232信号),SC-20转换器可从MOXA的DB9端口取得工作电源;同时将SC-20转换器的DB25端口(TTY232信号)中的9号针脚(TXD+)和11号针脚(TXD-)分别连接IP261仪表的第3针脚(RXD+)和2号针脚(RXD-)。在实现MOXA同IP261仪表的线路连接后,还需要设置MOXA串口服务器为UDP server模式,并将RS232端口设置为300b/s波特率。
IP261仪表没有数据保持功能,需每1秒钟接收一次数据,数据内容是3个8位的二进制数(共3个字节),3个字节代表含义是颜色、状态和位置码。当IP261仪表接收不到数据时,仪表显示是长亮的红色“E”字母,表示信号丢失。二进制数对应的含义见下表:
在网络调试助手中设置好MOXA的地址和端口号后,通过网络调试助手向IP261仪表以1秒每次循环发送“0xe1 0xe4 0x36”时,IP261仪表显示长亮的绿色6。
3.2 软件实现
要将工艺模型中的数值传递给MOXA串口服务器,必须linux系统中的进程间通信机制:共享内存(Shared Memory)。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式,就是允许两个不相关的进程访问同一个逻辑内存。不同进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
在Linux系统中提供了一组函数接口用于使用共享内存,它们声明在头文件sys/shm.h中,本文中使用的函数分别是:
id=shmget(global_key,0,0),根据共享内存段名(global_key)返回内存标示符(id);
add=shmat(id,0,0)),根据内存标示符(id)返回一个内存地址指针。
其中global_key可以从工艺系统服务器中的/home/tw34/s3_globals文件中查到,shmat函数只是得到了仪表参数所在的global_key区域的地址,还需要取得仪表参数的偏移(offset)地址,add+offset才是仪表参数的绝对地址。offset地址需要在US3平台的dbm程序中执行lm 指令才能得到。
下面以第一个IP261仪表为例,查询仪表数值变量的绝对地址。
dbm> lm zlo30cwh01_ah07
zlo30cwh01_ah007 O globallo (V) 0ba7 l*1 xx (11) E13.5 false globallo F 2983
zlo30cwh01_ah007是第一个IP261仪表显示颜色和数值的数组,zlo30cwh01_ah007是一个11字节的一维数组,其地址是globallo地址+2983,globallo的数值在s3_globals中定义为316,2983是zlo30cwh01_ah007在globallo区域中的offset地址。
在Linux系统中使用C语言的实现过程如下:
(1)初始化:定义10组IP261仪表分别连接的MOXA服务器的IP地址和端口号;定义IP261的LED仪表颜色、数据和状态(长亮或者闪亮)区域的global数值和offset地址。
(2)获取地址和分配内存:
得到IP261的LED颜色和数值的内存地址。
led_id=shmget(led_global_key,0,0);led_global_add=shmat(led_id,0,0));
led_add=(unsigned char *)(led_global_add + led_offset);
得到IP261仪表的状态数据的内存地址。
blink_id=shmget(blink_global_key,0,0);blink_global_add=shmat(blink_id,0,0));
blink_add=(unsigned char *)(blink_global_add + blink_offset);
为LED颜色和数值、状态和输出结果分配内存,逻辑量在US3平台中占1个字节。
led = malloc(sizeof(unsigned char)×110);
blink = malloc(sizeof(unsigned char)×10);
output = malloc(sizeof(unsigned char)×30);
(3)循环复制共享内存数据、计算输出结果:
memcpy(led, led_add, sizeof(unsigned char)×110);
memcpy(blink,blink_add,sizeof(unsigned char)×10);
led2char(&(led[i*11]),blink[i],&(output[i*3]);
led2char属于自己定义的函数,其主要功能是根据每一个IP261仪表颜色和数值、状态计算出3个字节,并保存到output數组中。led2char函数中i的数值是从0到9,每一个IP261仪表颜色和数值都是一个11个字节的数组,因此led是一个的包含有110个字节的一维数组,而IP261仪表可接收的数据output是3个字节(颜色、状态和数值)。led2char在进行实参向形参传递地址时,每个led数组的起始地址必须是11的整数倍,output数组的起始地址必须是3的整数倍。
下面以zlo30cwh01_ah07为例,介绍output[0],output[1],output[2]如何计算而来。其中output[0](表示亮灯颜色)根据led[8]和led[9]计算而来;blink[0]=0时,output[1]= 0xe4(表示常亮),blink[0]=1时,output[1]= 0xe3(表示闪烁);led[0]至led[7]分别表示了“8”字的七段码和一个小数点,output[2]根据led[0] 至led[7]的真值情况计算而来。
①循环发送UDP数据
sendudp(&(output[i*3]),3*sizeof(unsigned char),i);
sendudp自己定义的函数,函数中设置了要创建的socket连接的类型、目标地址和端口号,并调用linux系统提供的sendto函数,将output字符数组发送出去。
②编译执行
在US3平台的load用户的主目录中编辑批处理脚本文件make_src,内容如下:
gcc -ggdb IP261_*.c -o IP261
直接执行make_src脚本即可生成IP261仪表通讯的可执行文件。若需要连同IP261仪表时,直接运行IP261可执行文件;若关闭通讯时,直接使用killall IP261指令关闭该进程。
4 结语
全范围模拟机是一种集合了微处理器、计算机、仪表与控制、通信技术、数据库、软件仿真等技术复杂的培训装置,也是一种特殊的仪控系统装置。本文虽然是针对模拟机后备盘的俄供特殊仪表提供了一套硬件装置和软件程序的解决方案,但是对于核电站其他含有操作系统和串口装置的仪控系统的改造都具有借鉴意义。
参考文献
[1]李强,周哲俊.田湾核电站3、4号机组设计改进[J].中国核电,2012,5(2):110-117.
[2]徐敏,王红霞,霍小东,等.田湾核电站3、4号机组的长周期燃料管理[J].原子能科学技术,2016,(1):131-136.
(作者单位:江苏核电有电公司)
关键词:全范围模型机;FSS;US3;后備盘;仪表;UDP通信;棒位指示仪表
1 后备盘系统结构简介
3、4号机组模拟机后备盘设备主要包括了AXIOMTEK ICO300嵌入式工业计算机、MOXA ioLogik以太网IO模块、VVFG控制器、T2000&TXS仪表(包括同期相位、频率和电压仪表)、NFME/GICS俄供仪表和MOXA交换机等硬件。AXIOMTEK ICO300是运行linux系统的嵌入式工业计算机,拥有RJ45和COM端口,其主要功能是接收IO-gate服务器发送的仪表控制信号,并将仪表控制信号通过网络或者串口发送给仪表控制器。
2 棒位指示仪表改造
由于3、4号机组模拟机的后备盘先于3、4号机组到达田湾核电站,同时3、4号机组的GICS棒位指示仪表属于核级仪表,采购费用较贵,因此俄罗斯ETC-GET公司在外观一致的基础上仿造了GICS的仪表。仿造的GICS仪表外观与机组仪表一致,但是接口和通讯方式都有所不同。仿造仪表带有地址拨码开关,通过接线端子使用RS485协议与ICO300嵌入式工业计算机通讯,ICO300系统中装有特有的通讯程序。
由于备控室的后备盘需要安装GICS的棒位指示仪表IP261,同时机组仪表和仿造仪表无法实现互换共用,并且仿造仪表比机组仪表的采购单价更贵、采购时间更长,因此需要开发一套解决方案,实现模拟机同IP261仪表的通信。
后备盘IP261仪表改造方案主要是使用2组MOXA NPort 5600-8-DT系列串口联网服务器(8个DB9端口)实现工艺模型的数据传递给NFME和GICS的仪表,硬件线路使用与机组仪表相匹配的接口,同时发送信号的数据结构是机组仪表可以解析的,以实现数值的正确显示。
3 实施过程
3.1 硬件实现
在1、2号模拟机的GICS主机中,IP261仪表连接的是研华公司的工作于电流环状态的PCL-741板卡,IP261仪表接收的是300b/s波特率的TTY232电流环信号。
在3、4号模拟机中,IP261仪表和MOXA串口服务器连接是通过四星公司出品的SC-20通讯转换器实现的,四星公司SC-20转换器可以双向转换RS232信号和TTY232电流环信号。将MOXA串口服务器的DB9端口连接SC-20转换器DB9端口(RS232信号),SC-20转换器可从MOXA的DB9端口取得工作电源;同时将SC-20转换器的DB25端口(TTY232信号)中的9号针脚(TXD+)和11号针脚(TXD-)分别连接IP261仪表的第3针脚(RXD+)和2号针脚(RXD-)。在实现MOXA同IP261仪表的线路连接后,还需要设置MOXA串口服务器为UDP server模式,并将RS232端口设置为300b/s波特率。
IP261仪表没有数据保持功能,需每1秒钟接收一次数据,数据内容是3个8位的二进制数(共3个字节),3个字节代表含义是颜色、状态和位置码。当IP261仪表接收不到数据时,仪表显示是长亮的红色“E”字母,表示信号丢失。二进制数对应的含义见下表:
在网络调试助手中设置好MOXA的地址和端口号后,通过网络调试助手向IP261仪表以1秒每次循环发送“0xe1 0xe4 0x36”时,IP261仪表显示长亮的绿色6。
3.2 软件实现
要将工艺模型中的数值传递给MOXA串口服务器,必须linux系统中的进程间通信机制:共享内存(Shared Memory)。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式,就是允许两个不相关的进程访问同一个逻辑内存。不同进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
在Linux系统中提供了一组函数接口用于使用共享内存,它们声明在头文件sys/shm.h中,本文中使用的函数分别是:
id=shmget(global_key,0,0),根据共享内存段名(global_key)返回内存标示符(id);
add=shmat(id,0,0)),根据内存标示符(id)返回一个内存地址指针。
其中global_key可以从工艺系统服务器中的/home/tw34/s3_globals文件中查到,shmat函数只是得到了仪表参数所在的global_key区域的地址,还需要取得仪表参数的偏移(offset)地址,add+offset才是仪表参数的绝对地址。offset地址需要在US3平台的dbm程序中执行lm 指令才能得到。
下面以第一个IP261仪表为例,查询仪表数值变量的绝对地址。
dbm> lm zlo30cwh01_ah07
zlo30cwh01_ah007 O globallo (V) 0ba7 l*1 xx (11) E13.5 false globallo F 2983
zlo30cwh01_ah007是第一个IP261仪表显示颜色和数值的数组,zlo30cwh01_ah007是一个11字节的一维数组,其地址是globallo地址+2983,globallo的数值在s3_globals中定义为316,2983是zlo30cwh01_ah007在globallo区域中的offset地址。
在Linux系统中使用C语言的实现过程如下:
(1)初始化:定义10组IP261仪表分别连接的MOXA服务器的IP地址和端口号;定义IP261的LED仪表颜色、数据和状态(长亮或者闪亮)区域的global数值和offset地址。
(2)获取地址和分配内存:
得到IP261的LED颜色和数值的内存地址。
led_id=shmget(led_global_key,0,0);led_global_add=shmat(led_id,0,0));
led_add=(unsigned char *)(led_global_add + led_offset);
得到IP261仪表的状态数据的内存地址。
blink_id=shmget(blink_global_key,0,0);blink_global_add=shmat(blink_id,0,0));
blink_add=(unsigned char *)(blink_global_add + blink_offset);
为LED颜色和数值、状态和输出结果分配内存,逻辑量在US3平台中占1个字节。
led = malloc(sizeof(unsigned char)×110);
blink = malloc(sizeof(unsigned char)×10);
output = malloc(sizeof(unsigned char)×30);
(3)循环复制共享内存数据、计算输出结果:
memcpy(led, led_add, sizeof(unsigned char)×110);
memcpy(blink,blink_add,sizeof(unsigned char)×10);
led2char(&(led[i*11]),blink[i],&(output[i*3]);
led2char属于自己定义的函数,其主要功能是根据每一个IP261仪表颜色和数值、状态计算出3个字节,并保存到output數组中。led2char函数中i的数值是从0到9,每一个IP261仪表颜色和数值都是一个11个字节的数组,因此led是一个的包含有110个字节的一维数组,而IP261仪表可接收的数据output是3个字节(颜色、状态和数值)。led2char在进行实参向形参传递地址时,每个led数组的起始地址必须是11的整数倍,output数组的起始地址必须是3的整数倍。
下面以zlo30cwh01_ah07为例,介绍output[0],output[1],output[2]如何计算而来。其中output[0](表示亮灯颜色)根据led[8]和led[9]计算而来;blink[0]=0时,output[1]= 0xe4(表示常亮),blink[0]=1时,output[1]= 0xe3(表示闪烁);led[0]至led[7]分别表示了“8”字的七段码和一个小数点,output[2]根据led[0] 至led[7]的真值情况计算而来。
①循环发送UDP数据
sendudp(&(output[i*3]),3*sizeof(unsigned char),i);
sendudp自己定义的函数,函数中设置了要创建的socket连接的类型、目标地址和端口号,并调用linux系统提供的sendto函数,将output字符数组发送出去。
②编译执行
在US3平台的load用户的主目录中编辑批处理脚本文件make_src,内容如下:
gcc -ggdb IP261_*.c -o IP261
直接执行make_src脚本即可生成IP261仪表通讯的可执行文件。若需要连同IP261仪表时,直接运行IP261可执行文件;若关闭通讯时,直接使用killall IP261指令关闭该进程。
4 结语
全范围模拟机是一种集合了微处理器、计算机、仪表与控制、通信技术、数据库、软件仿真等技术复杂的培训装置,也是一种特殊的仪控系统装置。本文虽然是针对模拟机后备盘的俄供特殊仪表提供了一套硬件装置和软件程序的解决方案,但是对于核电站其他含有操作系统和串口装置的仪控系统的改造都具有借鉴意义。
参考文献
[1]李强,周哲俊.田湾核电站3、4号机组设计改进[J].中国核电,2012,5(2):110-117.
[2]徐敏,王红霞,霍小东,等.田湾核电站3、4号机组的长周期燃料管理[J].原子能科学技术,2016,(1):131-136.
(作者单位:江苏核电有电公司)