Vorzeというメーカーのとある高級家電がシリアル通信ができると知り、先日購入し、試しにUnityから動かしてみようとしたところうんともすんとも言わない状態で困っております。
調べたところ、Arduino等を活用するためUnityでシリアル通信をする場合、よく「受信ができない(遅い)」といった相談があるようで、そちらの解消方法も一通り試してはみたのですが、現状は変わらず送信も受信もできていない状況で、具体的には、ポートのオープンや送信については特にエラーも何らかの動作も起きず、受信についてはいつまで経っても受信ができずフリーズするのでタイムアウト時間を設けて初めて「System.TimeoutException: The operation has timed out.」を吐きます。
Unityではなく、有志の方が開発した別のプログラムではCOM3で接続が確立され送信と動作ができていましたので、家電側の不具合ではないような気がします。
何か考えられる原因はありますでしょうか?
皆様のお知恵を拝借できれば幸いです。よろしくお願いいたします。
Windows10
Visual Studio 2017
次の3つのバージョンで試してみました。
Unity2018.4.36f1
Unity2019.4.21f1
Unity2021.1.0b8
また、
BuildSettingsで「PC,Mac&Linux Standalone」 ⇒ 「Universal Windows Platform」へ
PlayerSettingsで「Api Compatibility Level」 ⇒ 「.NET 4.x」へ
COMポートの番号はデバイスマネージャーで確認済み(COM3)です。
その他、
試しにデバイスマネージャーからCOMポートの番号を変えてみたり、受信・送信バッファーを下げたりしましたが変化はありませんでした。
using System.Collections; using System.Collections.Generic; using System.IO.Ports; using UnityEngine; public class vorze : MonoBehaviour { private string[] ports; private SerialPort port; private string portName; private int baudRate; private int dataBits; private byte pistonPosition; private byte pistonSpeed; private byte[] data; private byte[] data1; // Start is called before the first frame update void Start() { //ports = SerialPort.GetPortNames(); //Debug.Log(ports); Open(); } // Update is called once per frame void Update() { } private void OnDestroy() { port.Close(); port.Dispose(); Debug.Log("end"); } void Open() { portName = "COM3"; baudRate = 9600; //19200 dataBits = 8; port = new SerialPort(portName, baudRate, Parity.None, dataBits, StopBits.One); port.Open(); //port.DtrEnable = true; //port.RtsEnable = true; //port.ReadTimeout = 100; //port.WriteTimeout = 100; pistonPosition = 100; // 0~200 pistonSpeed = 10; // 0~30(60) data = new byte[]{ 0x03, pistonPosition, pistonSpeed }; try { if (port.IsOpen) { port.Write(data, 0, data.Length); /* data1 = new byte[] { 0xF0, 0x01, 0x00 }; port.Write(data1, 0, data1.Length); var result = port.ReadByte(); Debug.Log(result); */ } } catch (System.Exception e) { Debug.Log(e); } finally { //port.Close(); //port.Dispose(); } } }
回答3件
あなたの回答
tips
プレビュー