新年あけましておめでとうございます。かかかです。
2023年卯年になりました。今年もよろしくお願いします。
新年と言えば皆さん年賀状は出しましたでしょうか?
私は出していません。ホントにすいません……。
ちょっと考えたら社会人としてお世話になった上司の方々、一緒にお仕事させていただいた方々に出すべきでしたよね……。
SerialDebuggerの話
上記の挨拶から後悔までは今回の話題を書く上で思いついたのですが、真面目に自分のダメなところが気になってきました。ちょっと切り替えます。
最近、SerialDebuggerというフリーソフトを使う機会がありました。と言っても、このSerialDebuggerがシステムの検証をする上で使用できるかどうかを検証したくらいなのですが、この作業でかなり手間取ってしまったのでネタにしようかと。(実際にはかなり単純なミスだったんですがね)
まずSerialDebuggerというのは株式会社ユードムさんが提供しているシリアル通信用のソフトになります。COMポートからシリアル通信で接続した先にバイナリデータで指令を送ったり、送られてきたデータに対してのふるまいを設定しておくことで疑似的なサーバのように使うことができます。私が実際使ったのは無料版のSerialDebuggerFreeです。
同じくユードムさんが提供しているソフトにSocketDebuggerがあります。こちらの方がネット上の記事が多い印象なので、「SocketDebuggerのシリアル通信版」と言えばわかりやすい人もいるのではないかと思います。
自分もSocketDebuggerは使用経験があり、SerialDebuggerは使用経験がないものの、他のシリアル通信シミュレータソフトは使ったことがあったので、この業務もすぐ終わるだろうなと考えておりました。
結果として、めちゃくちゃ時間がかかりました。
なぜか命令を送っても、検証先のサーバから1つも返事が来ないのです。そして、今まで自分が使っていたソフトを使ったらちゃんと応答が返ってくるという。
いろんな状況で試しては失敗し、その状況を伝えながら先輩に相談し、また試すということを繰り返した結果、原因が判明しました。
SerialDebuggerで送信していたデータにチェックコードがついていなかったのです。
↑いや、それくらいすぐ気づけよ!と言われてしまえば「確かに……」と思ってしまうのですが、言い訳をさせていただくと、今まで自分が使っていたシリアル通信用のソフトは送信したいデータを入力したときに自動でチェックコードを付与してくれていたのです。
ちなみに気付いたきっかけは、先輩に「SerialDebuggerをサーバ側で使ってみて送られてくるデータを見てみるのは?」とアドバイスをいただき、
PC
|(LAN線)
業務で使っているLAN←→RS485変換器
|(RS485←→USB変換ケーブル)
PC
とつないでいる状態で、SocketDebuggerを使ってLANポートからCOMポートのSerialDebuggerに向かってデータを送信したところ、送られてくると想定していたデータに想定してなかった2バイト分のデータがくっついてるのを見たことです。
チェックコードがないから通信相手に届いても、怪しいデータ扱いされて、相手にされずはじかれてたんですね。納得。
自分の未熟さを感じながらも、通信の仕組みってちょっとおもしろいなと思いました。