Exemple #1
0
        //// シリアル通信 データ をカレント情報として設定
        //public void Set_SerialComm ( serial_comm.CSerialComm m_seridat ) {
        //    m_seriCur = m_seridat;
        //}

        // TypeA 通信プロトコル
        /// <summary>
        /// 通信プロトコルA throw CErrCode_型
        /// </summary>
        /// <param name="rtdbdat"></param>
        /// <param name="refSeriPrt"></param>
        public void Sync_ProtocolA(CCmdRtDBType_var rtdbdat, ref SerialPort refSeriPrt)
        {
            enErrCode_  enret       = enErrCode_.en_success;
            List <byte> receivedBuf = new List <byte> ( ); // 受信バッファ

            string strSendDat = null;                      //rs232cで送信する文字列

            // コマンドパケット生成
            if ((enret = CCommUtility.GetInstance().Create_Send_Dat(rtdbdat.strCmdName, ref strSendDat, false, false, false, false, false, false, false, CommTestTool.Form1.enSendType.en_SendType_Hex)) != enErrCode_.en_success)            // bool型フラグは全てfalse / 本ソフトウェアでは、Form上でboolフラグ入りの送信文字列が作成されるため、boolフラグは全てOFFにする
            {
                throw new CExcept_(enret);
            }

            //! 送信するテキストがない場合、データ送信は行わない.
            if (string.IsNullOrEmpty(strSendDat) == true)
            {
                throw new CExcept_(enErrCode_.en_err_none_send_str);
            }

            refSeriPrt.Write(strSendDat);    //送信

            //待機
            System.Threading.Thread.Sleep(10);

            // 応答パケット(同期通信)
            while (refSeriPrt.BytesToRead > 0)
            {
                // 1バイト受信してバッファに格納
                receivedBuf.Add(( byte )refSeriPrt.ReadByte( ));
            }
            // 配列に変換
            byte [] recevDat = receivedBuf.ToArray( );

            // 通信完了
        }
Exemple #2
0
        // vaccumをパーサー
        public void RecvParser_vacDat(byte [] bytVacParserRecv, ref double refvac)
        {
            byte [] bytArraybuf = new byte [4];
            Array.Copy(bytVacParserRecv,
                       Array.FindIndex(bytVacParserRecv, num => num == 0x56) + 1, //v
                       bytArraybuf,
                       0,
                       bytArraybuf.Length);

            refvac = ( double )(int.Parse(CCommUtility.GetInstance().AsciiToString_(bytArraybuf)));
            refvac = -1.0 * refvac * 0.01;         // 負圧扱いなので、マイナス値にする

            //    refvac = double.Parse ( bytArraybuf.ToString ( ) );
        }
        /// <summary>
        /// すべての文字列送信
        /// </summary>
        /// <param name="list_str_src"></param>
        /// <param name="refSeriPrt"></param>
        /// <param name="iIntvalTm"></param> 送信間隔
        public void Async_Protocol_Send_AllDat(List <string> list_str_src, ref SerialPort refSeriPrt, int iIntvalTm)
        {
            //    enErrCode_ enret = enErrCode_.en_success;

            // TextBox送信文字列から送信用文字列(ASCII)を生成したもの
            List <string> list_str_ascii_senddat = new List <string> ( );

            // 送信文字をListに埋めていく
            for (int i = 0; i < list_str_src.Count(); i++)
            {
                // 中断
                if (bCommEndFlg)
                {
                    throw new CExcept_(enErrCode_.en_err_comm_interrupt);
                }


                string strsenddat = list_str_src[i];

                // ASCIIタイプ
                //  if (enSendType == CommTestTool.Form1.enSendType.en_SendType_Ascii) {
                // byte bdat;
                switch (strsenddat)
                {
                case "ENQ": {
                    string strbuf = null;
                    strbuf = System.Text.Encoding.ASCII.GetString(ENQ);
                    list_str_ascii_senddat.Add(strbuf);
                    break;
                }

                case "ACK": {
                    string strbuf = null;
                    strbuf = System.Text.Encoding.ASCII.GetString(ACK);
                    list_str_ascii_senddat.Add(strbuf);
                    break;
                }

                case "EOT": {
                    string strbuf = null;
                    strbuf = System.Text.Encoding.ASCII.GetString(EOT);
                    list_str_ascii_senddat.Add(strbuf);
                    break;
                }

                case "CAN": {
                    string strbuf = null;
                    strbuf = System.Text.Encoding.ASCII.GetString(CAN);
                    list_str_ascii_senddat.Add(strbuf);
                    break;
                }

                case "CR": {
                    string strbuf = null;
                    strbuf = System.Text.Encoding.ASCII.GetString(CR);
                    list_str_ascii_senddat.Add(strbuf);
                    break;
                }

                case "LF": {
                    string strbuf = null;
                    strbuf = System.Text.Encoding.ASCII.GetString(LF);
                    list_str_ascii_senddat.Add(strbuf);
                    break;
                }

                // 自作送信文字列
                default: {
                    string strbuf = null;

                    byte[] bAsciiDat = null;                      // 入力された送信データ
                    bAsciiDat = CCommUtility.GetInstance().StringToAscii_(strsenddat);
                    strbuf    = System.Text.Encoding.ASCII.GetString(bAsciiDat);
                    list_str_ascii_senddat.Add(strbuf);
                    break;
                }
                }
            }
            //     }


            bAsyncRecvContinueFlg = false;
            foreach (string strsenddat in list_str_ascii_senddat)
            {
                // 中断
                if (bCommEndFlg)
                {
                    throw new CExcept_(enErrCode_.en_err_comm_interrupt);
                }

                // 送信バッファクリア
                refSeriPrt.DiscardOutBuffer( );


                // 受信バッファと同期させる
                DateTime st_time = DateTime.Now;
                while (true)
                {
                    if (!bAsyncRecvContinueFlg)
                    {
                        break;
                    }

                    // 中断
                    if (bCommEndFlg)
                    {
                        throw new CExcept_(enErrCode_.en_err_comm_interrupt);
                    }

                    // add 151111
                    // タイムアウト
                    DateTime now_tm = DateTime.Now;
                    TimeSpan span   = now_tm - st_time;

                    if (span.Seconds > 5)
                    {
                        break;
                    }
                    // add end

                    //待機
                    System.Threading.Thread.Sleep(consTM_5MS);
                }

                // 送信
                refSeriPrt.Write(strsenddat);    //送信

                bAsyncRecvContinueFlg = true;    // 受信待ちフラグON


                // 送信文字をFormに投げる
                cnt_mainform.Invoke(eveCommGenePurPosApi, new Object [] { "→ " + SprSgm.CUtility.ChgUnicodeToAscii_ForRecvDat(strsenddat) + "\r\n" });


                //待機
                System.Threading.Thread.Sleep(iIntvalTm);
            }
        }
