版权归原作者所有,如有侵权,请联系我们

[科普中国]-顺序输入/输出

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

语言概念组织

顺序文件以这样的方式来进行组织,即文件中除了第一个记录之外的每个记录都有一个唯一的先行记录;除了最后一个记录之外,每个记录均有一个唯一的后继记录。在建立文件时,按照WRITE语句执行的顺序就已经建立起了这些先行后继的关系。这些先行后继的关系一旦建立,便不能改变。唯一例外的情况是在文件末尾增加记录。1

存取方式在顺序存取方式中,记录存取的顺序就是记录最先写入的顺序。1

当前记录指针当前记录指针是在本手册中使用的概念实体。该概念实体有利于指明在某一给定文件中,下一个将要存取的记录。当前记录指针的概念对由输出方式打开的文件没有意义。当前记录指针的置值只受OPEN和READ语句影响。1

I-O状态如果在文件控制体中选用FILE STATUS子句,则在执行OPEN,CLOIE、READ、WRITE或REWRITE语句期间,且在执行任何适用的USE过程之前,将一值放入一个规定的二字符数据项,向COBOL程序指出输入/输出的操作状态。1

顺序输入/输出分类顺序输入/输出语句的大致分为两类:非格式顺序输入与输出,格式化输入与输出。

非格式顺序输入与输出非格式化的顺序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字节的记录。2

格式化顺序输人与输出格式化的顺序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=分支仅在当文件出现条件结束时使用。如果省略这些选择,那么硬件的错误和文件的条件结束都将引起致命性的运行错误。这样程序将被终止执行。2

顺序输入/输出指令应用范例抢答器抢答器是常见的控制问题,某三人抢答器系统如右图所示:主持人配备抢答“开始”和“复位”按钮各一个,以及抢答信号灯一盏;三名参赛选手每人配有“抢答灯”和“犯规灯”,以及一个“抢答按钮”。

1.抢答器控制要求

(1)当主持人给出题目,并按下抢答“开始”按钮,此时抢答信号灯亮,提示各选手开始抢答。

当抢答结束后,主持人按下“复位”按钮,此时抢答信号灯灭,主持人开始准备出下一道抢答题。

(2)在抢答信号灯亮后,先按下“抢答”按钮的选手,他面前的“抢答”灯常亮,后按的选手无效。答题完毕,主持人按下“复位”按钮,使该选手的抢答灯熄灭。

(3)在主持人的抢答信号灯未亮时,提前按下“抢答”按钮的选手被判犯规,他面前的“犯规”灯常亮(犯规扣分),若有多名选手犯规,则只处罚第一个犯规的选手。主持人按下“复位”按钮,可将该选手的“犯规”灯熄灭。

2.系统配置

本例可以选取欧姆龙小型机CPIH—XA40DR—A型PLC为控制器,其I/O分配表见下表,I/O接线图如下图所示。

3.PLC控制程序设计本例控制任务较简单,适合采用经验设计法来设计梯形图。编程思路如下:

(1)程序的总体结构可分为“抢答有效”与“抢答犯规”两部分,在此基础上分别分析抢答灯与犯规灯的输出条件。

(2)设计各选手的梯形图时,在逻辑条件中需串人其他选手抢答灯的常闭触点,旨在体现抢答器的基本功能——竞时封锁,即在已有选手抢答之后其他选手再按自己的按钮将无效。犯规情况的编程与此相同。

(3)实现系统的总复位功能需在各逻辑行中串入复位按钮的常闭触点。3

三人抢答器的PLC参考程序如下图: