-1

OBD-ll ECU シミュレーター (リンク)である ECUsim 2000 と通信しようとしています。それでも、デバイスからの応答は常に「??」のようなものです。また "?" (TouchScan や OBD Auto Doctor などのプログラムを実行すると、データが正常に読み取られるため、デバイスは正常に動作します)。C#でコマンドを送信しています

serialPort1.Write("010D\r")

そして、SerialPortのDataReceivedイベントで信号を受信して​​います

 message = "Data Received: " + serialPort1.ReadExisting();
 this.Invoke(new EventHandler(displayText));

私は今、私が欠けているものを知りません。ここに完全なソースコードがあります

private void Form1_Load(object sender, EventArgs e)
    {
        serialPort1.PortName = "COM3";
        serialPort1.BaudRate = 115200;
        serialPort1.Parity = System.IO.Ports.Parity.None;
        serialPort1.StopBits = System.IO.Ports.StopBits.One;
        serialPort1.DataBits = 8;
        serialPort1.Handshake = System.IO.Ports.Handshake.None;

        serialPort1.Open();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (serialPort1.IsOpen)
        {
            serialPort1.Write("010D\r");
        }
    }

    private void displayText(object sender, EventArgs e)
    {
        textBox1.AppendText(message + "\n");
    }

    private void serialPort1_DataReceived(object sender,      System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        message = "Data Received: " + serialPort1.ReadExisting();
        this.Invoke(new EventHandler(displayText));
    }

ECUsim 2000 のデフォルトの通信設定は、

ボーレート: 115200 データ ビット: 8 パリティ: なし ストップ ビット:1

プロトコルは ISO 15765-4 で、デバイスにはプロトコル属性 CAN ID 29/11 ビットと CAN ボーレート 500 kbps/250kbps の 2 つのスイッチがあります。おそらく、問題はこれらに関連しており、適切な通信セットがありません。

別の質問 -> シリアル通信でプロトコル (ISO 15765-4 など) を設定する方法はありますか?

4

1 に答える 1

0

指定されたコードに関連する 2 つの問題があります。

1) ECUsim 2000 には 2 つのコネクタがあります。そのうちの 1 つはタイプ B USB ポートで、もう 1 つは診断リンク コネクタ (DLC) です。タイプ B の USB ポート経由でデバイスに接続する場合、ボー レートは 115200 です。DLC を使用する場合、ボー レートはおそらく 9600 または 38400 です。ここでは、接続はスキャン ツールを介して行われるため、(私の場合)ボーレート 38400 でうまくいきました。

2) コメントで述べたように、データを取得するにRead()は、SerialPort のメソッドを使用する必要があります。次のコードとして使用できます。

int buffSize = 1024;
bool cont = true;
int count = 0;
byte[] bff = new byte[buffSize];
string returnVal = string.Empty;
count = serialPort1.Read(bff, 0, buffSize);
returnVal += System.Text.Encoding.Default.GetString(bff, 0, count);
于 2014-06-06T18:52:43.340 に答える