Question

Je me demande si et comment il est possible de contrôler les lignes d'établissement de liaison RS-232 directement à partir de win32 (l'ancien C-API).

J'aimerais faire l'interface avec un matériel externe et deux simples lignes de données suffiraient à mes besoins.

Alors - existe-t-il une API pour win32 qui me permet de lire et d'écrire l'état des quatre lignes d'état? Dans une communication série normale, les lignes d'établissement de liaison sont automatiquement pilotées par l'UART (si l'établissement d'appoint matériel est activé).

Je me souviens que c'était trivial sous DOS. Il suffisait de programmer l'UART directement. Cette fonctionnalité a-t-elle survécu dans win32?

Était-ce utile?

La solution

Vous pouvez contrôler RTS et DTR en utilisant SetCommState () . Vous pouvez également configurer le matériel ou le pilote pour qu'il gère le flux de matériel (CTS et / ou DSR) ou à l'aide de SetCommMask () pour obtenir des événements lorsque ces signaux changent.

Vous trouverez ici un aperçu correct: http://msdn.microsoft.com/ en-us / library / ms810467.aspx

Notez que l'API et / ou le pilote Win32 Serial Comm peuvent être précis, soyez donc prêt à avoir à déboguer sur ce qui se passe sur le réseau.

Autres conseils

J'ai rencontré cette lorsque je devais faire un projet pour communiquer avec le port RS232. C'est un exemple complet sur la façon d'ouvrir le port, de définir certaines propriétés, y compris les délais, de lire / écrire et de fermer le port. Même si votre projet est probablement terminé, j'espère que cela restera utile, car il reste dans les archives de SO.

Vous pouvez toujours effectuer des types de programmation similaires uniquement pour accéder à du matériel protégé, ce qui vous obligera à implémenter un pilote de périphérique. Je suppose que cela est devenu plus facile depuis les années 1980, alors que je faisais le même type de travail.

Microsoft fait-il actuellement un échange matériel? Pendant de nombreuses années, NT, Win2000 et XP n’étaient pas des contacts dans le matériel. Au lieu de cela, lorsque le fifo a atteint un certain point, le pilote de périphérique modifie manuellement la ligne cts. Ce qui signifie qu'il était extrêmement simple de faire perdre des données au pilote de périphérique, de saisir une fenêtre avec la souris et de faire des cercles autour de l'écran par exemple (en prenant soin de bien prendre cette fenêtre du côté gauche de l'écran lors de tout ou partie des passes. ) Alt-enter pour prendre une invite de commande à / de plein écran était un moyen facile de provoquer une perte de données. Ou tout ce qui cause une latence d’interruption suffisante. Fondamentalement, le contrôle de flux matériel de microsofts n'est pas un matériel, mais un contrôle de flux logiciel, même si le matériel dispose de capacités de contrôle de flux de matériel, les pilotes de microsft ne définissaient pas ce bit. SeaLevel a finalement pris en charge ce bit. En quelque sorte, vous deviez définir les bons paramètres non liés dans SetCommState () pour l'activer.

En ce qui concerne votre programme contrôlant les signaux, utilisez SetCommState ().

Certains adaptateurs USB à série ne prennent pas en charge le contrôle de flux DTR / DSR / DCD. Alors peut-être que c'est votre cas.

http://www.digi.com/support/kbase/kbaseresultdetl? id = 588

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top