2016-04-21 2 views
0

Cette question va être un peu vague et je m'excuse pour cela.Problème de synchronisation lors de l'écriture à partir d'un port série

J'ai un système qui est connecté à un port série et un script Python qui communique avec lui. Le script exécute le système, lit les données qu'il génère, écrit un fichier avec les données, arrête le système et répète la série de fonctions précédente pour un nombre défini d'itérations. En plus d'écrire des données du système dans le fichier, les scripts enregistrent également l'heure du système. Idéalement, chaque «exécution» du système devrait générer des données espacées uniformément (dans le temps). J'ai regardé les horodatages et ai tracé la différence entre chacun des points de données et j'ai obtenu ceci (l'axe Y est l'heure en mm: ss) Rate variation with iteration Je veux profiler en quelque sorte une section du code pour chaque itération pour comprendre pourquoi ces blips existent. Serait-il possible qu'un processus d'arrière-plan provoque ces anomalies? Si oui, comment puis-je affiner ce qui se passe à ces points?

Répondre

0

Je vais essayer de donner quelques conseils sur la façon de s'y retrouver. Je ne sais pas s'ils vont aider, mais au moins quelque chose à travailler avec. D'abord je voudrais essayer de trier si c'est le script python ou le système connecté qui se lève occationally. Portmon de sysinternals pourrait être d'une aide précieuse ici. Si vous êtes sur Windows c'est. Avec cela, vous pouvez voir exactement ce qui est envoyé et reçu sur le port série. Soit vous avez un protocole de type de réponse à la demande et le script demande des morceaux au système. Si vous sortez une demande sortir et puis aucune réponse pendant 2 secondes, alors l'appareil est notre problème, pas le script ou le système d'exploitation. Si quelque chose ne va pas avec le câblage ou le port série, vous pouvez le voir ici aussi.

Si le script est votre problème, cela peut vraiment être n'importe quoi. Les coutures hickups régulières. Vous pouvez l'utiliser à votre avantage. Si vous l'exécutez à la moitié de la fréquence. Est-ce que les hickups se produisent moitié moins souvent? Si c'est le cas, cela dépend du nombre de passages que vous faites. Peut-être une fuite quelconque. Fermez-vous tout lorsque vous recommencez? Comment le programmez-vous? Quelle est la précision du planificateur? 2sec n'est pas si longtemps. Je ne connais pas le profil de python, mais vous pouvez toujours écrire dans un fichier journal avec un horodatage pour chaque étape que vous faites pour trouver où s'arrête le code. Juste quelques pointeurs. espérons que ça aide