Hola Boris buenas tardes,
Estoy posteando en un hilo que no es el adecuado, pero de todas formas aquí veníamos con el tema...

Le he dedicado un buen tiempo a probar el tema de la interacción entre Modbus / ThingSpeak / Email para dilucidar la cuestión, y creo que he (si bien no lo pude resolver), tengo buena información para rastrear el problema:
Esta es la secuencia de las pruebas que hice:
1) Probé a comentar la sentencia NetTcpSplitOff(), tal como me sugeriste en tu anterior post. Nada cambió: el primer email sale bien, y los subsiguientes siguen sin salir.
2) Probé a colocar NetTcpSplitOff() "al comienzo", de mi proceso plcmain(), ya que lo estaba poniendo "en medio" de todas las inicializaciones de los distintos servicios. Por las dudas decidí probar a poner esa instrucción antes. Lo que me encontré es que tira un error de compilación "Invalid Expression, assumed zero", si coloco NetTcpSplitOff() antes de VirtualHmiInit() (what?!?). O sea: si no está primero la sentencia VirtualHmiInit() en el código fuente, NetTcpSplitOff() tira error. Si la pongo un renglón después, compila normal. De todas formas, este último problema no tiene nada que ver con el tema que estoy buscando resolver, que es la no salida de los emails; igual te lo comento, porque ahí me parece que hay un bug en el compilador STX Ladder.
3) Luego probé a comentar la sentencia ThingSpeakInit() que tengo en PlcMain() o sea inutilizando la salida a ThingSpeak ... y con esto los emails empezaron a salir normal !
4) Para seguir acorralando el tema, volví a habilitar ThingSpeakInit() en PlcMain(), pero comenté la instrucción que ejecuto una vez por minuto ThingSpeakUP(). Esta función lo que hace es armar el string y lo sube a ThingSpeak. Los emails anduvieron !
5) Pensando en una interacción entre SendMail() y ThingSpeak, hice que la subida a ThingSpeak NO se realice si en ese momento la variable Sending==1, o sea si hay un email "saliendo" en curso (cada mail tarda unos 10 segundos en ser enviado). Los emails dejaron de salir a pesar de esto.
6) Volví a inhabilitar ThingSpeakUp(), que quedó como único cambio, y los mails salen perfectamente.
Y hasta aquí llegué. La conclusión a la que llegué es que CON SOLO UNA VEZ que ese ejecute mi función ThingSpeakUP(), los emails dejan de funcionar. Momentáneamente, dejé inhabilitada la subida con ThingSpeakUp() para re-reconfirmar que los emails funcionan perfecto. Hice unas docenas de pruebas, y todos saliendo correctamente.
Transcribo a continuación mi función ThingSpeakUP(), para que la veas. No tiene nada "raro".
En mi opinión, hay alguna interacción en el firmware, que hace que cuando se hace una subida a ThingSpeak, algun flag o variable del firmware queda mal seteada, y eso hace que los emails siempre se aborten por timeout (error= -1):
ThingSpeakUP()
{
// Comprobar si no hay conexiones en curso con Thingspeak.
if(ThingSpeakSending == 0)
{
// Limpia las variables con el string que se enviara a ThingSpeak:
ThingSpeak_String1 = ""
ThingSpeak_String2 = ""
ThingSpeak_String3 = ""
ThingSpeak_String4 = ""
ThingSpeak_String = ""
// aquí armo 4 strings con los conjuntos de "fields". Luego se concatena todo para enviarse a ThingSpeak()
StrFormat(ThingSpeak_String1, 50, false, "field1=%d.%d&field2=%d.%d&field3=%d&", Var1,Var1a,Var2,Var2a,Var3)
StrFormat(ThingSpeak_String2, 50, false, "field4=%d&field5=%d&field6=%d&",Var3,Var5,Var6)
StrFormat(ThingSpeak_String3, 50, false, "field7=%d.%d&", Var7,Var7a)
StrFormat(ThingSpeak_String4, 50, false, "field8=%d", Var8)
// Concatena los 4 segmentos
StrFormat(ThingSpeak_String, 100, false, "%s%s%s%s", ThingSpeak_String1,ThingSpeak_String2,ThingSpeak_String3,ThingSpeak_String4)
// Aquí hace la subida de la info a ThingSpeak
if(HttpSendGet("/update?key=%s&%s", THINGSPEAK_APIKEY, ThingSpeak_String) == 0)
{
// Marca que hay un envío en curso
ThingSpeakSending = 1
}
}
return 0
}