0

USB から RS485 へのアダプターを使用して VFD を制御するプログラムに取り組んでいます。

コマンドを送信しようとすると、VFD が一瞬だけ点滅するという問題がありました。

さらに詳しく確認するために、ループバック テスト (送信ピンを受信ピンに配線し、送信されたデータも受信されるかどうかを確認する) を実行して、USB から RS485 へのコンバーターをテストすることにしました。

さまざまなシリアル テスト アプリケーションを使用して、動作することを確認できました。データを送信すると、送信と受信の両方が表示されます。

ただし、私が書いているプログラムでは機能しません。プログラムが起動すると、「.enq.」という送受信シグナルがいくつか送られてきます。ただし、プログラムを実行すると、データが送信されたことは示されますが、受信されたことは示されません。シリアルポートの設定方法に誤りがあるかどうかはわかりませんでした。

これが私のセットアップコードです。

        public MITCOM(IniFile INI_in)
    {
        itsINI = INI_in;
        itsName = itsINI.ReadCheckDefault("MITSUBISHI", "Port", "COM4");
        itsBaudRate = Convert.ToInt16(itsINI.ReadCheckDefault("MITSUBISHI", "BaudRate", "19200"));
        itsDataBits = Convert.ToInt16(itsINI.ReadCheckDefault("MITSUBISHI", "DataBits", "8"));
        switch (itsINI.ReadCheckDefault("MITSUBISHI", "Parity", "Even"))
        {
            case "Even":
                itsParity = Parity.Even;
                break;
            case "Odd":
                itsParity = Parity.Odd;
                break;
            default:
                itsParity = Parity.Even;
                itsINI.WriteValue("MITSUBISHI", "Parity", "Even");
                break;
        }
        switch(itsINI.ReadCheckDefault("MITSUBISHI", "StopBits", "2"))
        {
            case "1":
                itsStopBits = StopBits.One;
                break;
            case "2":
                itsStopBits = StopBits.Two;
                break;
            default:
                itsStopBits = StopBits.Two;
                itsINI.WriteValue("MITSUBISHI", "StopBits", "2");
                break;
        }     

        itsPort = new SerialPort(itsName, itsBaudRate, itsParity, 8, itsStopBits);
        itsPort.Open();

メッセージを送信するために使用するコードは次のとおりです。

    public void A1(string _instruction, byte WAIT, Int16 Data)
    {
        var Bytes = new List<byte>();
        Bytes.Add(Control_Code.ENQ);
        Bytes.AddRange(Encoding.ASCII.GetBytes("00"));
        Bytes.AddRange(Encoding.ASCII.GetBytes(_instruction));
        Bytes.AddRange(Encoding.ASCII.GetBytes(WAIT.ToString("X")));
        Bytes.AddRange(Encoding.ASCII.GetBytes(Data.ToString("X2")));
        int SUM = 0;
        for(int i = 1; i < 8; i++)
        {
            SUM += Bytes[i];
        }
        SUM &= 0xFF;
        Bytes.AddRange(Encoding.ASCII.GetBytes(SUM.ToString("X2")));
        Bytes.Add(Control_Code.CR);
        itsPort.Write(Bytes.ToArray(), 0, 11);
    }

繰り返します:

-サードパーティ製ソフトウェア (無料のデバイス監視スタジオ (FDMS)) を介して送信すると、ループバック テストが成功します - MY ソフトウェアを起動すると、いくつかの .enq が表示されます。メッセージ。- プログラムがデータを送信しようとすると、FDMS はデータが送信されたが受信されなかったと表示します。

皆さんが与えることができるどんな助けも大歓迎です!

4

0 に答える 0