Beispiel #1
0
class microDaqFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self,
                          parent,
                          id=wx.ID_ANY,
                          title=u"microDAQ System",
                          pos=wx.Point(710, 280),
                          size=wx.Size(1200, 760),
                          style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)

        self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)

        self.m_menubar1 = wx.MenuBar(0)
        self.m_menu1 = wx.Menu()
        self.m_menuItem1 = wx.MenuItem(self.m_menu1, wx.ID_ANY, u"MyMenuItem",
                                       wx.EmptyString, wx.ITEM_NORMAL)
        self.m_menu1.AppendItem(self.m_menuItem1)

        self.m_menuItem2 = wx.MenuItem(self.m_menu1, wx.ID_ANY, u"MyMenuItem",
                                       wx.EmptyString, wx.ITEM_NORMAL)
        self.m_menu1.AppendItem(self.m_menuItem2)

        self.m_menubar1.Append(self.m_menu1, u"MyMenu")

        self.m_menu2 = wx.Menu()
        self.m_menuItem3 = wx.MenuItem(self.m_menu2, wx.ID_ANY, u"MyMenuItem",
                                       wx.EmptyString, wx.ITEM_NORMAL)
        self.m_menu2.AppendItem(self.m_menuItem3)

        self.m_menuItem4 = wx.MenuItem(self.m_menu2, wx.ID_ANY, u"MyMenuItem",
                                       wx.EmptyString, wx.ITEM_NORMAL)
        self.m_menu2.AppendItem(self.m_menuItem4)

        self.m_menubar1.Append(self.m_menu2, u"MyMenu")

        self.m_menu3 = wx.Menu()
        self.m_menuItem5 = wx.MenuItem(self.m_menu3, wx.ID_ANY, u"MyMenuItem",
                                       wx.EmptyString, wx.ITEM_NORMAL)
        self.m_menu3.AppendItem(self.m_menuItem5)

        self.m_menuItem6 = wx.MenuItem(self.m_menu3, wx.ID_ANY, u"MyMenuItem",
                                       wx.EmptyString, wx.ITEM_NORMAL)
        self.m_menu3.AppendItem(self.m_menuItem6)

        self.m_menubar1.Append(self.m_menu3, u"MyMenu")

        self.SetMenuBar(self.m_menubar1)

        bSizer1 = wx.BoxSizer(wx.VERTICAL)

        self.Title_panel1 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
                                     wx.Size(-1, 40), wx.TAB_TRAVERSAL)
        self.Title_panel1.SetMinSize(wx.Size(-1, 40))
        self.Title_panel1.SetMaxSize(wx.Size(-1, 40))

        TitleSizer = wx.BoxSizer(wx.VERTICAL)

        self.m_staticText60 = wx.StaticText(self.Title_panel1, wx.ID_ANY,
                                            u"microDAQ 計測システム",
                                            wx.DefaultPosition, wx.DefaultSize,
                                            0)
        self.m_staticText60.Wrap(-1)
        self.m_staticText60.SetFont(
            wx.Font(24, 70, 90, 90, False, wx.EmptyString))

        TitleSizer.Add(
            self.m_staticText60, 1,
            wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

        self.Title_panel1.SetSizer(TitleSizer)
        self.Title_panel1.Layout()
        bSizer1.Add(self.Title_panel1, 1, wx.EXPAND | wx.ALL, 5)

        self.Main_panel = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
                                   wx.Size(-1, 700), wx.TAB_TRAVERSAL)
        self.Main_panel.SetMinSize(wx.Size(-1, 700))

        MainPanelSizer = wx.BoxSizer(wx.HORIZONTAL)

        self.m_panel10 = wx.Panel(self.Main_panel, wx.ID_ANY,
                                  wx.DefaultPosition, wx.DefaultSize,
                                  wx.TAB_TRAVERSAL)
        self.m_panel10.SetMaxSize(wx.Size(300, -1))

        bSizer141 = wx.BoxSizer(wx.VERTICAL)

        self.microDaq_Control_panel = wx.Panel(
            self.m_panel10, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, -1),
            wx.STATIC_BORDER | wx.TAB_TRAVERSAL)
        self.microDaq_Control_panel.SetMaxSize(wx.Size(300, 200))

        bSizer14 = wx.BoxSizer(wx.VERTICAL)

        microDAQSizer1 = wx.BoxSizer(wx.HORIZONTAL)

        bSizer15 = wx.BoxSizer(wx.VERTICAL)

        self.microDAQText1 = wx.StaticText(self.microDaq_Control_panel,
                                           wx.ID_ANY, u"microDAQ\nController",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.microDAQText1.Wrap(-1)
        self.microDAQText1.SetMaxSize(wx.Size(70, -1))

        bSizer15.Add(self.microDAQText1, 0, wx.ALL | wx.EXPAND, 5)

        self.m_staticline71 = wx.StaticLine(self.microDaq_Control_panel,
                                            wx.ID_ANY, wx.DefaultPosition,
                                            wx.DefaultSize, wx.LI_HORIZONTAL)
        bSizer15.Add(self.m_staticline71, 0, wx.EXPAND | wx.ALL, 5)

        self.microDAQ_Comannd = wx.TextCtrl(self.microDaq_Control_panel,
                                            wx.ID_ANY, wx.EmptyString,
                                            wx.DefaultPosition, wx.DefaultSize,
                                            0)
        self.microDAQ_Comannd.SetMaxSize(wx.Size(50, -1))

        bSizer15.Add(self.microDAQ_Comannd, 0, wx.ALL | wx.EXPAND, 5)

        microDAQSizer1.Add(bSizer15, 1, wx.EXPAND, 5)

        microDAQSiser2 = wx.GridSizer(5, 2, 0, 0)

        self.microDAQText2 = wx.StaticText(self.microDaq_Control_panel,
                                           wx.ID_ANY,
                                           u"Sample Frq", wx.DefaultPosition,
                                           wx.Size(60, -1), 0)
        self.microDAQText2.Wrap(-1)
        self.microDAQText2.SetFont(
            wx.Font(9, 70, 90, 90, False, wx.EmptyString))
        self.microDAQText2.SetMaxSize(wx.Size(65, 25))

        microDAQSiser2.Add(self.microDAQText2, 0,
                           wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)

        self.microDAQ_SampleFreq = wx.TextCtrl(self.microDaq_Control_panel,
                                               wx.ID_ANY, u"1000",
                                               wx.DefaultPosition,
                                               wx.DefaultSize, 0)
        self.microDAQ_SampleFreq.SetMaxSize(wx.Size(60, -1))

        microDAQSiser2.Add(self.microDAQ_SampleFreq, 0, wx.ALL, 5)

        self.microDAQText3 = wx.StaticText(self.microDaq_Control_panel,
                                           wx.ID_ANY, u"Sample N",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.microDAQText3.Wrap(-1)
        self.microDAQText3.SetFont(
            wx.Font(9, 70, 90, 90, False, wx.EmptyString))
        self.microDAQText3.SetMaxSize(wx.Size(60, 25))

        microDAQSiser2.Add(self.microDAQText3, 0,
                           wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)

        self.microDAQ_SampleN = wx.TextCtrl(self.microDaq_Control_panel,
                                            wx.ID_ANY, u"4096",
                                            wx.DefaultPosition, wx.DefaultSize,
                                            0)
        self.microDAQ_SampleN.SetMaxSize(wx.Size(60, -1))

        microDAQSiser2.Add(self.microDAQ_SampleN, 1, wx.ALL, 5)

        self.microDAQText4 = wx.StaticText(self.microDaq_Control_panel,
                                           wx.ID_ANY, u"St Unit No",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.microDAQText4.Wrap(-1)
        self.microDAQText4.SetFont(
            wx.Font(9, 70, 90, 90, False, wx.EmptyString))
        self.microDAQText4.SetMaxSize(wx.Size(60, -1))

        microDAQSiser2.Add(self.microDAQText4, 0,
                           wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)

        self.microDAQ_StUnit = wx.TextCtrl(self.microDaq_Control_panel,
                                           wx.ID_ANY, u"1", wx.DefaultPosition,
                                           wx.DefaultSize, 0)
        self.microDAQ_StUnit.SetMaxSize(wx.Size(60, -1))

        microDAQSiser2.Add(self.microDAQ_StUnit, 1, wx.ALL, 5)

        self.microDAQText5 = wx.StaticText(self.microDaq_Control_panel,
                                           wx.ID_ANY, u"Ed Unit No",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.microDAQText5.Wrap(-1)
        self.microDAQText5.SetFont(
            wx.Font(9, 70, 90, 90, False, wx.EmptyString))
        self.microDAQText5.SetMaxSize(wx.Size(60, -1))

        microDAQSiser2.Add(self.microDAQText5, 0,
                           wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)

        self.microDAQ_EdUnit = wx.TextCtrl(self.microDaq_Control_panel,
                                           wx.ID_ANY, u"12",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.microDAQ_EdUnit.SetMaxSize(wx.Size(60, -1))

        microDAQSiser2.Add(self.microDAQ_EdUnit, 1, wx.ALL, 5)

        self.microDAQ_GraphUnitNo1 = wx.StaticText(self.microDaq_Control_panel,
                                                   wx.ID_ANY, u"Graph Unit",
                                                   wx.DefaultPosition,
                                                   wx.DefaultSize, 0)
        self.microDAQ_GraphUnitNo1.Wrap(-1)
        self.microDAQ_GraphUnitNo1.SetFont(
            wx.Font(9, 70, 90, 90, False, wx.EmptyString))

        microDAQSiser2.Add(self.microDAQ_GraphUnitNo1, 0,
                           wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)

        self.microDAQ_GraphUnitNo = wx.TextCtrl(self.microDaq_Control_panel,
                                                wx.ID_ANY, u"1",
                                                wx.DefaultPosition,
                                                wx.DefaultSize, 0)
        self.microDAQ_GraphUnitNo.SetMaxSize(wx.Size(60, -1))

        microDAQSiser2.Add(self.microDAQ_GraphUnitNo, 0, wx.ALL, 5)

        microDAQSizer1.Add(microDAQSiser2, 1, wx.EXPAND, 5)

        microDAQSizer3 = wx.BoxSizer(wx.VERTICAL)

        self.microDAQ_ZeroStartButton = wx.Button(self.microDaq_Control_panel,
                                                  wx.ID_ANY, u"Zero Start",
                                                  wx.DefaultPosition,
                                                  wx.DefaultSize, 0)
        microDAQSizer3.Add(self.microDAQ_ZeroStartButton, 1,
                           wx.ALL | wx.EXPAND, 5)

        self.m_staticline1 = wx.StaticLine(self.microDaq_Control_panel,
                                           wx.ID_ANY, wx.DefaultPosition,
                                           wx.DefaultSize, wx.LI_HORIZONTAL)
        microDAQSizer3.Add(self.m_staticline1, 0, wx.ALL | wx.EXPAND, 5)

        self.microDAQ_ReadyButton = wx.Button(self.microDaq_Control_panel,
                                              wx.ID_ANY, u"Ready",
                                              wx.DefaultPosition,
                                              wx.DefaultSize, 0)
        microDAQSizer3.Add(self.microDAQ_ReadyButton, 1, wx.ALL | wx.EXPAND, 5)

        self.m_staticline7 = wx.StaticLine(self.microDaq_Control_panel,
                                           wx.ID_ANY, wx.DefaultPosition,
                                           wx.DefaultSize, wx.LI_HORIZONTAL)
        microDAQSizer3.Add(self.m_staticline7, 0, wx.EXPAND | wx.ALL, 5)

        self.microDAQ_StartButton = wx.Button(self.microDaq_Control_panel,
                                              wx.ID_ANY, u"Start",
                                              wx.DefaultPosition,
                                              wx.DefaultSize, 0)
        microDAQSizer3.Add(self.microDAQ_StartButton, 1, wx.ALL | wx.EXPAND, 5)

        microDAQSizer1.Add(microDAQSizer3, 1, wx.EXPAND, 5)

        bSizer14.Add(microDAQSizer1, 1, wx.EXPAND, 5)

        self.microDAQ_gauge = wx.Gauge(self.microDaq_Control_panel, wx.ID_ANY,
                                       100, wx.DefaultPosition, wx.DefaultSize,
                                       wx.GA_HORIZONTAL)
        self.microDAQ_gauge.SetValue(0)
        self.microDAQ_gauge.SetMinSize(wx.Size(-1, 10))

        bSizer14.Add(self.microDAQ_gauge, 0, wx.ALL | wx.EXPAND, 5)

        self.microDaq_Control_panel.SetSizer(bSizer14)
        self.microDaq_Control_panel.Layout()
        bSizer14.Fit(self.microDaq_Control_panel)
        bSizer141.Add(self.microDaq_Control_panel, 1,
                      wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)

        self.m_panel7 = wx.Panel(self.m_panel10, wx.ID_ANY, wx.DefaultPosition,
                                 wx.DefaultSize,
                                 wx.STATIC_BORDER | wx.TAB_TRAVERSAL)
        self.m_panel7.SetMinSize(wx.Size(-1, 150))
        self.m_panel7.SetMaxSize(wx.Size(-1, 150))

        bSizer10 = wx.BoxSizer(wx.HORIZONTAL)

        bSizer12 = wx.BoxSizer(wx.VERTICAL)

        self.m_staticText8 = wx.StaticText(self.m_panel7, wx.ID_ANY, u"チューブ補正",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.m_staticText8.Wrap(-1)
        self.m_staticText8.SetMinSize(wx.Size(100, -1))

        bSizer12.Add(self.m_staticText8, 0, wx.ALL, 5)

        self.TubeHoseiCheck = wx.CheckBox(self.m_panel7, wx.ID_ANY, u"On",
                                          wx.DefaultPosition, wx.DefaultSize,
                                          0)
        self.TubeHoseiCheck.SetValue(True)
        bSizer12.Add(self.TubeHoseiCheck, 0, wx.ALL, 5)

        bSizer10.Add(bSizer12, 1, wx.EXPAND, 5)

        gSizer2 = wx.GridSizer(3, 2, 0, 0)

        self.m_staticText9 = wx.StaticText(self.m_panel7, wx.ID_ANY, u"f0",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           0)
        self.m_staticText9.Wrap(-1)
        gSizer2.Add(self.m_staticText9, 0, wx.ALL | wx.ALIGN_RIGHT, 5)

        self.TubuHosei_f0_text = wx.TextCtrl(self.m_panel7, wx.ID_ANY, u"98.6",
                                             wx.DefaultPosition,
                                             wx.DefaultSize, 0)
        self.TubuHosei_f0_text.SetMaxSize(wx.Size(70, -1))

        gSizer2.Add(self.TubuHosei_f0_text, 0, wx.ALL, 5)

        self.m_staticText10 = wx.StaticText(self.m_panel7, wx.ID_ANY, u"h",
                                            wx.DefaultPosition, wx.DefaultSize,
                                            0)
        self.m_staticText10.Wrap(-1)
        gSizer2.Add(self.m_staticText10, 0, wx.ALL | wx.ALIGN_RIGHT, 5)

        self.TubuHosei_h_text = wx.TextCtrl(self.m_panel7, wx.ID_ANY, u"0.274",
                                            wx.DefaultPosition, wx.DefaultSize,
                                            0)
        self.TubuHosei_h_text.SetMaxSize(wx.Size(70, -1))

        gSizer2.Add(self.TubuHosei_h_text, 0, wx.ALL, 5)

        self.m_staticText11 = wx.StaticText(self.m_panel7, wx.ID_ANY, u"c",
                                            wx.DefaultPosition, wx.DefaultSize,
                                            0)
        self.m_staticText11.Wrap(-1)
        gSizer2.Add(self.m_staticText11, 0, wx.ALL | wx.ALIGN_RIGHT, 5)

        self.TubuHosei_c_text = wx.TextCtrl(self.m_panel7, wx.ID_ANY, u"1.034",
                                            wx.DefaultPosition, wx.DefaultSize,
                                            0)
        self.TubuHosei_c_text.SetMaxSize(wx.Size(70, -1))

        gSizer2.Add(self.TubuHosei_c_text, 0, wx.ALL, 5)

        bSizer10.Add(gSizer2, 1, wx.EXPAND, 5)

        self.m_panel7.SetSizer(bSizer10)
        self.m_panel7.Layout()
        bSizer10.Fit(self.m_panel7)
        bSizer141.Add(self.m_panel7, 1, wx.EXPAND | wx.ALL, 5)

        self.WhiteNoise_Contol_panel = wx.Panel(
            self.m_panel10, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1, 500),
            wx.STATIC_BORDER | wx.TAB_TRAVERSAL)
        self.WhiteNoise_Contol_panel.SetMinSize(wx.Size(-1, 500))
        self.WhiteNoise_Contol_panel.SetMaxSize(wx.Size(-1, 300))

        ConsoleSizer1 = wx.BoxSizer(wx.VERTICAL)

        self.ConsoleBox = wx.TextCtrl(self.WhiteNoise_Contol_panel, wx.ID_ANY,
                                      wx.EmptyString, wx.DefaultPosition,
                                      wx.Size(-1, 400),
                                      wx.HSCROLL | wx.TE_MULTILINE)
        self.ConsoleBox.SetMinSize(wx.Size(-1, 420))

        ConsoleSizer1.Add(self.ConsoleBox, 1, wx.ALL | wx.EXPAND, 5)

        self.WhiteNoise_Contol_panel.SetSizer(ConsoleSizer1)
        self.WhiteNoise_Contol_panel.Layout()
        bSizer141.Add(self.WhiteNoise_Contol_panel, 1, wx.ALL | wx.EXPAND, 5)

        self.m_panel10.SetSizer(bSizer141)
        self.m_panel10.Layout()
        bSizer141.Fit(self.m_panel10)
        MainPanelSizer.Add(self.m_panel10, 1, wx.EXPAND | wx.ALL, 5)

        self.Graph_panel = wx.Panel(self.Main_panel, wx.ID_ANY,
                                    wx.DefaultPosition, wx.DefaultSize,
                                    wx.STATIC_BORDER | wx.TAB_TRAVERSAL)
        MainPanelSizer.Add(self.Graph_panel, 1, wx.ALL | wx.EXPAND, 5)

        self.Main_panel.SetSizer(MainPanelSizer)
        self.Main_panel.Layout()
        bSizer1.Add(self.Main_panel, 1, wx.ALL | wx.EXPAND, 5)

        self.SetSizer(bSizer1)
        self.Layout()
        self.micoroDAQ_timer1 = wx.Timer()
        self.micoroDAQ_timer1.SetOwner(self, wx.ID_ANY)

        # Connect Events
        self.microDAQ_Comannd.Bind(wx.EVT_TEXT, self.CommadExec)
        self.microDAQ_ZeroStartButton.Bind(wx.EVT_BUTTON,
                                           self.MIcroDAQ_ZeroStart)
        self.microDAQ_ReadyButton.Bind(wx.EVT_BUTTON, self.microDAQ_Ready)
        self.microDAQ_StartButton.Bind(wx.EVT_BUTTON, self.microDAQ_Start)
        self.Bind(wx.EVT_TIMER, self.microDAQ_Measure, id=wx.ID_ANY)

        # ここから上をwxFormBuilderからコピペすること。

        self.microDAQ_StartButton.Enabled = False
        self.microDAQ_ReadyButton.Enabled = False

        #         self.AO_SinWaveStartButton.Enabled = True
        #         self.AO_SinWaveStopButton.Enabled = False
        #
        #         self.AO_NoiseStartButton.Enabled = True
        #         self.AO_NoiseStopButton.Enabled = False

        self.GraphDataExist = False

        self.ZeroFlag = False
        self._ReadyFlag = False

        self.figure = Figure(None)  # Figure(グラフの台紙)オブジェクトを生成
        self._Ch_n = self.ChannelChange(32)
#         print(self._Ch_n)

    def __del__(self):
        pass

    # Virtual event handlers, overide them in your derived class

#             ReDim Ch_N(Ch_number - 1)
#             For i As Integer = 1 To Ch_number
#                 Dim kk As Integer
#                 If i <= 16 Then
#                     If i < 9 Then
#                         kk = CInt(i * 2)
#                     Else
#                         kk = CInt((i - 8.5) * 2)
#                     End If
#                 Else
#                     If (i - 16) < 9 Then
#                         kk = CInt((i - 16) * 2) + 16
#                     Else
#                         kk = CInt((i - 16 - 8.5) * 2) + 16
#                     End If
#                 End If
#                 Ch_N(i - 1) = kk - 1
#             Next

    def ChannelChange(self, n):
        # 測定番号並び替えマトリックス(旧システムとの互換性のため)

        Ch_n = []
        for j in range(n):
            i = j + 1
            if i <= 16:
                if i < 9:
                    kk = int(i * 2)
                else:
                    kk = int((i - 8.5) * 2)
            else:
                if (i - 16) < 9:
                    kk = int((i - 16) * 2) + 16
                else:
                    kk = int((i - 16 - 8.5) * 2) + 16
            Ch_n.append(kk - 1)

        return Ch_n

    def CommadExec(self, event):

        command = self.microDAQ_Comannd.Value
        #         print(command)

        if command == 'Zero':
            #             data = self.data1
            self.InitData = np.zeros((32, self._UnitN))

            for i in range(self._UnitN):

                for j in range(32):

                    # 平均値の計算

                    self.InitData[j, i] = np.average(self.data1[:, j, i])

            self._microDAQ_Close()
            self.ZeroFlag = True
            self.microDAQ_ReadyButton.Enabled = True

        elif command == 'Measure':
            self.micro_data = self.data1
            self._microDAQ_Close()
            #             t=np.arange(self.microN)/self.microFreq
            Ch = 32

            #             # データの並び替え(旧システムにあわせるため)
            #             d1 = np.zeros((self._SampleN,Ch,self._UnitN))
            #             for j in range(self._UnitN):
            #                 for i in range(Ch):
            #                     d1[:,i,j]=self.micro_data[:,self._Ch_n[i],j]
            #
            #             self.micro_data = d1

            tb = TubuHosei(self._f0, self._h, self._c, 1.0 / self._SampleFreq)

            for j in range(self._UnitN):
                for i in range(Ch):
                    x = self.micro_data[:, i, j] - self.InitData[i, j]
                    x = x * self.Coe
                    if self._TubuHoseiFlag:
                        x = tb.Hosei(x)

                    self.micro_data[:, i, j] = x

    #                 x=x-np.average(x)

            self.PlotGraphWindow(self.Graph_panel,
                                 n1=8,
                                 m1=4,
                                 data=self.micro_data,
                                 Freq=self._SampleFreq,
                                 SampleN=self._SampleN)
            #             plt.subplot(8,4,i+1)
            #             plt.plot(t,x)
            #
            #         plt.show()

            self.microDAQ_ReadyButton.Enabled = True
            self.microDAQ_StartButton.Enabled = False
            self.microDAQ_Done = True

    def MIcroDAQ_ZeroStart(self, event):
        #         event.Skip()
        Freq = float(self.microDAQ_SampleFreq.Value)
        N = 3000
        ST = int(self.microDAQ_StUnit.Value)
        ED = int(self.microDAQ_EdUnit.Value)
        #         Coe=0.030413

        self._microDAQ(StartUnitNo=ST,
                       EndUnitNo=ED,
                       SampleFreq=Freq,
                       SampleN=N)
        self._microDAQ_Ready()
        sleep(0.5)
        self.command = 'Zero'
        self.BarN = N
        self._microDAQ_Start()

#         self.InitData=np.zeros((32,ED-ST+1))
#         for i in range(ED-ST+1):
#             for j in range(32):
#                 self.InitData[j,i]=np.average(data[:,j,i])
#
#         self._microDAQ_Close()
#
#         self.microDAQ_ReadyButton.Enabled=True
# #         print(self.InitData[:,0])

    def microDAQ_Ready(self, event):
        #         event.Skip()
        if self.ZeroFlag:
            self.microFreq = float(self.microDAQ_SampleFreq.Value)
            self.microN = int(self.microDAQ_SampleN.Value)
            self.microST = int(self.microDAQ_StUnit.Value)
            self.microED = int(self.microDAQ_EdUnit.Value)
            self.Coe = 0.030413

            self._microDAQ(StartUnitNo=self.microST,
                           EndUnitNo=self.microED,
                           SampleFreq=self.microFreq,
                           SampleN=self.microN)
            self._microDAQ_Ready()
            self.microDAQ_Comannd.Value = ''

            sleep(0.5)
            self.microDAQ_StartButton.Enabled = True
            self.microDAQ_ReadyButton.Enabled = False
        else:
            pass

    def microDAQ_Start(self, event):
        #         event.Skip()
        if self._ReadyFlag:
            self.command = 'Measure'
            self.BarN = self.microN
            self.microDAQ_Done = False
            self._microDAQ_Start()
        else:
            pass

#
#         self._microDAQ_Close()
#         t=np.arange(self.microN)/self.microFreq
#         Ch=32
#         for j in range(self._UnitN):
#             for i in range(Ch):
#                 x=self.micro_data[:,i,j]-self.InitData[i,j]
#                 x=x*self.Coe
#                 self.micro_data[:,i,j]=x
# #                 x=x-np.average(x)
#
#         self.PlotGraphWindow(self.Graph_panel1,n1=9,m1=4,data=self.micro_data,
#                              Freq=self._SampleFreq,SampleN=self._SampleN)
# #             plt.subplot(8,4,i+1)
# #             plt.plot(t,x)
# #
# #         plt.show()
#
#         self.microDAQ_ReadyButton.Enabled=True
#         self.microDAQ_StartButton.Enabled=False

    def microDAQ_Measure(self, event):

        buf1 = self._buf_size * self._Nbuf  # 読み込みバッファ

        for j in range(len(self._host)):

            try:
                b = self._mySocket[j].recv(buf1)
            except (OSError, socket.timeout):
                pass
#                 print('timeout1')

#                     if j==0:
#                         print(step,j,len(b),b[0],b[1],b[2],b[67],b[68],b[len(b)-2],b[len(b)-1])

# microDAQモジュール毎にデータを追加
            self.data[j].extend(b)

            # データ数をカウント(67バイトで1ステップ)
            if j == 0:
                self.step += int(len(b) / 67)
                self.microDAQ_gauge.Value = int(self.step / self.BarN * 100)

        # データ数を超えたら読み込み中止
        if int(self.step) >= self._SampleN:
            self.microDAQ_gauge.Value = 100
            self.micoroDAQ_timer1.Stop()
            self.flag = False

            self.t2 = time.time()

            # ファンクションジェネレーターの矩形波の停止
            self.FG.FGStop()

            sleep(1.0)  # 時間調整(重要)

            # microDAQモジュールの測定停止コマンドの送信
            for i in range(len(self._host)):
                try:
                    self._mySocket[i].send(self._StopCMD[0].encode())
                    sleep(0.5)
                    a = self._mySocket[i].recv(1024)
                    a = a[len(a) - 2:len(a)]
    #                 print(i,a.decode())
                except (OSError, socket.timeout):
                    print('timeout2')

    #         for i in range(len(host)):
    #             mySocket[i].close()

    # 3次元配列の作成(データはゼロ)
            self.data1 = np.zeros((self._SampleN, 32, self._UnitN))

            # 読み込み配列を16ビット整数に変換して3次元配列に組み込み
            for i in range(len(self._host)):
                offset1 = 0
                #             dd1=[]
                dd1 = np.zeros((self._SampleN, 32))  # zeroの次元配列の生成
                d = bytearray(self.data[i])  # 読み込み配列をバイト配列に変換

                # 67バイト毎に32個の16ビット整数に変換
                for j in range(self._SampleN):
                    offset1 += 3  # はじめの3ビットは読み飛ばし

                    # 16ビットSignedInt(ビックエンディアン)に変換
                    dd = struct.unpack_from('>32H', d, offset1)

                    # チャンネルの並び替え(旧システムと合わすため)
                    dd2 = []
                    for k in range(32):
                        dd2.append(dd[self._Ch_n[k]])

                    # 2次元配列に組み込み
                    dd1[j, :] = dd2

                    offset1 += 64  # オフセットを 64バイト加算

                # 2次元配列を3次元配列に組み込み
                self.data1[:, :, i] = dd1

            self._Mtime = self.t2 - self.t1
            #             print(self._Mtime)

            self._ReadyFlag = False
            self.microDAQ_gauge.Value = 0

            self.microDAQ_Comannd.Value = self.command

#             return self.data1   # 3次元配列をリターン

    def _microDAQ(self,
                  StartUnitNo=1,
                  EndUnitNo=12,
                  SampleFreq=1000.0,
                  SampleN=10000):

        self._buf_size = 670
        self._Nbuf = 3

        self._StartUnitNo = StartUnitNo
        self._EndUnitNo = EndUnitNo
        self._SampleFreq = SampleFreq
        self._SampleN = SampleN
        self._UnitN = self._EndUnitNo - self._StartUnitNo + 1
        self._host = []
        self._port = []
        self._Step = 0
        self._Mtime = 0
        self._ReadyFlag = False

        # バッファサイズの設定
        RBuffer = 1024 * 256
        SBuffer = 1024 * 256

        #         self.intTime = 0.01

        # microDAQモジュールのIPアドレスとポート番号を設定
        for i in range(self._UnitN):
            n = 180 + i + self._StartUnitNo
            self._host.append('192.168.1.' + str(n))
            self._port.append(101)

        self._mySocket = []
        for i in range(len(self._host)):
            # microDAQモジュール毎に通信ソケットを生成
            self._mySocket.append(
                socket.socket(socket.AF_INET, socket.SOCK_STREAM))

        # 通信ソケットのバッファサイズを設定
        for i in range(len(self._host)):
            self._mySocket[i].setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF,
                                         SBuffer)

            self._mySocket[i].setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF,
                                         RBuffer)

#         for i in range(len(self._host)):
#             print(self._mySocket[i].getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF))
#             print(self._mySocket[i].getsockopt(socket.SOL_SOCKET,socket.SO_SNDBUF))

# microDAQモジュールの通信ソケットに接続
        for i in range(len(self._host)):
            self._mySocket[i].connect((self._host[i], self._port[i]))
            self._mySocket[i].settimeout(0.1)

        # microDAQモジュールの測定開始コマンドの作成
        self._StartCMD = []
        self._StartCMD.append(chr(62) + chr(80) + chr(17) + chr(67) + chr(60))
        self._StartCMD.append(chr(62) + chr(84) + chr(17) + chr(71) + chr(60))
        self._StartCMD.append(chr(62) + chr(80) + chr(17) + chr(67) + chr(60))
        self._StartCMD.append(chr(62) + chr(84) + chr(17) + chr(71) + chr(60))

        # microDAQモジュールの測定終了コマンドの作成
        self._StopCMD = []
        self._StopCMD.append(chr(62) + chr(84) + chr(1) + chr(87) + chr(60))

        # ファンクションジェネレーターの設定と初期化
        self.FG = FGControl.FGC('COM5')
        self.FG.FGInit()

        self.microDAQ_gauge.Value = 0

    def _microDAQ_Ready(self):
        # microDAQモジュールの測定開始コマンドの送信

        self.microDAQ_gauge.Value = 0

        for j in range(len(self._StartCMD)):
            for i in range(len(self._host)):
                self._mySocket[i].send(self._StartCMD[j].encode())
                a = self._mySocket[i].recv(1024)
#                 print(i,a.decode())

            sleep(0.5)

        self._ReadyFlag = True

    def _microDAQ_Start(self):
        # microDAQモジュールの測定スタート

        if self._ReadyFlag:  # Ready関数が実行された後に読み込み開始

            self.t1 = time.time()
            # ファンクションジェネレーターの矩形波の発信(サンプリング信号)
            self.FG.FGStart(self._SampleFreq)

            self.step = 0

            # 読み込み配列の初期化
            self.data = []

            for i in range(len(self._host)):
                # 読み込み配列を2次元配列に
                self.data.append([])

            sleep(0.2)  # 時間調整(重要)

            # データの読み込み開始
            self.flag = True
            #             i=0
            #             buf1 = self._buf_size*self._Nbuf    # 読み込みバッファ

            self._f0 = float(self.TubuHosei_f0_text.Value)
            self._h = float(self.TubuHosei_h_text.Value)
            self._c = float(self.TubuHosei_c_text.Value)
            self._TubuHoseiFlag = self.TubeHoseiCheck.Value

            self.microDAQ_gauge.Value = 0
            self.micoroDAQ_timer1.Start(10)

#             while flag:
#                 i+=1
#     #             t2=time.time()
#     #             sleep(0.010)
#                 for j in range(len(self._host)):
#
#                     try:
#                         b=self._mySocket[j].recv(buf1)
#                     except(OSError,socket.timeout):
#                         print('timeout1')
#
# #                     if j==0:
# #                         print(step,j,len(b),b[0],b[1],b[2],b[67],b[68],b[len(b)-2],b[len(b)-1])
#
#                     # microDAQモジュール毎にデータを追加
#                     self.data[j].extend(b)
#
#                     # データ数をカウント(67バイトで1ステップ)
#                     if j==0:
#                         step +=int(len(b)/67)
#                         self.microDAQ_gauge.Value = int(step/self._SampleN * 100)
#
#                 # データ数を超えたら読み込み中止
#                 if int(step)>=self._SampleN:
#                     flag=False
#                     self.microDAQ_gauge.Value = 100
#
#             t2 = time.time()
#
#             # ファンクションジェネレーターの矩形波の停止
#             self.FG.FGStop()
#
#             sleep(1.0)  # 時間調整(重要)
#
#             # microDAQモジュールの測定停止コマンドの送信
#             for i in range(len(self._host)):
#                 try:
#                     self._mySocket[i].send(self._StopCMD[0].encode())
#                     sleep(0.5)
#                     a=self._mySocket[i].recv(1024)
#                     a=a[len(a)-2:len(a)]
#     #                 print(i,a.decode())
#                 except (OSError,socket.timeout):
#                     print('timeout2')
#
#     #         for i in range(len(host)):
#     #             mySocket[i].close()
#
#             # 3次元配列の作成(データはゼロ)
#             self.data1= np.zeros((self._SampleN,32,self._UnitN))
#
#             # 読み込み配列を16ビット整数に変換して3次元配列に組み込み
#             for i in range(len(self._host)):
#                 offset1=0
#     #             dd1=[]
#                 dd1 = np.zeros((self._SampleN,32))  # zeroの次元配列の生成
#                 d=bytearray(self.data[i])           # 読み込み配列をバイト配列に変換
#
#                 # 67バイト毎に32個の16ビット整数に変換
#                 for j in range(self._SampleN):
#                     offset1 +=3             # はじめの3ビットは読み飛ばし
#
#                     # 16ビットSignedInt(ビックエンディアン)に変換
#                     dd = struct.unpack_from('>32H', d, offset1)
#                     # 2次元配列に組み込み
#                     dd1[j,:]=dd
#
#                     offset1 +=64    # オフセットを 64バイト加算
#
#
#                 # 2次元配列を3次元配列に組み込み
#                 self.data1[:,:,i] = dd1
#
#
#             self._Mtime=t2-t1
#             print(self._Mtime)
#
#             self._ReadyFlag = False
#             self.microDAQ_gauge.Value = 0
#
#             return self.data1   # 3次元配列をリターン
#
#         else:
#             self.data1=np.zeros((1,1,1))
#             self.microDAQ_gauge.Value = 0
#
#             return self.data1

    def _microDAQ_Close(self):

        for i in range(len(self._host)):
            self._mySocket[i].close()

    def PlotGraphWindow(self,
                        panel1=wx.Panel,
                        n1=2,
                        m1=2,
                        data=None,
                        Freq=1000.0,
                        SampleN=1000):
        '''
        Windowのpanelにグラフを描画する関数
        '''

        #         if self.GraphDataExist:
        #             self.EraseGraphWindow(panel1)

        #         print(self.radiobutton_1.GetValue())
        #         from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
        #         from matplotlib.figure import Figure
        #         self.figure = Figure(  None )    # Figure(グラフの台紙)オブジェクトを生成
        self.figure.clf(keep_observers=False)
        self.figure.set_facecolor((0.8, 0.8, 0.8))  # Figureの表面色を設定

        #panel2にFigureを貼り付けcanvasを生成
        self.canvas = FigureCanvasWxAgg(panel1, -1, self.figure)
        self.canvas.SetSize(tuple(
            self.Graph_panel.GetClientSize()))  # canvasのサイズをpanel2に合わせる。
        #         print(self.canvas.Size,self.canvas.Position)

        self.canvas.SetBackgroundColour(wx.Colour(
            100, 0, 255))  # Canvasの背景色を設定(これは不要?)
        self.n = n1
        self.m = m1
        #         self.MakeWaveData(self.n * self.m)
        #         self.MakeWaveData(7)

        self.y = data[:, :, int(self.microDAQ_GraphUnitNo.Value) - 1]
        self.x = np.arange(SampleN) / Freq
        Draw_Graph(self.figure, self.n, self.m, self.x, self.y)

        self.GraphDataExist = True

    def EraseGraphWindow(self, panel1=wx.Panel):
        '''
        Windowのpanelのグラフを消去する関数
        '''
        #         print(self.radiobutton_1.GetValue())
        from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
        from matplotlib.figure import Figure
        self.figure = Figure(None)  # Figure(グラフの台紙)オブジェクトを生成
        self.figure.set_facecolor((1.0, 1.0, 1.0))  # Figureの表面色を設定

        #panel2にFigureを貼り付けcanvasを生成
        self.canvas = FigureCanvasWxAgg(panel1, -1, self.figure)
        self.canvas.SetSize(tuple(
            panel1.GetClientSize()))  # canvasのサイズをpanel2に合わせる。

        self.GraphDataExist = False

    def PrintEventHandler(self, event):
        self.PlotGraphPDF()

    def PlotGraphPDF(self):
        '''
        PDFにグラフを描画する関数
        '''
        from matplotlib.backends.backend_pdf import FigureCanvasPdf
        from matplotlib.backends.backend_pdf import PdfPages  # PDFを作成するモジュールの読込
        import os

        if self.GraphDataExist:
            iDir = os.getcwd()  #カレントディレクトリーの読込
            iFile = 'test.pdf'
            openFileDialog = wx.FileDialog(self, "PDFファイルの保存", iDir, iFile,
                                           "PDF files (*.pdf)|*.pdf",
                                           wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

            _filename = ''
            openFileDialog.ShowModal()
            _filename = openFileDialog.GetPath()
            if _filename != '':
                #         from matplotlib.figure import Figure
                #         if event == wx.EVT_BUTTON:
                #             print(event)

                #         self.figure = Figure(  None )    # Figure(グラフの台紙)オブジェクトを生成
                self.figure.set_size_inches(298. / 25.4, 210. / 25.4, True)
                self.figure.set_dpi(600)
                self.figure.set_facecolor((0.7, 0.7, 1.0))  # Figureの表面色を設定

                pdf1 = PdfPages(_filename)
                self.canvas = FigureCanvasPdf(
                    self.figure)  # Canvas(グラフ)オブジェクトをfigure上に生成

                #         Draw_Graph(self.figure)

                pdf1.savefig(self.figure)
                pdf1.close()
            else:
                print('Print Cancel')
        else:
            dlg = wx.MessageDialog(self, '作図データがありません', '警告',
                                   wx.OK | wx.ICON_WARNING)
            dlg.ShowModal()
            dlg.Destroy()