I have a BX-DM1E-10ED23-D that kept sending me email alerts that the MQTT data wasn't posting to the cloud, so I VPN'd into it. Seeing nothing really wrong other than it kept queuing new data points, I lazily tried a Mode change from DmD, RUN to PROGRAM. Now, when changing it from PROGRAM back to RUN, it says Low level hardware initialization failed.
OS 2.9.7, mode switch TERM. I don't see much wrong in the status logs, just one ST152 which refers to an I/O system checks RTU module's channel that's disconnected, that's true, and no big deal. What else can I try?
Interesting.
I dug into that and there is only one thing that could cause that error when returning to RUN mode: all of the TCP/IP stack packet buffers are in use. If you have a TCP client, TCP server, or UDP device in the project that is receiving packets but the PLC app isn't processing them, this can happen. There are some spots in the code where we forcibly purge them to prevent this issue, but it doesn't appear that we do that going from PROGRAM to RUN, we just check to see the PLC is healthy before going to RUN.
If you don't have anything like that in your program, then I'm wondering if there is some unidentified/expected network activity that is getting hung in the stack. As an example, one of the TCP server hangs we had was fixed by tweaking some stack internals, but even though it was only reported recently, the stuff we changed was there since Rel 1. We would only see the problem with radio modems that apparently would duplicate some frames in a way that caused the stack some serious heartburn. If there is another similar issue we haven't identified, it might cause the problem you are seeing.
I think I might add some network diagnostics to the next update. I don't generally leave things like that in production builds due to performance concerns, but it would allow us to track this before it caused the PLC to hang. Might be helpful in identifying the cause.
As for now, you could try to re-init the I/O or bump something small in the sysconfig and rewrite the program. Barring that, reboot.