Exemple #4
0
        //// シリアル通信 データ をカレント情報として設定
        //public void Set_SerialComm ( serial_comm.CSerialComm m_seridat ) {
        //    m_seriCur = m_seridat;
        //}

        //// 別スレッドでタイマー待ち
        //private void timer_action ( ) {
        //    Thread.Sleep ( 3000 );
        //}


        /// <summary>
        /// 通信プロトコル throw CErrCode型
        /// </summary>
        public void Sync_Protocol_Send_DL(string str_src, ref SerialPort refSeriPrt)
        {
            enErrCode_  enret       = enErrCode_.en_success;
            List <byte> receivedBuf = new List <byte> ( ); //受信バッファ
            string      strSendDat  = null;                //rs232cで送信する文字列

            //    ThreadStart thd_deleg = new ThreadStart ( timer_action);
            //      Thread tm_thd = new Thread ( thd_deleg );
            bCommEndFlg = false;    // 通信中断フラグ初期化

            // 受信/送信バッファクリア
            refSeriPrt.DiscardInBuffer( );
            refSeriPrt.DiscardOutBuffer( );

            // ENQ発行
            refSeriPrt.Write(System.Text.Encoding.ASCII.GetString(ENQ));       //送信

            //待機
            System.Threading.Thread.Sleep(consTM_5MS);

            // ACKの受信
            // 応答パケット(同期通信)
            while (true)
            {
                if (refSeriPrt.BytesToRead > 0)
                {
                    // 1バイト受信してバッファに格納
                    //benddat = ( byte ) refSeriPrt.ReadByte ( );
                    receivedBuf.Add(( byte )refSeriPrt.ReadByte( ));

                    ////待機
                    //System.Threading.Thread.Sleep ( consTM_5MS );

                    break;
                }
                else if (bCommEndFlg)           // 通信中断確認
                {
                    throw new CExcept_(enErrCode_.en_err_comm_interrupt);
                }
                //待機
                System.Threading.Thread.Sleep(consTM_5MS);
            }

            //// 応答パケット(同期通信)
            //    while ( refSeriPrt.BytesToRead > 0 ) {
            //        byte brevbuf = ( byte ) refSeriPrt.ReadByte ( );
            //        receivedBuf.Add ( brevbuf );
            //        if ( brevbuf == ACK[0] )       // 終了文字
            //            break;
            //    }

            // ACK受信確認
            if (receivedBuf.Count() < 0 ||
                receivedBuf [0] != 0x06)
            {
                Sync_ErrSeq2(ref refSeriPrt);           // Error 2
                throw new CExcept_(enErrCode_.en_err_recv_ack);
            }


            // 通信コマンド生成
            if ((enret = CCommUtility.GetInstance().Create_Send_Dat(str_src, ref strSendDat, false, false, false, false, false, false, false, CommTestTool.Form1.enSendType.en_SendType_Hex)) != enErrCode_.en_success)
            {
                throw new CExcept_(enret);
            }

            receivedBuf.Clear( );

            // 送信
            refSeriPrt.Write(strSendDat);    //送信

            //待機
            System.Threading.Thread.Sleep(consTM_5MS);

            // 応答パケット(同期通信)
            int irecvsz = 0;     // BytesToReadのサイズ

            while (true)
            {
                if ((irecvsz = refSeriPrt.BytesToRead) > 0)
                {
                    byte [] bbuf = new byte [irecvsz];

                    refSeriPrt.Read(bbuf, 0, bbuf.Length);

                    foreach (byte v in bbuf)
                    {
                        receivedBuf.Add(v);
                    }
                    //           receivedBuf.Add ( ( byte ) refSeriPrt.ReadByte ( ) );         // バイトで取得しない

                    if (receivedBuf [receivedBuf.Count( ) - 1] == 0x03)
                    {
                        break;
                    }
                }
                else if (bCommEndFlg)           // 通信中断確認
                {
                    throw new CExcept_(enErrCode_.en_err_comm_interrupt);
                }

                //待機
                System.Threading.Thread.Sleep(consTM_5MS);
            }


            // delete 150708
            //// A0の受信
            //// 応答パケット(同期通信)
            //while ( refSeriPrt.BytesToRead > 0 ) {
            //    // 1バイト受信してバッファに格納
            //    //benddat = ( byte ) refSeriPrt.ReadByte ( );
            //    receivedBuf.Add ( ( byte ) refSeriPrt.ReadByte ( ) );

            //    // タイムアウトは上位でcatchしてくれ

            //    //待機
            //    System.Threading.Thread.Sleep ( consTM_5MS );
            //}


            // A0受信確認
            if (receivedBuf.Count( ) < 4 ||
                receivedBuf [4] != 0x30)
            {
                Sync_ErrSeq2(ref refSeriPrt);           // Error 2
                throw new CExcept_(enErrCode_.en_err_recv_a0);
            }

            // EOT送信
            refSeriPrt.Write(System.Text.Encoding.ASCII.GetString(EOT));       //送信
        }
