投稿者 YuO  (社会人) 投稿日時 2017/3/8 16:22:16
根本として,①のPCとZigbee Routerの間の通信はどうやっているのでしょうか。
普通に考えるとコーディネーターに設定されたXBeeモジュールが入っていて,それとプログラムが通信しているはずなのですが……。
そして,②との違いがわからない……。


で,過去にSerialPortクラスを使ってXBeeモジュールと通信した事がありますが,文字化けはなかったですね……。

調べるとすれば,
・XBeeの各種パラメータは正しいか
・sdatは正しいデータか
・SerialPort1.EncodingにEncoding.GetEncoding("SHIFT_JIS")を入れた状態で,Write(TextBox1.Text)としたら送られるデータはどうなるか
あたりでしょうか。

ちなみに,私が通信用にお試しとして使ったコードは,以下のC#コンソールアプリケーションコードです。
これを送信側・受信側ともにコーディネーターとして設定し,双方が通信できるように設定した上で,
受信側と送信側双方で同じプログラムをチャット的に使いました(透過モード専用です)。
# VS 2015
using System;
using System.IO.Ports;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        var portNames = SerialPort.GetPortNames();
        if (portNames.Length == 0)
        {
            Console.WriteLine("シリアルポートが見つかりませんでした。");
            return;
        }
        for (int i = 0; i < portNames.Length; ++i)
        {
            Console.WriteLine($"{i + 1} : {portNames[i]}");
        }
        int portIndex;
        while (true)
        {
            Console.Write("ポートを選択してください >");
            var s = Console.ReadLine();
            if (s == null)
            {
                return;
            }
            if (Int32.TryParse(s, out portIndex) && 1 <= portIndex && portIndex <= portNames.Length)
            {
                break;
            }
        }
        using (var port = new SerialPort(portNames[portIndex - 1])
        {
            BaudRate = 9600,
            DataBits = 8,
            Parity = Parity.None,
            StopBits = StopBits.One,
            Handshake = Handshake.None,
            NewLine = "\r",
            Encoding = Encoding.UTF8
        })
        {
            port.Open();

            var sendTask = Task.Factory.StartNew(() =>
            {
                string line;
                while ((line = Console.ReadLine()) != null)
                {
                    port.WriteLine(line);
                }
            });
            var receiveTask = Task.Factory.StartNew(() =>
            {
                string line;
                while ((line = port.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            });
            Task.WhenAny(sendTask, receiveTask).Wait();
        }
    }
}