252301 Issue 2.0 - 第51页

GEM Manual for DEK Printers Capabilities I ssue 2.0 June 9th, 2011 page 51 of 156 The SPOOL ACTI VE state has two AND states: SPOOL L OAD and SPOOL UNLOAD. This mea ns that they operate independently , though sharing dat…

100%1 / 156
GEM Manual for DEK Printers Capabilities
Issue 2.0 June 9th, 2011 page 50 of 156
5.12.2 Spooling State Model
There are two major states of spooling: SPOOL INACTIVE and SPOOL ACTIVE. SPOOL ACTIVE
has two components: SPOOL UNLOAD and SPOOL LOAD. These are each broken into substates.
The POWER OFF and POWER ON parent states are common to all equipment subsystems. They are
shown here to illustrate the retention of spooling context during a power down situation.
NOTE: Disabling SECS communications does not affect the current spooling state since no messages
are generated until communications are subsequently enabled. Spooling is effectively frozen in this
case.
POWER OFF - The printer has lost power for any reason.
POWER ON - The printer is powered up.
SPOOL INACTIVE - This is the normal operating mode. No spooling occurs. The spool area is
empty. Primary SECS-II messages are transmitted normally.
SPOOL ACTIVE - All primary SECS-II messages ready for sending and for which spooling is
enabled (see S2F43) are directed to the spool area. All other primary messages, except Stream 1, are
discarded. The printer will attempt to send any secondary messages that are generated and discard these
messages should the attempt to send fail.
State Diagram:
SPOOL OUTPUT
PURGE
SPOOL
TRANSMIT
SPOOL
NO SPOOL
OUTPUT
SPOOL
NOT FULL
SPOOL
FULL
SPOOL
INACTIVE
POWER
OFF
POWER ON
SPOOL UNLOAD
SPOOL LOAD
7
8
3
1
2
4
5
6
SPOOL ACTIVE
Once communications are established, the host must initiate the spool unload sequence to restore full
functionality. Since the printer will deliver secondary messages, the host may inquire for information
or send commands as needed.
GEM Manual for DEK Printers Capabilities
Issue 2.0 June 9th, 2011 page 51 of 156
The SPOOL ACTIVE state has two AND states: SPOOL LOAD and SPOOL UNLOAD. This means
that they operate independently, though sharing data and some state change stimuli.
SPOOL LOAD - The SPOOL LOAD component enters messages into the spool area. It is divided into
two substates: SPOOL NOT FULL and SPOOL FULL. SPOOL NOT FULL is the default entry
substate of the parent state SPOOL LOAD.
SPOOL NOT FULL - As primary SECS-II messages are directed to the spool area, the printer will
write the SECS-II message to the end of the spool. Status variables SpoolCountTotal and
SpoolCountActual will be incremented each time a message is placed in the spool area.
SPOOL FULL - In this state, all of the allocated spooling area is filled. Choice of the following
options will be controlled by the setting of the equipment constant "OverWriteSpool." The first
message to be dealt with is that which could not be fitted into the spool prior to the transition from
SPOOL NOT FULL.
OverWriteSpool is True: The printer will delete as many of the "oldest" SECS-II messages
contained in the spool area necessary to make space for the new message and then add the
message to the spool area. The status variable SpoolCountTotal will be incremented whenever
a message is put in the spool area. The status variable SpoolCountActual will be adjusted to
keep an accurate count of the number of messages contained in the spool area.
OverWriteSpool is False: Any subsequent primary messages will be discarded. When a
message is discarded, SpoolCountTotal is incremented.
SPOOL UNLOAD - The SPOOL UNLOAD component of SPOOLACTIVE deals with movement of
messages out of the spool. It has an active substate (SPOOL OUTPUT) and a passive substate (NO
SPOOL OUTPUT). NO SPOOL OUTPUT is the default entry substate, since the printer is NOT
COMMUNICATING at the time spooling is initiated. When communications between printer and host
are restored, there is an opportunity for the host to recover spooled messages. No action is taken until
the host initiates the spool output process via the S6F23 (Request Spooled Data). The host has the
option to either receive the spooled messages (see substate TRANSMIT SPOOL) or discard all
messages in the spool (see substate PURGE SPOOL).
NO SPOOL OUTPUT - In this state, no messages are removed from the spool.
SPOOL OUTPUT - This state controls the removal of messages from the spool. Its substates are
TRANSMIT SPOOL and PURGE SPOOL.
TRANSMIT SPOOL - The host elects to receive all messages contained in the spool area. The printer
will keep track of the oldest message within the spool area. When communications are re-established
with the host and transmission of the spool area is started, the oldest message will be the first to be
transmitted, then the next oldest message, etc. There is no prioritisation of messages to be sent from the
spool. As each spooled message is successfully transmitted to the host, it is removed from the spool
area upon successful completion of the transaction. SpoolCountActual is decremented as each message
is removed from the spool. The printer will transmit messages only from the spool area until all
spooled messages have been completely transmitted to the host.
Flow control of the spool transmit process is achieved in two ways.
First, only one open transaction on the printer is allowed during spool unload. Thus, if a
message requires a reply, the printer will wait for that reply before transmitting the next
message. Messages that require no reply will be transmitted sequentially.
GEM Manual for DEK Printers Capabilities
Issue 2.0 June 9th, 2011 page 52 of 156
The second flow control method is to allow the host to limit the maximum number of messages
sent from the spool in response to the S6F23 request. An equipment constant
“MaxSpoolTransmit” can be set by the host to achieve this behaviour. If MaxSpoolTransmit is
set to five, for example, the printer will send the first five messages from the spool and then
transition to the NO SPOOL OUTPUT state, awaiting the next S6F23 request. There is no
event report generated when MaxSpoolTransmit is reached. The host is responsible for
determining this situation by a) counting the messages received, b) timing out waiting for the
next message, c) inquiring to the printer for the current value of the SpoolCountActual status
variable, or d) some combination of the above. If MaxSpoolTransmit is set to zero, the spool
will be transmitted completely in response to S6F23.
Normal spooling continues during the spool transmit process. If the SPOOL LOAD component
transitions to SPOOL FULL, it will not have any effect on the SPOOL UNLOAD component. Once
full, the spool cannot make the transition back to SPOOL NOT FULL except via the SPOOL
INACTIVE state. Space made available due to the spool unload process will not be used in this case.
When a multi-block message is to be transmitted from the spool, any required inquire/grant transaction
will be initiated. If the host's response denies permission to send the multi-block message, the printer
will discard that message and continue with the transmit process. This sequence will count as one
message in the MaxSpoolTransmit count.
There is one area where SPOOL LOAD and SPOOL UNLOAD may interact: When the spool is full
and OverWriteSpool is True. During the spool transmit process, spooled messages are being removed
and new primary messages are being written to the spool. These new messages are overwriting the
oldest messages available, unless the unload process has freed sufficient spool space.
There is a possibility that the unload and overwrite processes may compete for control of the same
message area. For example, if the spool holds messages ABCDE, with A oldest and E newest, A might
be sent to the host, B (and the space from A) overwritten by the new message F, C sent to the host, D
and E (and the space from message C) overwritten by G, etc. The loss of continuity may be
disorienting to the host program receiving the messages. It is expected that the unload process will be
fast relative to the generation of new messages, so that this occurrence will be rare.
If a communication failure occurs during the spool transmit process, spooling will continue as before
the transmit process began. However, the spool unload sequence will terminate.
PURGE SPOOL - The printer will discard all messages in the spool and, when the spool is empty,
zero SpoolCountActual.