Exemple #5
0
        /// <summary>
        /// 通信プロトコル throw CErrCode型
        /// </summary>
        public void Sync_Protocol_Send_UP(string str_src, ref byte[] refbyteRecvDat, int iszRecvbuf, ref SerialPort refSeriPrt)
        {
            enErrCode_  enret       = enErrCode_.en_success;
            List <byte> receivedBuf = new List <byte> ( ); //受信バッファ
            string      strSendDat  = null;                //rs232cで送信する文字列

            bCommEndFlg = false;                           // 通信中断フラグ初期化

            //   string strRecvDat = null;   // rs232cで受信した文字列
            //bool bendflg = false;
            //byte benddat = 0x00;


            // 受信/送信バッファクリア
            refSeriPrt.DiscardInBuffer( );
            refSeriPrt.DiscardOutBuffer( );

            // ENQ発行
            refSeriPrt.Write(System.Text.Encoding.ASCII.GetString(ENQ));       //送信

            //待機
            System.Threading.Thread.Sleep(consTM_5MS);


            // ACKの受信
            // 応答パケット(同期通信)
            while (true)
            {
                if (refSeriPrt.BytesToRead > 0)
                {
                    // 1バイト受信してバッファに格納
                    //benddat = ( byte ) refSeriPrt.ReadByte ( );
                    receivedBuf.Add(( byte )refSeriPrt.ReadByte( ));

                    ////待機
                    //System.Threading.Thread.Sleep ( consTM_5MS );

                    break;
                }
                else if (bCommEndFlg)           // 通信中断確認
                {
                    throw new CExcept_(enErrCode_.en_err_comm_interrupt);
                }

                //待機
                System.Threading.Thread.Sleep(consTM_5MS);
            }

            // ACK受信確認
            if (receivedBuf.Count() < 0 ||
                receivedBuf [0] != 0x06)
            {
                throw new CExcept_(enErrCode_.en_err_recv_ack);
            }

            // 通信コマンド生成
            if ((enret = CCommUtility.GetInstance().Create_Send_Dat(str_src, ref strSendDat, false, false, false, false, false, false, false, CommTestTool.Form1.enSendType.en_SendType_Hex)) != enErrCode_.en_success)
            {
                throw new CExcept_(enret);
            }

            receivedBuf.Clear( );
            bRecvBuf.Initialize( );

            // 送信
            refSeriPrt.Write(strSendDat);    //送信


            //待機
            System.Threading.Thread.Sleep(consTM_5MS);
            //bendflg = false;

            // A0の受信
            // 応答パケット(同期通信)
            int irecvsz = 0;     // BytesToReadのサイズ

            while (true)
            {
                if ((irecvsz = refSeriPrt.BytesToRead) > 0)
                {
                    byte [] bbuf = new byte [irecvsz];

                    refSeriPrt.Read(bbuf, 0, bbuf.Length);

                    foreach (byte v in bbuf)
                    {
                        receivedBuf.Add(v);
                    }
                    //           receivedBuf.Add ( ( byte ) refSeriPrt.ReadByte ( ) );         // バイトで取得しない

                    if (receivedBuf [receivedBuf.Count( ) - 1] == 0x03)
                    {
                        break;
                    }
                }

                if (bCommEndFlg)           // 通信中断確認
                {
                    throw new CExcept_(enErrCode_.en_err_comm_interrupt);
                }

                //待機
                System.Threading.Thread.Sleep(consTM_5MS);
            }

            // delete 150708
            // // 応答パケット(同期通信)
            // while ( refSeriPrt.BytesToRead > 0){
            ////     && !bendflg ) {
            //     // 1バイト受信してバッファに格納
            //     //benddat = ( byte ) refSeriPrt.ReadByte ( );
            //     receivedBuf.Add ( ( byte ) refSeriPrt.ReadByte ( ) );

            //     // タイムアウトは上位でcatchしてくれ
            //     //if ( benddat == 0x03 )
            //     //    bendflg = true;

            //     //待機
            //     System.Threading.Thread.Sleep ( consTM_5MS );
            // }


            // A0受信確認
            if (receivedBuf.Count() < 4 ||
                receivedBuf [4] != 0x30)
            {
                throw new CExcept_(enErrCode_.en_err_recv_a0);
            }


            // ACK発行
            refSeriPrt.Write(System.Text.Encoding.ASCII.GetString(ACK));       //送信

            receivedBuf.Clear( );

            //待機
            System.Threading.Thread.Sleep(consTM_5MS);


            // 応答パケット(同期通信)
            //   int irecvsz = 0;     // BytesToReadのサイズ
            while (true)
            {
                if ((irecvsz = refSeriPrt.BytesToRead) > 0)
                {
                    byte [] bbuf = new byte [irecvsz];

                    refSeriPrt.Read(bbuf, 0, bbuf.Length);

                    foreach (byte v in bbuf)
                    {
                        receivedBuf.Add(v);
                    }
                    //           receivedBuf.Add ( ( byte ) refSeriPrt.ReadByte ( ) );         // バイトで取得しない

                    if (receivedBuf [receivedBuf.Count( ) - 1] == 0x03)
                    {
                        break;
                    }
                }

                if (bCommEndFlg)           // 通信中断確認
                {
                    throw new CExcept_(enErrCode_.en_err_comm_interrupt);
                }

                //待機
                System.Threading.Thread.Sleep(consTM_5MS);
            }

            // delete 150708
            //       // 応答パケット(同期通信)
            //       int irecvsz =0;     // BytesToReadのサイズ
            //       while ( (irecvsz =refSeriPrt.BytesToRead) > 0 ) {
            //            byte [] bbuf = new byte[irecvsz];

            //            refSeriPrt.Read ( bbuf, 0, bbuf.Length );

            //           foreach ( byte v in bbuf ) {
            //               receivedBuf.Add ( v );
            //           }
            ////           receivedBuf.Add ( ( byte ) refSeriPrt.ReadByte ( ) );         // バイトで取得しない

            //           //待機
            //           System.Threading.Thread.Sleep ( consTM_5MS );
            //       }


            // 受信文字列が、受信文字取得用バッファのサイズに納まるものか確認
            if (receivedBuf.Count( ) > iszRecvbuf)
            {
                throw new CExcept_(enErrCode_.en_err_recv_buff_ovrflow);
            }

            receivedBuf.ToArray().CopyTo(refbyteRecvDat, 0);


            // EOT送信
            refSeriPrt.Write(System.Text.Encoding.ASCII.GetString(EOT));       //送信
        }