RS 232 Signal Break
J'ai reçu un signal RS232 périphérique de capture. et il fonctionne très bien.
J'ai besoin de l'aider à comprendre les données. En gros, nous avons acheté parce que nous avons affaire à une fin des années 80 le contrôleur de la machine qui utilise la communication série. Nous avons eu peu de chance, même en connaissant les paramètres de port.
De données que j'ai sous-évaluées en contrôle de la machine est à l'aide de la rupture du signal dans le cadre de son protocole. J'ai du mal à reproduire à l'aide de VB et de la MSComm. Je sais que pour faire basculer le signal break et sur et en dehors. Mais je ne suis pas sûr de ce que je suis censé faire avec elle. Je suis censé le laisser sur pour chaque octet de données que j'ai envoyer. Ou envoyer un octet de données, puis de basculer.
Aussi je ne sais pas comment je suis censé recevoir des données à partir du contrôleur. Dois-je passer un indicateur lorsque la pause est activée et puis quand il s'est éteint lire l'entrée?
OriginalL'auteur RS Conley | 2009-08-14
Vous devez vous connecter pour publier un commentaire.
Michael Burr description de la façon de briser les œuvres sont exactes. Souvent, les "casser" les signaux sont envoyés depuis largement plus d'un personnage le temps.
Ces jours-ci, "Pause" est rarement utilisé dans la série comms, mais l'utilisation la plus courante est comme un "pas cher" façon de fournir la synchronisation des paquets. "Pause" peut être envoyé avant un paquet commence, pour alerter le récepteur, un nouveau paquet est sur le chemin (et de permettre la remise à zéro de tampons, etc.) ou à la fin d'un paquet, pour signaler que plus aucune donnée n'est prévu. C'est une sorte de "méta-caractère" dans la mesure où il vous permet de garder la gamme complète de 8 ou 7 bits de valeurs pour les paquets de contenu, et vous inquiétez pas sur la façon de début ou de fin de paquet sont délimitées.
Pour envoyer une pause, généralement vous appelez SetCommBreak, attendre un laps de temps approprié (par exemple, autour de 2 millseconds à 9600 bauds) puis d'appeler ClearCommBreak. Pendant ce temps, vous ne pouvez pas envoyer quoi que ce soit d'autre, bien sûr.
Donc, en supposant que le protocole exige que "briser' au début du paquet, je le ferais (désolé pour le pseudo-code):-
Pseudo-code pour un récepteur est plus difficile, parce que vous avez à faire une charge d'hypothèses sur les paquets entrants format et les appels de l'API utilisée pour recevoir des pauses. Je vais l'écrire en C cette fois, et supposons l'existence d'un imaginaire de la fonction. WaitCommEvent est probablement la clé de la manipulation entrant Pauses.
Nous supposerons aussi fixe-longueur 100 octets des paquets avec "break" envoyé avant chaque paquet.
AVERTISSEMENT - totalement non testé, mais devrait vous donner l'idée...
Pour un exemple d'un protocole à l'aide de Pause, découvrez la DMX-512 d'éclairage d'étape de protocole.
Ceci répond à la première partie de la Fpo question, mais pas la seconde - comment savoir si la pause est activée/désactivée à partir de la DCE.
OriginalL'auteur Roddy
Un signal break est un caractère non valide. Lorsque le port RS-232 de la ligne est inactive, la tension est la "marque" (ou "1") de l'état (qui est de -12 volts si je me souviens bien). Lorsqu'un caractère est envoyé, le protocole permet de basculer la ligne à l'espace '' (ou '0') d'état pour un peu de temps (le bit de start) puis bascule le signal approprié pour les données (bits de données) et tous les bits de parité. Il présente ensuite la ligne dans un ralenti/marque (ou 1) de l'état pour un certain nombre de bits défini par le nombre de bits de stop, ce qui est généralement configurable (généralement de 1 bit d'arrêt dans mon expérience).
Car il y a toujours une certaine période de temps où la ligne sera dans une marque de l'état entre les caractères de données, le début d'un personnage peut toujours être reconnu. Cela signifie également que la plus longue période de temps que la ligne peut être dans un espace d'état est:
Une pause signal est définie comme l'exploitation de la ligne dans l'espace d'état pour plus longtemps que la période de temps - pas de données octet peut le faire, donc la pause "caractère" n'est pas vraiment un personnage. C'est un signal spécial.
Autant que quand vous en avez besoin pour émettre un signal break dépend entièrement sur le protocole utilisé.
OriginalL'auteur Michael Burr
"Pause" a été prévu pour quand la synchronisation est devenu complètement mélangé.
Essayer d'envoyer une belle et longue "pause" du signal (500 ms?) puis attendre un peu (50 ms?) ensuite, l'envoi de vos données.
OriginalL'auteur Marsh Ray
Pas vraiment une SORTE de question, mais permettez-moi de déterrer des choses de mon
long passé (années 1980 en fait)
jours comme un comms programmeur. Vous envoie normalement une pause en tenue de tous les bits de faible
ou élevée (selon vos comms matériel). Donc, à cause d'une pause
envoyer la valeur 0x00 à plusieurs reprises pendant environ une demi-seconde, ou la valeur 0xFF.
Vous avez oublié de début et de bits d'arrêt. Envoyer 0x00 ou 0xff ne sera pas la même que d'une pause.
En fait, pour la plupart des années 1980 matériel (IIRC) correctement, il l'était. Le matériel est de détecter une longue différence de tension, pas les bits individuels.
Pas vraiment à l'époque tout le monde était d'établir un lien entre leurs ordinateurs par tous les moyens possibles - comprendre les comms faisait partie d'être un programmeur, même si je n'ai spécialiser dans le pour un couple d'années.
Vous avez raison au sujet de l'allongement de la différence de tension, mais à cause de la start & stop bits pas de données valides personnage peut effectuer une pause du signal.
OriginalL'auteur
Vous devriez être en mesure de voir les données que le port d'envoi. Vous aurez besoin d'un câble null-modem, un ordinateur avec un port série (ou un serial-dongle USB) et un programme de terminal (tel que HyperTerminal sous Windows -- pas inclus dans Vista). Si vous configurez votre programme de terminal de manière satisfaisante (bonne vitesse, nombre de bits de données, le réglage correct de la start-stop, et le port correct) toutes les données s'affichent à l'écran.
Parfois, il est nécessaire d'appuyer sur la touche entrée pour commencer à voir les données. Vous pouvez modifier le réglage pour le programme de terminal au cours de l'essai pour voir si quelque chose change ("bruit" pour les données).
OriginalL'auteur Edmundo