Windows のシリアルポートのドライバの問題(かも?)
アプリケーションとある制御機器間を RS232C で接続して通信させるシステムがある。現場で作業にあたっている人から、アプリケーション側からデータが出て行かないとの連絡がある。担当者がちょうど健康診断に出かけていて対応して欲しいと回ってきた。
アプリケーションはフロー制御なしで動かしている。パソコンのふたつの SIO ポートを RS232C ケーブルで接続して、TeraTerm をふたつ起動して双方のポートに割り当てて試したみた。
すると、一方からのデータは相手側に伝わるけど、反対側はほとんど伝わらない。TeraTerm の設定を確認したけど、フロー制御は none となっている。
Windows のデバイスドライバが悪いのか、アプリケーションからハードウェアフロー制御なしに設定しているのが、きちんとチップに伝わっていないらしい。もしかすると、昔はきちんと動作したのが、パソコンスペックの向上によってチップに対する命令を出すタイミングが変化したためにチップをうまく初期化できてないのかも。もしかすると、BIOS で CPU クロックを下げてしまうと問題なく動作するかもしれない。
現場のパソコンのクロックを落とすわけにもいかないので、パソコン側コネクタの、CTS と RTS を、DSR と DTR を結線してもらった。それでうまく動作するようになったらしい。