接口類型
硬體接口
硬體接口是計算機主機的對外接口,計算機通過接口接入其他硬體設備。
軟體接口
軟體接口是數據交換的標準格式,它有兩層含義,其一是指軟體本身的狹義“接口”,比如各種軟體開發API等;其二則指的是人與軟體之間的互動界面,即用戶接口。
用戶接口
用戶接口是電腦程式與用戶通信的方式。主要有以下三種重要的用戶接口類型:
1. 命令語言。這是指導作業系統的一般方法;例如,在DOS,OS/2,或VAX/VMS作業系統中,用戶可以通過輸入命令dir獲取檔案列表。命令語言只有在不斷使用時才能很好地工作,以便用戶永遠不會忘記命令。
2. 選單。用戶從顯示列表中選擇一個項。選單是很少使用的軟體的理想選擇,但有經驗的用戶可能會發現它們太慢。
3. 圖形環境。用戶通過滑鼠選擇圖示(圖片)來執行操作。這種類型的環境很有生產力。例如,見Macintosh;Windows(微軟)。缺點是沒有簡單的方法來描述事情是如何完成的,你幾乎必須看到其他人去做。相比之下,命令語言中的命令可以寫在紙上,甚至可以嵌入到電腦程式中。
CAMAC
CAMAC( Computer Aided Measurement and Control)是一種具有數據通道特性的計算機輔助測量與控制系統,具有標準化程度高、數據傳送率高和系統規模大等特點,從80年代初開始在核物理、原子工程、工業自動化、航天測控等領域得到廣泛套用。目前,仍然有大量的CAMAC匯流排系統在工業控制和武器裝備領域中使用。隨著CAMAC設備在役時間的延長,加上溫度、濕度等環境因素的影響,其技術性能不斷下降,故障發生的頻率大大增加,嚴重影響設備的操作使用,需要研製狀態檢測與故障定位設備,以迅速確定CAMAC 模件的狀態,為排除故障提供可靠依據。
在故障檢測設備中,需要套用CAMAC匯流排控制單元,實現匯流排協定轉換和對各種模件控制。但由於其標準機箱價格昂貴且體積較大,而在故障檢測時僅針對單一模件,購買造價高昂的機箱就造成了資源的浪費。另外,由於CAMAC匯流排設備漸漸被淘汰,生產單位備件較少,採購困難。因此,對CAMAC匯流排控制單元進行簡化設計,可以減小設備規模,節約成本,增加靈活性。本文用分離TTL邏輯電路設計了CAMAC匯流排控制單元,可以由通用I/O接口實現匯流排的讀寫控制。
電路設計
實現CAMAC匯流排控制單元的功能,就是要實現對CAMAC模件的訪問和控制,即完成CAMAC 標準匯流排到通用PC機I/O接口信號的轉換。CAMAC標準匯流排的數據線主要信號如表1所示。
信號類別 | 信號名稱 | 符號 | 接點數 | 信號用途 |
---|
命令信號 | 站號 | N | 1 | 選擇模件 |
子地址選擇 | A1 A2 A4 A8 | 4 | 選擇模件的一個部分 |
功能選擇 | F1 F2 F4 F8 F16 | 5 | 確定在模件內完成的功能 |
定時信號 | 選通脈衝1 | S1 | 1 | 控制第一階段的操作 |
選通脈衝2 | S2 | 1 | 控制第二階段的操作 |
數據信號 | 寫信號 | W1-W24 | 24 | 向模件送信號 |
讀信號 | R1-R24 | 24 | 向模件送信號 |
狀態信號 | 請求注意 | L | 1 | 指示要求服務請求 |
忙 | B | 1 | 指示由命令選擇特徵的狀態 |
回響 | Q | 1 | 指示由命令選擇特徵的狀態 |
命令接受 | X | 1 | 指示模件能夠完成要求的動作 |
公用控制信號 | 初始化 | Z | 1 | 置模件處於某一確定的狀態 |
禁止 | I | 1 | 使信號持續期間的特徵失效 |
清除 | C | 1 | 清除暫存器 |
電源線 | +24V直流 | +24 | 1 | |
+6V直流 | +6 | 1 | |
-6V直流 | -6 | 1 | |
-24V直流 | -24 | 1 | |
0V直流 | 0 | 2 | 電源公共地線 |
功能選擇信號的產生電路圖如圖1所示。
程式設計
CAMAC命令一般可分為三種:公用控制命令、讀命令和寫命令。在模件檢測前,根據需要對4個電源繼電器進行控制,為不同的模件提供相應的工作電源,模件檢測完畢,自動斷開電源。繼電器控制比較簡單,只需要對相應的I/O接口執行寫操作即可,不單獨編製程序。
公用控制命令產生公用控制信號,優先權較高,被匯流排上的每個單元所接受,且自主產生S2信號。因此,只需要對相應的I/O接口執行寫操作即可,不單獨編製程序。
讀命令和寫命令的格式一致,一般標記為NA()F(),其中N是模件的站號,括弧內分別是執行命令的所需的子地址碼和功能碼,並伴隨相應的數據傳遞。由於本文所依託的課題中只做單模件測試,所以在命令有效期內,站號固定不變。根據電路設計中所使用的I/O接口,讀命令和寫命令的子程式如下:
charCAMAC_read(charvalue_A,charvalue_F,unsigned
chardata[4])
{
unsignedcharPA1,PB1;
unsignedintOut_Port;
if(value_A15||value_F31)
return-1;//非法命令
PA1=(value_A<>1)//A8,A4,A2,A1,F16,F8,F4,F2
PB1=(value_F<<7)|0x1;//F1,0,0,0,Z=0,C=0,I=0,N=1
Out_Port=PA1*256+PB1;
DO_WritePort(Card7200_1,0,Out_Port);
Command_start();//命令啟動信號
Delay(0.001);
DI_ReadPort(Card7200_1,0,data);//R1~R24,L,B,Q,X
return0;
}
charCAMAC_write(charvalue_A,charvalue_F,unsigned
intWrite_data)
{
unsignedcharPA1,PB1;
unsignedintOut_Port;
if(value_A15||value_F31)
return-1;//非法命令
PA1=(value_A<>1)//A8,A4,A2,A1,F16,F8,F4,F2
PB1=(value_F<<7)|0x1;//F1,0,0,0,Z=0,C=0,I=0,N=1
Out_Port=PA1*256+PB1;
DO_WritePort(Card7200_1,0,Out_Port);
DO_WritePort(Card7200_2,0,Write_data);//W1-W24
Command_start();//命令啟動信號
return0;