鄭偉

摘 要:田灣核電站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.
(作者單位:江蘇核電有電公司)