1- import { Converters } from "./converters" ;
2- import { AddressBoolean , AddressQuantity , AddressQuantityBooleans , AddressQuantityRegisters , AddressRegister , Booleans , DataFieldStrategy , Exception , Registers } from "./data-field-strategy" ;
1+ import { Converters } from "./converters" ;
2+ import {
3+ AddressBoolean ,
4+ AddressQuantity ,
5+ AddressQuantityBooleans ,
6+ AddressQuantityRegisters ,
7+ AddressRegister ,
8+ Booleans ,
9+ DataFieldStrategy ,
10+ Exception ,
11+ Registers
12+ } from "./data-field-strategy" ;
313
414interface FunctionCodeDetails {
515 readonly code : number ;
@@ -9,17 +19,66 @@ interface FunctionCodeDetails {
919}
1020
1121const allFunctionCodeDetails : ReadonlySet < FunctionCodeDetails > = new Set < FunctionCodeDetails > ( [
12- { code : 0x01 , description : 'Read Coils' , masterRequestStrategy : AddressQuantity , slaveResponseStrategy : Booleans } ,
13- { code : 0x02 , description : 'Read Discrete Inputs' , masterRequestStrategy : AddressQuantity , slaveResponseStrategy : Booleans } ,
14- { code : 0x03 , description : 'Read Holding Registers' , masterRequestStrategy : AddressQuantity , slaveResponseStrategy : Registers } ,
15- { code : 0x04 , description : 'Read Input Registers' , masterRequestStrategy : AddressQuantity , slaveResponseStrategy : Registers } ,
16- { code : 0x05 , description : 'Write Single Coil' , masterRequestStrategy : AddressBoolean , slaveResponseStrategy : AddressBoolean } ,
17- { code : 0x06 , description : 'Write Single Register' , masterRequestStrategy : AddressRegister , slaveResponseStrategy : AddressRegister } ,
18- { code : 0x07 , description : 'Read Exceptions Status' } ,
19- { code : 0x08 , description : 'Diagnostic Test' } ,
20- { code : 0x0f , description : 'Write Multiple Coils' , masterRequestStrategy : AddressQuantityBooleans , slaveResponseStrategy : AddressQuantity } ,
21- { code : 0x10 , description : 'Write Multiple Registers' , masterRequestStrategy : AddressQuantityRegisters , slaveResponseStrategy : AddressQuantity } ,
22- { code : 0x11 , description : 'Identify Device Server' } ,
22+ {
23+ code : 0x01 ,
24+ description : 'Read Coils' ,
25+ masterRequestStrategy : AddressQuantity ,
26+ slaveResponseStrategy : Booleans
27+ } ,
28+ {
29+ code : 0x02 ,
30+ description : 'Read Discrete Inputs' ,
31+ masterRequestStrategy : AddressQuantity ,
32+ slaveResponseStrategy : Booleans
33+ } ,
34+ {
35+ code : 0x03 ,
36+ description : 'Read Holding Registers' ,
37+ masterRequestStrategy : AddressQuantity ,
38+ slaveResponseStrategy : Registers
39+ } ,
40+ {
41+ code : 0x04 ,
42+ description : 'Read Input Registers' ,
43+ masterRequestStrategy : AddressQuantity ,
44+ slaveResponseStrategy : Registers
45+ } ,
46+ {
47+ code : 0x05 ,
48+ description : 'Write Single Coil' ,
49+ masterRequestStrategy : AddressBoolean ,
50+ slaveResponseStrategy : AddressBoolean
51+ } ,
52+ {
53+ code : 0x06 ,
54+ description : 'Write Single Register' ,
55+ masterRequestStrategy : AddressRegister ,
56+ slaveResponseStrategy : AddressRegister
57+ } ,
58+ {
59+ code : 0x07 ,
60+ description : 'Read Exceptions Status'
61+ } ,
62+ {
63+ code : 0x08 ,
64+ description : 'Diagnostic Test'
65+ } ,
66+ {
67+ code : 0x0f ,
68+ description : 'Write Multiple Coils' ,
69+ masterRequestStrategy : AddressQuantityBooleans ,
70+ slaveResponseStrategy : AddressQuantity
71+ } ,
72+ {
73+ code : 0x10 ,
74+ description : 'Write Multiple Registers' ,
75+ masterRequestStrategy : AddressQuantityRegisters ,
76+ slaveResponseStrategy : AddressQuantity
77+ } ,
78+ {
79+ code : 0x11 ,
80+ description : 'Identify Device Server'
81+ } ,
2382] ) ;
2483
2584export type StrategyResult = { object ?: Object , error ?: string } | undefined ;
@@ -48,10 +107,6 @@ export class FunctionCodes {
48107 return this . _getDescription ( code , '(UNKNOWN)' ) ;
49108 }
50109
51- private static _getDescription ( code : number , description : string ) : string {
52- return `${ code } = 0x${ Converters . byteToHex ( code ) } => ${ description } ${ this . isError ( code ) ? '(ERROR)' : '' } ` ;
53- }
54-
55110 static isError ( code : number ) : boolean {
56111 return ! ! ( code & 0x80 ) ;
57112 }
@@ -64,12 +119,16 @@ export class FunctionCodes {
64119 return this . _newDataFieldStrategy ( this . isError ( code ) ? Exception : this . slaveResponseStrategies . get ( code ) , dataFieldBytes ) ;
65120 }
66121
122+ private static _getDescription ( code : number , description : string ) : string {
123+ return `${ code } = 0x${ Converters . byteToHex ( code ) } => ${ description } ${ this . isError ( code ) ? '(ERROR)' : '' } ` ;
124+ }
125+
67126 private static _newDataFieldStrategy ( strategy : DataFieldStrategy | undefined , dataFieldBytes : number [ ] ) : StrategyResult {
68127 if ( strategy ) {
69128 try {
70- return { object : new strategy ( dataFieldBytes ) } ;
129+ return { object : new strategy ( dataFieldBytes ) } ;
71130 } catch ( e : any ) {
72- return { error : e . message } ;
131+ return { error : e . message } ;
73132 }
74133 }
75134 return undefined ;
0 commit comments