/// <summary> /// シリアルポート接続(接続時切断) /// </summary> /// <param name="serialPort"></param> private void connect(SerialPort serialPort) { try { if (serialPort1.IsOpen == true) { serialPort1.RtsEnable = false; //! シリアルポートをクローズする. serialPort1.Close(); notice_textBox.AppendText("SerialPort Close\r\n"); } else { //! オープンするシリアルポートをコンボボックスから取り出す. if (com_match() == null) { return; } serialPort1.PortName = com_match().ToString(); //! ボーレートをコンボボックスから取り出す. SerialClass.BuadRateItem baud = (SerialClass.BuadRateItem)cmbBaudRate.SelectedItem; serialPort1.BaudRate = baud.BAUDRATE; //! データビットをセットする. (データビット = 8ビット) //! パリティビットをセットする. (パリティビット = なし) //! ストップビットをセットする. (ストップビット = 1ビット) SerialClass.Serial_properties(serialPort, 8, Parity.None, StopBits.One); //! フロー制御をコンボボックスから取り出す. SerialClass.HandShakeItem ctrl = (SerialClass.HandShakeItem)cmbHandShake.SelectedItem; serialPort1.Handshake = ctrl.HANDSHAKE; //! 文字コードをセットする. //serialPort1.Encoding = Encoding.Unicode; serialPort1.Encoding = System.Text.Encoding.GetEncoding(0); try { if (RtsEnable_checkBox.Checked) { serialPort1.RtsEnable = true; } //! シリアルポートをオープンする. serialPort1.Open(); notice_textBox.AppendText("SerialPort Open\r\n"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } catch (Exception) { } finally { if (serialPort.IsOpen) { connectButton.Text = "切断"; } else { connectButton.Text = "接続"; } } }
static public short DefBR = 5; //DefaultBuadRate public void data_set() //各コンボボックスに値をセットする { cmbPortName.Items.Clear(); cmbPortName.Text = ""; notice_textBox.AppendText("SerialPort Update\r\n"); //シリアルポート名をセット var check_reg = new System.Text.RegularExpressions.Regex("(COM[1-9][0-9]?[0-9]?)");//正規表現 ManagementClass mcPnPEntity = new ManagementClass("Win32_PnPEntity"); ManagementObjectCollection manageObjCol = mcPnPEntity.GetInstances(); //全てのPnPデバイスを探索しシリアル通信が行われるデバイスを随時追加する foreach (ManagementObject manageObj in manageObjCol) { //Nameプロパティを取得 var namePropertyValue = manageObj.GetPropertyValue("Name"); var CaptionPropertyValue = manageObj.GetPropertyValue("PNPDeviceID"); /* * PowerShell * Get-WmiObject -Class Win32_SerialPort */ if (namePropertyValue == null) { continue; } //Nameプロパティ文字列の一部が"(COM1)~(COM999)"と一致するときリストに追加" string name = namePropertyValue.ToString(); if (check_reg.IsMatch(name)) { cmbPortName.Items.Add(name); if (cmbPortName.Items.Count > 0) { cmbPortName.SelectedIndex = 0; } } } cmbBaudRate.Items.Clear(); // ボーレート選択コンボボックスに選択項目をセットする. SerialClass.BuadRateItem baud; baud = new SerialClass.BuadRateItem(); baud.NAME = "1200bps(リセット用)"; baud.BAUDRATE = 1200; cmbBaudRate.Items.Add(baud); baud = new SerialClass.BuadRateItem(); baud.NAME = "9600bps"; baud.BAUDRATE = 9600; cmbBaudRate.Items.Add(baud); baud = new SerialClass.BuadRateItem(); baud.NAME = "19200bps"; baud.BAUDRATE = 19200; cmbBaudRate.Items.Add(baud); baud = new SerialClass.BuadRateItem(); baud.NAME = "38400bps"; baud.BAUDRATE = 38400; cmbBaudRate.Items.Add(baud); baud = new SerialClass.BuadRateItem(); baud.NAME = "67600bps"; baud.BAUDRATE = 57600; cmbBaudRate.Items.Add(baud); baud = new SerialClass.BuadRateItem(); baud.NAME = "115200bps"; baud.BAUDRATE = 115200; cmbBaudRate.Items.Add(baud); cmbBaudRate.SelectedIndex = DefBR; cmbHandShake.Items.Clear(); // フロー制御選択コンボボックスに選択項目をセットする. SerialClass.HandShakeItem ctrl; ctrl = new SerialClass.HandShakeItem(); ctrl.NAME = "NONE"; ctrl.HANDSHAKE = Handshake.None; cmbHandShake.Items.Add(ctrl); ctrl = new SerialClass.HandShakeItem(); ctrl.NAME = "XON/XOFF"; ctrl.HANDSHAKE = Handshake.XOnXOff; cmbHandShake.Items.Add(ctrl); ctrl = new SerialClass.HandShakeItem(); ctrl.NAME = "RTS/CTS"; ctrl.HANDSHAKE = Handshake.RequestToSend; cmbHandShake.Items.Add(ctrl); ctrl = new SerialClass.HandShakeItem(); ctrl.NAME = "XON/XOFF + RTS/CTS"; ctrl.HANDSHAKE = Handshake.RequestToSendXOnXOff; cmbHandShake.Items.Add(ctrl); cmbHandShake.SelectedIndex = 0; }