Prepared by: Srini Komandur
IMPACT SYSTEMS Inc.
1075 E. Brokaw Rd.
San Jose, CA 95131
(408) 293-7000
April 14, 1988
The Host system may send actual setpoints to the actuator to be acted upon without question or modification. Such setpoints are usually in the form of percentages of full power or a delta position change. In this situation, the Host system will be responsible for all operator interface functions necessary for control of that actuator.
The Host system can send profiles and any other incidental data that will allow the Impact system to determine its own setpoints. In this situation, the Impact system is responsible for some or all of the operator interface functions necessary for control of the actuator.
If the Impact system detects an error in any message it receives, it will respond with the negative acknowledge character (lower case 'n'). Otherwise, it will respond with the positive acknowledge character (lower case 'y').
If the Impact system detects an error in a received message prior to reception of the entire message, the Impact system will wait until the entire message has been received before returning the negative acknowledge character. This wait interval is determined by a timer that is set by the Impact system whenever it detects the start of transmission character (lower case 's'). The length of this timer is a function of baud rate and will be as follows:
88.0sec for 600 baud
44.0sec for 1200 baud
22.0sec for 2400 baud
11.0sec for 4800 baud
5.50sec for 9600 baud
No single message should be so long that the time out will expire before the message is completely transmitted.
The Host system will not return either the positive or negative acknowledge character to the Impact system. If the Host system receives a message with a proper checksum, the transaction will be considered complete at that point. If the Host system receives a message with an improper checksum, the Host system may repeat the previous message sequence in its entirety or take whatever other action it deems appropriate. In this way the Host system will be in complete control of the number of times a re-transmission is attempted, and the Impact system will always be ready to accept or transmit any message regardless of any previous errors.
In the event of time out or excessive transmission repetition, it will be the responsibility of the Host system to restore communications. In the event of "light traffic" the superior station (i.e.Host) will send the "request for status" message to the Impact system once every 20 seconds. This is done in order to monitor the integrity of the link and the status of the Impact system.
For the purposes of the following discussion, the term "hex digit" will be defined as a quantity consisting of four binary digits. Prior to transmission across the link, a hex digit will be converted to an ASCII character according to the following table:
Hex Digit Ascii Char. Hex Digit Ascii Char.
0000 0 1000 8
0001 1 1001 9
0010 2 1010 A
0011 3 1011 B
0100 4 1100 C
0101 5 1101 D
0110 6 1110 E
0111 7 1111 F
The general purpose message format is as follows:
s(MMM)NNNBBBB......BBBBtWWWWx
Where
"s" Start of transmission character.
"(" Left delimiter for the message type number.
"MMM" 3 digit ASCII decimal number in the range 001 - 999 giving the message type.
")" Right delimiter for the message type number.
"NNN" 3 digit ASCII decimal number in the range 000 - 999 giving the umber of following characters to be expected before the end of message body character is received. This will be the number of B's in the above message format.
"B" Any character in the body of the message.
"t" End of message body character.
"WWWW" 4 digit ASCII hex number (most significant digit first) giving the 16 bit CRC checksum. The checksum will be computed using the 7 bit ASCII representation of all characters from the "s" through the "t" inclusive.
"x" End of tran
The characters "s", "t", "x", "n", "y" will never appear in the body of a message.
It is the responsibility of the Host system to determine if the data link is working properly and to notify the operator if any remedial action is necessary
.
6.CRC Checksum Generation Algorithm
The defining pseudo code for the CRC checksum routine is given below. All variables are 16 bits in length. Message data bytes are to be masked to their 7 bit ASCII form and extended to become 16 bit quantities with zeros in the nine most significant bit positions.
clear old CRC
get start address of data
DO WHILE (data still available for processing)
exclusive OR data with old CRC
get data byte (mask to 7 bits and zero fill msb)
save in XOR1
use L.S.four bits of XOR1 to access code in CTABL1
save in CODE1
shift XOR1 right four places
use L.S.four bits of result to access code in CTABL2
save in CODE2
exclusive OR CODE1 with CODE2
save in XOR2
logically shift old CRC right eight places
exclusive OR result with XOR2
save in old CRC
END DO
CRC GENERATION TABLES
+0 DATA 00000
+1 DATA 0C0C1
+2 DATA 0C181
+3 DATA 00140
+4 DATA 0C301
+5 DATA 003C0
+6 DATA 00280
+7 DATA 0C241
+8 DATA 0C601
+9 DATA 006C0
+10 DATA 00780
+11 DATA 0C741
+12 DATA 00500
+13 DATA 0C5C1
+14 DATA 0C481
+15 DATA 00440
+1 DATA 0CC01
+2 DATA 0D801
+3 DATA 01400
+4 DATA 0F001
+5 DATA 03C00
+6 DATA 02800
+7 DATA 0E401
+8 DATA 0A001
+9 DATA 06C00
+10 DATA 07800
+11 DATA 0B401
+12 DATA 05000
+13 DATA 09C01
+14 DATA 08801
+15 DATA 04400
All values in the above tables are in Hexadecimal representation.
Impact's system architecture has evolved to accommodate multiple moisture, caliper and weight control computers and actuators on a single paper machine. Because of this distributed architecture no single computer knows the overall system status, and actuator control messages must be routed to the appropriate control computer. In order to have a stable reference point within this complexity, the concept of "control groups" was adopted. A control group is defined to be a single profiler or a group of profilers wired together to act as a unit. A single computer may control more than one control group, and a single control group may require more than one control computer. The host computer should not need to know which computer(s) is(are) in control of which actuator(s). The host computer simply needs to know the number of the control group with which it needs to communicate.
When the host computer is performing the control calculations it will send a separate array of setpoint values to each control group. When the host computer requests status or a read back of setpoints it will send a separate request to each control group.
In order for command and request messages from the host to reach the appropriate Impact control group, the control group number must be included in each message. The addition of a control group number to each message constitutes one major difference between the current and old specification. A second major difference is in the messages that send status back to the host system is now furnished for each control group individually, and the concept of overall system status no longer applies.
Impact no longer supports the older style messages for new installations. If this causes great difficulty for a user of this specification, please contact Impact's San Jose, California office.
Refer to the main body of the specification. Note that the following message definitions should all be preceded by a Carriage Return (0x0D) and Line Feed (0x0A).
Field G in some of the definitions indicates the Control Group number. It is an ASCII digit in the range '1' - '9'.
Field NNN in some of the definitions indicates the length of the message in the range '000' - '999'. See the main part of the specification for information on how to calculate message length.
Field FFF in some of the definitions indicates the position number in ASCII of the first item in the array.
Field LLL in some of the definitions indicates the position number in ASCII of the last item in the array.
Field WWWW is the CRC in ASCII as defined in the main body of the specification.
s(006)011/G/FFF/LLL/tWWWWx
Host sends start & end data box #.
s(007)NNN/G/FFF/LLL/XX.X/...../XX.X/tWWWWx
Host sends profiles.
Where XX.X is an ASCII decimal number in the range 0 to 99.9 giving the percent moisture value for the moisture array position.
s(033)NNN/G/FFF/LLL/XX.X/...../XX.X/tWWWWx
Host sends controller generated power setpoints for a control group.
s(034)011/G/FFF/LLL/tWWWWx
Host requests power setpoints.
s(035)NNN/G/FFF/LLL/XX.X/...../XX.X/tWWWWx
Host receives power setpoints in response to the request.
s(053)NNN/G/FFF/LLL/XX.X/...../XX.X/tWWWWx
Host sends operator generated power setpoints for a control group.
Where XX.X is an ASCII decimal number in the range 0 to 99.9 giving the percent power setpoint for the corresponding control group zone.
s(030)005/G/M/tWWWWx
Host sends Local/Remote for a control group.
where M is
'0' Remote Mode.
'1' Local Mode.
s(015)005/G/M/tWWWWx
Host sends Control Mode for a control group.
s(016)003/G/tWWWWx
Host requests current control mode for a control group.
s(017)005/G/M/tWWWWx
Host receives current Control Mode for a control group in response to the request.
where M is
'1' Normal CD control mode.
'2' Electricity Minimize.
'3' Production Maximize.
'4' CD/MD dual mode.
'5' Average Loading.
s(036)017/G/FFF/LLL/XX.XX/tWWWWx
Host sends control group target.
Where XX.XX is an ASCII decimal number in the range 0 to 99.99 giving the percent moisture target for the corresponding control group.
s(037)017/G/FFF/LLL/XX.XX/tWWWWx
Host sends control group base power.
Where XX.XX is an ASCII decimal number in the range 0 to 99.99 giving the percent moisture base power for the corresponding control group.
s(038)017/G/FFF/LLL/XX.XX/tWWWWx
Host sends control group last scan average.
Where XX.XX is an ASCII decimal number in the range 0 to 99.99 giving the last scan average of the moisture scanner for the corresponding control group.
s(031)011/G/000/000/tWWWWx
Host requests current control group status.
s(032)030/G/FFF/LLL/F1/..../F10/tWWWWx
Host receives current control group status in response to the request.
where F1 ... F10 are
F1 = 1 = Control group was restarted since last status request.
F2 = 1 = Control group power supply breaker is tripped.
F3 = 1 = Control group is retracted.
F4 = 1 = Control group is in local mode (remote = 0).
F5 = 1 = At least one power supply is over temperature.
F6 = 1 = At least one DAC board has incorrect current level.
F7 = 1 = At least one main circuit breaker is tripped.
F8 = 1 = Last setpoint update rejected : system in local mode.
F9 = 1 = Last setpoint update rejected : invalid zone number.
F10 = 1 = Last setpoint update rejected : invalid zone data.
s(040)011/G/FFF/LLL/tWWWWx
Host requests current Auto/Manual status.
s(041)NNN/G/FFF/LLL/M1/..../Mn/tWWWWx
Host receives current Auto/Manual status in response to the request.
s(042)NNN/G/FFF/LLL/M1/..../Mn/tWWWWx
Host sends Auto/Manual status.
where M1 ... Mn are
'0' Automatic mode.
'4' Manual mode.
s(106)011/G/FFF/LLL/tWWWWx
Host sends start & end data box #.
s(107)NNN/G/FFF/LLL/XX.XX/...../XX.XX/tWWWWx
Host sends profiles (mils).
Where XX.XX is an ASCII decimal number in the range 0 to 99.99 giving the caliper value in thousandths of an inch for the corresponding caliper array position.
s(114)NNN/G/FFF/LLL/XXXX/...../XXXX/tWWWWx
Host sends profiles (micron or other units).
Where XXXX is an ASCII decimal number in the range 0 to 9999 giving the caliper value in micron or other units for the corresponding caliper array position.
s(133)NNN/G/FFF/LLL/XX.XX/...../XX.XX/tWWWWx
Host sends controller generated power setpoints for a control group.
s(153)NNN/G/FFF/LLL/XX.XX/...../XX.XX/tWWWWx
Host sends operator generated power setpoints for a control group.
s(134)011/G/FFF/LLL/tWWWWx
Host requests power setpoints.
s(135)NNN/G/FFF/LLL/XX.XX/...../XX.XX/tWWWWx
Host receives power setpoints in response to the request.
Where XX.XX is an ASCII decimal number in the range 0 to 99.99 giving the percent power setpoint for the corresponding control group zone.
s(130)005/G/M/tWWWWx
Host sends Local/Remote for a control group.
where M is
'0' Remote Mode.
'1' Local Mode.
s(136)018/G/FFF/LLL/XX.XX/tWWWWx
Host sends control group target.
Where XX.XX is an ASCII decimal number in the range 0 to 999.99 giving the caliper percent power target for the corresponding control group.
s(131)011/G/000/000/tWWWWx
Host requests current control group status.
s(132)030/G/FFF/LLL/F1/..../F10/tWWWWx
Host receives current control group status in response to the request.
where F1 ... F10 are
F1 = 1 = Control group was restarted since last status request.
F2= 1 = At least one power supply breaker is tripped.
F3 =1= Control group is retracted.
F4=1= Control group is in local mode (remote = 0).
F5 = 0 = Unused.
F6= 0 = Unused.
F7= 0 = Unused.
F8= 1 = Last setpoint update rejected : system in local mode.
F9= 1 = Last setpoint update rejected : invalid zone number.
F10=1 = Last setpoint update rejected : invalid zone data.
s(140)011/G/FFF/LLL/tWWWWx
Host requests current Auto/Manual status.
s(141)NNN/G/FFF/LLL/M1/..../Mn/tWWWWx
Host receives current Auto/Manual status in response to the request.
s(142)NNN/G/FFF/LLL/M1/..../Mn/tWWWWx
Host sends Auto/Manual status.
where M1 ... Mn are ASCII decimal number in the range 0 to 6.
'0' Zone in auto & no error.
'1' Zone in auto & open circuit.
'2' Zone in auto & short circuit.
'3' unused.
'4' Zone in manual & no error.
'5' Zone in manual & open circuit.
'6' Zone in manual & short circuit..
s(206)011/G/FFF/LLL/tWWWWx
Host sends start & end data box #.
s(207)NNN/G/FFF/LLL/XXXX.XX/...../XXXX.XX/tWWWWx
Host sends profiles (pounds).
Where XXXX.XX is an ASCII decimal number in the range 0 to 9999.99 giving the weight profile for the corresponding weight array position.
s(214)NNN/G/FFF/LLL/XXXXXX.XX/...../XXXXXX.XX/tWWWWx
Host sends profiles (gsm or other units).
Where XXXXXX.XX is an ASCII decimal number in the range 0 to 999999.99 giving the weight profile for the corresponding weight array position.
s(233)NNN/G/FFF/LLL/SXXXX.XX/...../SXXXX.XX/tWWWWx
Host sends controller generated delta setpoints for a control group.
Where delta setpoint is the incremental values from the current slice position.
s(253)NNN/G/FFF/LLL/SXXXX.XX/...../SXXXX.XX/tWWWWx
Host sends operator generated setpoints for a control group.
Where setpoint is the absolute value from the zero slice position.
s(234)011/G/FFF/LLL/tWWWWx
Host request setpoints.
s(235)NNN/G/FFF/LLL/SXXXX.XX/...../SXXXX.XX/tWWWWx
Host receives setpoints in response to the request.
Where XXXX.XX is an ASCII decimal number in the range 0 to 9999.99 giving the setpoint for the corresponding control group zone and S represents the sign of the data plus or minus.
s(230)005/G/M/tWWWWx
Host sends Local/Remote for a control group.
where M is
'0' Remote Mode.
'1' Local Mode.
s(236)018/G/FFF/LLL/XXXX.XX/tWWWWx
Host sends control group target.
Where XXXX.XX is an ASCII decimal number in the range 0 to 9999.99 giving the weight target for the corresponding control group.
s(231)011/G/000/000/tWWWWx
Host requests current control group status.
s(232)030/G/FFF/LLL/F1/..../F10/tWWWWx
Host receives current control group status in response to the request.
where F1 ... F10 are
F1, = 1 = , Control group was restarted since last status request.
F2, = 1 = , At least one power supply breaker is tripped.
F3, = 1 = , Control group is retracted.
F4, = 1 = , Control group is in local mode (remote = 0).
F5, = 0 = , Unused.
F6, = 0 = , Unused.
F7, = 0 = , Unused.
F8, = 1 = , Last setpoint update rejected : system in local mode.
F9, = 1 = , Last setpoint update rejected : invalid zone number.
F10, = 1 = , Last setpoint update rejected : invalid zone data.
s(240)011/G/FFF/LLL/tWWWWx
Host requests current Auto/Manual status.
s(241)NNN/G/FFF/LLL/M1/..../Mn/tWWWWx
Host receives current Auto/Manual status in response to the request.
s(242)NNN/G/FFF/LLL/M1/..../Mn/tWWWWx
Host sends Auto/Manual status.
where M1 ... Mn are
'0' Automatic mode.
'1' Automatic mode but zone disabled.
'2' Automatic mode but zone failed AND disabled.
'3' unused.
'4' Manual mode.
'5' Manual mode but zone disabled.
'6' Manual mode but zone failed AND disabled.
s(900)NNN/XXX...XXX/tWWWWx
Host sends grade code.
s(901)000tWWWWx
Host requests current grade code.
s(902)NNN/XXX...XXX/tWWWWx
Host receives current grade code in response to the request.
where "XXX...XXX" is the grade code. The grade code is a string consisting of any characters in the hexadecimal range from 20 to 7A inclusive, except 's', 't', 'x', 'y', or 'n'.
s(903)008/XXXX.X/tWWWWx
Host sends wire speed.
s(904)000tWWWWx
Host requests wire speed.
s(905)008/XXXX.X/tWWWWx
Host receives wire speed in response to the request.
Where XXXX.X is an ASCII decimal number in the range 0 to 9999.9 represents the wire speed.