3232 */
3333@ ApplicationScoped
3434public class PylonInverterRS485Processor extends Inverter {
35- private final static byte ADDRESS = 0x12 ;
3635
3736 public PylonInverterRS485Processor () {
3837 super ();
@@ -47,60 +46,64 @@ protected PylonInverterRS485Processor(final EnergyStorage energyStorage) {
4746 @ Override
4847 protected List <ByteBuffer > createSendFrames (final ByteBuffer requestFrame , final BatteryPack aggregatedPack ) {
4948 final List <ByteBuffer > frames = new ArrayList <>();
50- requestFrame .position (3 );
51- final byte adr = ByteAsciiConverter .convertAsciiBytesToByte (requestFrame .get (), requestFrame .get ());
52- final byte cid1 = ByteAsciiConverter .convertAsciiBytesToByte (requestFrame .get (), requestFrame .get ());
53- final byte cid2 = ByteAsciiConverter .convertAsciiBytesToByte (requestFrame .get (), requestFrame .get ());
54- final byte [] lengthBytes = new byte [4 ];
55- requestFrame .get (lengthBytes );
56- final int length = ByteAsciiConverter .convertAsciiBytesToShort (lengthBytes ) & 0x0FFF ;
57- final byte [] data = new byte [length ];
58- requestFrame .get (data );
59-
60- if (cid1 != 0x46 ) {
61- // not supported
62- return frames ;
63- }
6449
65- byte [] responseData = null ;
66-
67- switch (cid2 ) {
68- case 0x4F :
69- responseData = createProtocolVersion (aggregatedPack );
70- break ; // 0x4F Protocol Version
71- case 0x51 :
72- responseData = createManufacturerCode (aggregatedPack );
73- break ; // 0x51 Manufacturer Code
74- case (byte ) 0x92 :
75- responseData = createChargeDischargeManagementInfo (aggregatedPack );
76- break ; // 0x92 Charge/Discharge Management Info
77- case 0x42 :
78- responseData = createCellInformation (aggregatedPack );
79- break ; // 0x42 Cell Information
80- case 0x47 :
81- responseData = createVoltageCurrentLimits (aggregatedPack );
82- break ; // 0x47 Voltage/Current Limits
83- case 0x60 :
84- responseData = createSystemInfo (aggregatedPack );
85- break ; // 0x60 System Info
86- case 0x61 :
87- responseData = createBatteryInformation (aggregatedPack );
88- break ; // 0x61 Battery Information
89- case 0x62 :
90- responseData = createAlarms (aggregatedPack );
91- break ; // 0x62 Alarms
92- case 0x63 :
93- responseData = createChargeDischargeIfno (aggregatedPack );
94- break ; // 0x63
95-
96- default :
50+ if (requestFrame != null ) {
51+ requestFrame .position (3 );
52+ final byte adr = ByteAsciiConverter .convertAsciiBytesToByte (requestFrame .get (), requestFrame .get ());
53+ final byte cid1 = ByteAsciiConverter .convertAsciiBytesToByte (requestFrame .get (), requestFrame .get ());
54+ final byte cid2 = ByteAsciiConverter .convertAsciiBytesToByte (requestFrame .get (), requestFrame .get ());
55+ final byte [] lengthBytes = new byte [4 ];
56+ requestFrame .get (lengthBytes );
57+ final int length = ByteAsciiConverter .convertAsciiBytesToShort (lengthBytes ) & 0x0FFF ;
58+ final byte [] data = new byte [length ];
59+ requestFrame .get (data );
60+
61+ if (cid1 != 0x46 ) {
9762 // not supported
9863 return frames ;
99- }
64+ }
65+
66+ byte [] responseData = null ;
67+
68+ switch (cid2 ) {
69+ case 0x4F :
70+ responseData = createProtocolVersion (aggregatedPack );
71+ break ; // 0x4F Protocol Version
72+ case 0x51 :
73+ responseData = createManufacturerCode (aggregatedPack );
74+ break ; // 0x51 Manufacturer Code
75+ case (byte ) 0x92 :
76+ responseData = createChargeDischargeManagementInfo (aggregatedPack );
77+ break ; // 0x92 Charge/Discharge Management Info
78+ case 0x42 :
79+ responseData = createCellInformation (aggregatedPack );
80+ break ; // 0x42 Cell Information
81+ case 0x47 :
82+ responseData = createVoltageCurrentLimits (aggregatedPack );
83+ break ; // 0x47 Voltage/Current Limits
84+ case 0x60 :
85+ responseData = createSystemInfo (aggregatedPack );
86+ break ; // 0x60 System Info
87+ case 0x61 :
88+ responseData = createBatteryInformation (aggregatedPack );
89+ break ; // 0x61 Battery Information
90+ case 0x62 :
91+ responseData = createAlarms (aggregatedPack );
92+ break ; // 0x62 Alarms
93+ case 0x63 :
94+ responseData = createChargeDischargeIfno (aggregatedPack );
95+ break ; // 0x63
96+
97+ default :
98+ // not supported
99+ return frames ;
100+ }
101+
102+ frames .add (prepareSendFrame (adr , cid1 , (byte ) 0x00 , responseData ));
100103
101- frames .add (prepareSendFrame (adr , cid1 , (byte ) 0x00 , responseData ));
104+ frames .stream ().forEach (f -> System .out .println (Port .printBuffer (f )));
105+ }
102106
103- frames .stream ().forEach (f -> System .out .println (Port .printBuffer (f )));
104107 return frames ;
105108 }
106109
@@ -134,8 +137,6 @@ private byte[] createManufacturerCode(final BatteryPack pack) {
134137 // 0x92
135138 private byte [] createChargeDischargeManagementInfo (final BatteryPack pack ) {
136139 final ByteBuffer buffer = ByteBuffer .allocate (4096 );
137- buffer .put (ByteAsciiConverter .convertByteToAsciiBytes (ADDRESS )); // BMS ID
138-
139140 buffer .put (ByteAsciiConverter .convertShortToAsciiBytes ((short ) (pack .maxPackVoltageLimit * 100 )));
140141 buffer .put (ByteAsciiConverter .convertShortToAsciiBytes ((short ) (pack .minPackVoltageLimit * 100 )));
141142 buffer .put (ByteAsciiConverter .convertShortToAsciiBytes ((short ) (pack .maxPackChargeCurrent * 10 )));
@@ -156,7 +157,6 @@ private byte[] createChargeDischargeManagementInfo(final BatteryPack pack) {
156157 // 0x42
157158 private byte [] createCellInformation (final BatteryPack pack ) {
158159 final ByteBuffer buffer = ByteBuffer .allocate (4096 );
159- buffer .put (ByteAsciiConverter .convertByteToAsciiBytes (ADDRESS )); // BMS ID
160160 buffer .put (ByteAsciiConverter .convertByteToAsciiBytes ((byte ) pack .numberOfCells ));
161161
162162 for (int cellNo = 0 ; cellNo < pack .numberOfCells ; cellNo ++) {
0 commit comments