11import { Converters } from "./converters" ;
2- import { AddressBoolean , AddressQuantity , AddressQuantityBooleans , AddressQuantityRegisters , AddressRegister , Booleans , DataFieldStrategy , Registers } from "./data-field-strategy" ;
2+ import { AddressBoolean , AddressQuantity , AddressQuantityBooleans , AddressQuantityRegisters , AddressRegister , Booleans , DataFieldStrategy , Exception , Registers } from "./data-field-strategy" ;
33
44interface FunctionCodeDetails {
55 readonly code : number ;
@@ -20,16 +20,6 @@ const allFunctionCodeDetails: ReadonlySet<FunctionCodeDetails> = new Set<Functio
2020 { code : 0x0f , description : 'Write Multiple Coils' , masterRequestStrategy : AddressQuantityBooleans , slaveResponseStrategy : AddressQuantity } ,
2121 { code : 0x10 , description : 'Write Multiple Registers' , masterRequestStrategy : AddressQuantityRegisters , slaveResponseStrategy : AddressQuantity } ,
2222 { code : 0x11 , description : 'Identify Device Server' } ,
23- { code : 0x81 , description : 'Illegal Function' } ,
24- { code : 0x82 , description : 'Illegal Data Address' } ,
25- { code : 0x83 , description : 'Illegal Data Value' } ,
26- { code : 0x84 , description : 'Server Device Failure' } ,
27- { code : 0x85 , description : 'Acknowledge' } ,
28- { code : 0x86 , description : 'Server Device Busy' } ,
29- { code : 0x87 , description : 'Negative Acknowledge' } ,
30- { code : 0x88 , description : 'Memory Parity Error' } ,
31- { code : 0x90 , description : 'Gateway Path Unavailable' } ,
32- { code : 0x91 , description : 'Gateway Target Device Failed to Respond' } ,
3323] ) ;
3424
3525export type StrategyResult = { object ?: Object , error ?: string } | undefined ;
@@ -51,7 +41,7 @@ export class FunctionCodes {
5141 if ( code === undefined ) {
5242 return '' ;
5343 }
54- const description = this . descriptions . get ( code ) ;
44+ const description = this . descriptions . get ( code & ~ 0x80 ) ;
5545 if ( description ) {
5646 return this . _getDescription ( code , description ) ;
5747 }
@@ -71,7 +61,7 @@ export class FunctionCodes {
7161 }
7262
7363 static newSlaveResponse ( code : number , dataFieldBytes : number [ ] ) : StrategyResult {
74- return this . _newDataFieldStrategy ( this . slaveResponseStrategies . get ( code ) , dataFieldBytes ) ;
64+ return this . _newDataFieldStrategy ( code & 0x80 ? Exception : this . slaveResponseStrategies . get ( code ) , dataFieldBytes ) ;
7565 }
7666
7767 private static _newDataFieldStrategy ( strategy : DataFieldStrategy | undefined , dataFieldBytes : number [ ] ) : StrategyResult {
0 commit comments