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:
@@ -27,7 +27,7 @@
|
|||||||
// ============================================================
|
// ============================================================
|
||||||
// MODBUS
|
// MODBUS
|
||||||
// ============================================================
|
// ============================================================
|
||||||
#define MODBUS_BAUD 115200
|
#define MODBUS_BAUD 9600
|
||||||
#define MODBUS_ADDR 1
|
#define MODBUS_ADDR 1
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|||||||
@@ -17,4 +17,6 @@ build_flags =
|
|||||||
-DUSBD_USE_CDC
|
-DUSBD_USE_CDC
|
||||||
-DHAL_PCD_MODULE_ENABLED
|
-DHAL_PCD_MODULE_ENABLED
|
||||||
-DUSB_CDC_TRANSMIT_TIMEOUT=3000
|
-DUSB_CDC_TRANSMIT_TIMEOUT=3000
|
||||||
|
-DCUSTOM_USBD_PID=0x5740
|
||||||
|
'-DUSB_PRODUCT_STRING="STM32 Virtual COM Port"'
|
||||||
-I include
|
-I include
|
||||||
|
|||||||
@@ -551,7 +551,8 @@ void loop() {
|
|||||||
|
|
||||||
ledSet(LED_BLUE, true);
|
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 okCount = 0, failCount = 0;
|
||||||
uint8_t lastErr = 0;
|
uint8_t lastErr = 0;
|
||||||
uint16_t lastErrReg = 0;
|
uint16_t lastErrReg = 0;
|
||||||
@@ -600,9 +601,9 @@ void loop() {
|
|||||||
if (lastErr) g_lastErr = lastErr;
|
if (lastErr) g_lastErr = lastErr;
|
||||||
|
|
||||||
char dbg[64];
|
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,
|
okCount, failCount, lastErr, lastErrReg,
|
||||||
SerialUSB.availableForWrite(), SerialUSB.available());
|
avStart, SerialUSB.availableForWrite(), SerialUSB.available());
|
||||||
mqtt.publish("growatt/shinelan/debug", dbg);
|
mqtt.publish("growatt/shinelan/debug", dbg);
|
||||||
|
|
||||||
ledSet(LED_BLUE, false);
|
ledSet(LED_BLUE, false);
|
||||||
|
|||||||
Reference in New Issue
Block a user