Lote de Windows. Coloca los datos del puerto serie en una variable.
Tengo un hardware (controlador de batería) que envía el voltaje de la batería a través de un puerto serial. Es solo un valor de 4 dígitos + carácter de fin de línea (‘1232\r\n’) cada 5 segundos.
Necesito leer ese valor y, si está por debajo de un umbral, apagar la PC. Es una máquina antigua con Windows XP en la que solo se me permite usar CMD sin crear archivos temporales.
En mi PC de casa, he creado un entorno de prueba con dos puertos virtuales (utilizando la utilidad com2com) y un script de PowerShell que emula el hardware:
cls
$port = New-Object System.IO.Ports.SerialPort
$port.PortName = "COM4"
$port.open()
while (1) {
$port.Write("1000"+[char]13+[char]10)
$port.close()
Start-Sleep -Seconds 5
$port.open()
}
El script anterior debe recibir los datos y apagar la PC si el valor está por debajo del umbral. Pero no funciona.
@ ECHO OFF
MODE COM5 BAUD=9600 PARITY=n DATA=8 > nul
set tr=1100
FOR /F "usebackq" %%i IN (`TYPE COM5`) DO set x=%%i
IF %x% lss %tr% (ECHO El sistema se apagará
rem shutdown /s
)
Cuando ejecuto el script, simplemente se queda esperando eternamente.
davy.ai
Solución para leer el voltaje de la batería a través de un puerto serial y apagar la PC basado en un umbral en CMD
Para resolver este problema, necesitamos hacer algunas modificaciones al código existente. Aquí tienes una guía paso a paso:
Para leer el voltaje de la batería enviado a través del puerto serial, primero debemos configurar la comunicación. Ejecuta el siguiente comando en CMD:
Esto establece los parámetros de comunicación para el puerto serial. Asegúrate de reemplazar COM5 con el nombre correcto del puerto para tu configuración.
Luego, debemos leer los datos enviados a través del puerto serial. Podemos usar el comando
set /p
para leer los datos y almacenarlos en una variable. Aquí tienes el código actualizado:este código lee el valor del voltaje del puerto serial cada 5 segundos (basado en el intervalo de envío del hardware) y verifica si está por debajo del valor de umbral. si lo está, apaga el sistema.
nota: dado que el controlador de hardware no está conectado a la computadora, el código no recibirá ningún dato y el script esperará indefinidamente. para probar el script, debes conectar el controlador de hardware a la computadora y asegurarte de que envíe datos cada 5 segundos. set=”” voltage=”%data:~0,4%” if=”” %voltage%=”” lss=”” %tr%=”” (=”” echo=”” el=”” sistema=”” se=”” apagará=”” rem=”” shutdown=”” s=”” )=”” goto=”” loop=””
="" este="" código="" lee="" el="" valor="" del="" voltaje="" del="" puerto="" serial="" cada="" 5="" segundos="" (basado="" en="" el="" intervalo="" de="" envío="" del="" hardware)="" y="" verifica="" si="" está="" por="" debajo="" del="" valor="" de="" umbral.="" si="" lo="" está,="" apaga="" el="" sistema.="" nota:="" dado="" que="" el="" controlador="" de="" hardware="" no="" está="" conectado="" a="" la="" computadora,="" el="" código="" no="" recibirá="" ningún="" dato="" y="" el="" script="" esperará="" indefinidamente.="" para="" probar="" el="" script,="" debes="" conectar="" el="" controlador="" de="" hardware="" a="" la="" computadora="" y="" asegurarte="" de="" que="" envíe="" datos="" cada="" 5=""></com5
set voltage=%data:~0,4%
if %voltage% lss %tr% (
echo el sistema se apagará
rem shutdown /s
)
goto loop
este código lee el valor del voltaje del puerto serial cada 5 segundos (basado en el intervalo de envío del hardware) y verifica si está por debajo del valor de umbral. si lo está, apaga el sistema.
nota: dado que el controlador de hardware no está conectado a la computadora, el código no recibirá ningún dato y el script esperará indefinidamente. para probar el script, debes conectar el controlador de hardware a la computadora y asegurarte de que envíe datos cada 5 segundos.>