ShineLAN-X: USB PID-Fix + Modbus-Diagnose
USB PID auf 0x5740 (STM32 Virtual COM Port) gesetzt — Wechselrichter akzeptiert nur diesen PID und pollt den IN-Endpoint sonst nicht. Product-String ebenfalls auf Originalwert gesetzt. MODBUS_BAUD auf 9600 (Growatt-Standard, baud-rate ist bei USB CDC virtuell aber beeinflusst CDC Line Coding). usbReady-Check von == 127 auf >= 8 gelockert — verhindert dass ein voller TX-Buffer alle Sensoren sofort mit 0xFE abwürgt. Debug-String zeigt jetzt avS (Zyklusstart) und avE (Zyklusende) zur Diagnose des TX-Buffer-Verlaufs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -551,7 +551,8 @@ void loop() {
|
||||
|
||||
ledSet(LED_BLUE, true);
|
||||
|
||||
bool usbReady = (SerialUSB.availableForWrite() == 127);
|
||||
uint8_t avStart = SerialUSB.availableForWrite();
|
||||
bool usbReady = (avStart >= 8);
|
||||
uint8_t okCount = 0, failCount = 0;
|
||||
uint8_t lastErr = 0;
|
||||
uint16_t lastErrReg = 0;
|
||||
@@ -600,9 +601,9 @@ void loop() {
|
||||
if (lastErr) g_lastErr = lastErr;
|
||||
|
||||
char dbg[64];
|
||||
snprintf(dbg, sizeof(dbg), "ok=%u fail=%u err=0x%02X@%u av=%d rx=%d",
|
||||
snprintf(dbg, sizeof(dbg), "ok=%u fail=%u err=0x%02X@%u avS=%d avE=%d rx=%d",
|
||||
okCount, failCount, lastErr, lastErrReg,
|
||||
SerialUSB.availableForWrite(), SerialUSB.available());
|
||||
avStart, SerialUSB.availableForWrite(), SerialUSB.available());
|
||||
mqtt.publish("growatt/shinelan/debug", dbg);
|
||||
|
||||
ledSet(LED_BLUE, false);
|
||||
|
||||
Reference in New Issue
Block a user