順序輸入/輸出

順序輸入/輸出

順序輸入/輸出模組(簡稱I/O模組)提供按建立的檔案順序存取檔案記錄的能力。這種順序在把記錄寫入檔案時即建立起來了。順序I/O模組還提供重運行點功能和各檔案之間共享存貯器區域功能。

基本介紹

  • 中文名:順序輸入/輸出
  • 外文名:Input/output sequence
  • 定義:按建立的檔案順序存取檔案的能力
  • 有關術語:輸入輸出
  • 套用:計算機
  • 領域:計算機學科
語言概念,組織,存取方式,記錄指針,IO狀態,分類,非格式化,格式化,套用範例,

語言概念

組織

順序檔案以這樣的方式來進行組織,即檔案中除了第一個記錄之外的每個記錄都有一個唯一的先行記錄;除了最後一個記錄之外,每個記錄均有一個唯一的後繼記錄。在建立檔案時,按照WRITE語句執行的順序就已經建立起了這些先行後繼的關係。這些先行後繼的關係一旦建立,便不能改變。唯一例外的情況是在檔案末尾增加記錄。

存取方式

在順序存取方式中,記錄存取的順序就是記錄最先寫入的順序。

記錄指針

當前記錄指針是在本手冊中使用的概念實體。該概念實體有利於指明在某一給定檔案中,下一個將要存取的記錄。當前記錄指針的概念對由輸出方式打開的檔案沒有意義。當前記錄指針的置值只受OPEN和READ語句影響。

IO狀態

如果在檔案控制體中選用FILE STATUS子句,則在執行OPEN,CLOIE、READ、WRITE或REWRITE語句期間,且在執行任何適用的USE過程之前,將一值放入一個規定的二字元數據項,向COBOL程式指出輸入/輸出的操作狀態。

分類

順序輸入/輸出語句的大致分為兩類:非格式順序輸入與輸出,格式化輸入與輸出。

非格式化

非格式化的順序I/O用來傳送二進制數而不做任何數據的編輯或者格式化。傳送數據的總量是I/O列表中元素的數量和數據類型的函式。
I/O列表必須包括在I/O語句中,一個I/O列表的錯誤歸結為是一種編譯的錯誤。
非格式化順序I/O語句的兩種格式是:
READ(U,ERR=L1,NED=L2)K
WRITE(U,ERR=L1,NED=L2)K
這裡U是指定的一個邏輯單元號
L1是指定的一個I/O錯誤分支(可選)
L2是指定的EOF分支(可選)
K是一個I/O列表
非格式化順序記錄的長度(如果需要的話)可大於128位元組。如果記錄長度大於128位元組,一些特殊考慮必須加以註明。
特殊說明
非格式化順序I/O處理器假定是128位元組的記錄,任何非格式化的一個順序I/O檔案的I/O把記錄指針定位在128位元組物理記錄的結束處,如果所讀的位元組數不同於原來的位元組數,就可能產生不希望的結果。
例如:假定幾個180位元組的記錄寫入一個非格式化順序檔案。並假定有100個位元組是從檔案中第180個位元組的記錄中讀,那么,這100個位元組的記錄被輸入並賦值給I/O列表中的元素。記錄指針則定位在下一個128位元組物理記錄的開始。注意,這將導致在隨後的讀語句中開始讀時,讀了額外的數據,而不會跳過額外的數據。
避免這種情況發生的最好方法是保持輸入記錄和輸出記錄長度一樣。如果遵守簡單的預防措施,則利用非格式化順序I/O就可以傳輸大於128位元組的記錄。

格式化

格式化的順序I/O用來傳送字元數據。數據的傳送是按順序的方法進行。為了控制數據的編譯和格式化,FORMAT語句必須被引用。
這種語句的兩種格式是有效的:
READ(U,f,ERR=L1,END=L2)K
WRITE(U,f,ERR=L1,END=L2)K
這裡U指定一個邏輯單元號
f指定FORMAT語句標號
L1指定I/O錯誤分支(可選)
L2指定EOF分支(可選)
K是I/O列表(可選)
每一個I/O記錄長度不能大於128位元組。企圖使寫出的記錄大幹127位元組,都會使所寫記錄截斷超過127位元組之後的部分。如果記錄相當長,以致超出內部緩衝區的長度,則會產生一個運行時的錯誤。
若要讀一個比127位元組還要大的記錄,則會導致在內部I/O緩衝區出現溢出,從而產生一個運行時的I/O錯誤。
TORTRAN的程式設計師有責任校驗記錄的長度是小於還是等於127位元組。記錄長度是I/O列表中元素的數量和數據類型的一個函式。
END=和ERR=語句的使用是可選擇的。ERR=分支僅僅在有關硬體I/O錯誤發生時使用。END=分支僅在當檔案出現條件結束時使用。如果省略這些選擇,那么硬體的錯誤和檔案的條件結束都將引起致命性的運行錯誤。這樣程式將被終止執行。

套用範例

搶答器
搶答器是常見的控制問題,某三人搶答器系統如右圖所示:主持人配備搶答“開始”和“復位”按鈕各一個,以及搶答信號燈一盞;三名參賽選手每人配有“搶答燈”和“犯規燈”,以及一個“搶答按鈕”。
順序輸入/輸出
三人搶答現場設備示意圖
1.搶答器控制要求
(1)當主持人給出題目,並按下搶答“開始”按鈕,此時搶答信號燈亮,提示各選手開始搶答。
當搶答結束後,主持人按下“復位”按鈕,此時搶答信號燈滅,主持人開始準備出下一道搶答題。
(2)在搶答信號燈亮後,先按下“搶答”按鈕的選手,他面前的“搶答”燈常亮,後按的選手無效。答題完畢,主持人按下“復位”按鈕,使該選手的搶答燈熄滅。
(3)在主持人的搶答信號燈未亮時,提前按下“搶答”按鈕的選手被判犯規,他面前的“犯規”燈常亮(犯規扣分),若有多名選手犯規,則只處罰第一個犯規的選手。主持人按下“復位”按鈕,可將該選手的“犯規”燈熄滅。
2.系統配置
本例可以選取歐姆龍小型機CPIH—XA40DR—A型PLC為控制器,其I/O分配表見下表,I/O接線圖如下圖所示。
順序輸入/輸出
I/O分配表
順序輸入/輸出
搶答器控制器I/O接線圖
3.PLC控制程式設計本例控制任務較簡單,適合採用經驗設計法來設計梯形圖。編程思路如下:
(1)程式的總體結構可分為“搶答有效”與“搶答犯規”兩部分,在此基礎上分別分析搶答燈與犯規燈的輸出條件。
(2)設計各選手的梯形圖時,在邏輯條件中需串人其他選手搶答燈的常閉觸點,旨在體現搶答器的基本功能——競時封鎖,即在已有選手搶答之後其他選手再按自己的按鈕將無效。犯規情況的編程與此相同。
(3)實現系統的總復位功能需在各邏輯行中串入復位按鈕的常閉觸點。
三人搶答器的PLC參考程式如下圖:
順序輸入/輸出
搶答器控制器程式實例

相關詞條

熱門詞條

聯絡我們