estuve haciendo una bascula y los datos los enviaba a un s7-1200 y funcionaba bien por comunicación modbus
y ahora estoy intentando pasar los datos de una cámara pixy la posición X, Y al s7-1200 y funciona bien el problema es que el s7-1200 con los datos de la bascula era instantáneo y los datos de la cámara tardan unos 7 segundos cuando tendrían que ser instantáneos y no se por que tarda tanto en recibir los datos si alguien sabe por que pasa esto le agradecería su ayuda
No entiendo para que le envías cada 20 mseg datos mas alla que los reciba o no.
Esta claro que no lo hace. Amplia ese tiempo a digamos un conservador 1 seg = 1000 mseg a ver el comportamiento.
Solo observo eso.
NOTA menor:
Otra cosa a futuro que en este caso no modifica en nada tu código es que ts (la variable que comparas con millis() ) debe ser unsigned long no como la has definido del tipo long.
Descarto que cuando miras directamente los datos del Pixy éstos llegan a la velocidad que los consultas no? En este caso cada 200 mseg tienes coordenadas nuevas, es así?
Puedes poner el código de tu báscula como para comparar a ver que hay de diferente mas allá de la toma de datos.
mb.task();
if (millis()>ts+2000)
{
ts = millis();
mb.Ireg(Sensor_IREG, dato);
}
Acá actualizas cada 2 segundos y en el módulo Pixy cada 20 mseg. Ya recuerdo que lo cambiaste y el problema seguía.
Otra cosa que ahora observo es esta. Estas pidiendo cada 20 mseg y luego envias e imprimes. Como te dije en otro post cambia a 1000 o 2000 mseg pero la actualización de ts debes hacerse al final no mientras.
algo asi
mb.task();
if (millis()>ts+2000UL) {
mb.Ireg(Sensor_IREG1, posicion_X);
mb.Ireg(Sensor_IREG2, posicion_Y);
// estas presentaciones las haría por fuera de esta parte de código
Serial.print(" posicion x: ");
Serial.println( posicion_X );
Serial.print(" posicion y: ");
Serial.println( posicion_Y );
ts = millis();
}