python实现串口自动触发工作

最近在一个python工具中需要实现串口自动触发工作的功能,之前只在winform上面实现,今天使用python试试。这里简单记一下:

首先用wxpython实现一个Button,点击事件绑定函数OnButtonAutoStopAll

self.button_autoStopAll = wx.Button(id=wxID_FRAME1BUTTONAUTOSTARTALL, label=u'AUTO STOP ALL',
              name='button_autoStop', parent=self.staticBox_common, pos=wx.Point(8, 284),
              size=wx.Size(180, 80), style=0)
        self.button_autoStopAll.SetFont(wx.Font(24, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              u'Agency FB'))
        self.button_autoStopAll.Bind(wx.EVT_BUTTON, self.OnButtonAutoStopAll,
              id=wxID_FRAME1BUTTONAUTOSTARTALL)

再有ComboBox控件实现点击下拉时自动加载当前串口名

	self.combox = wx.ComboBox(self, -1, pos=wx.Point(10,100), size=wx.Size(100,50), 
         style=wx.CB_READONLY)	#串口combox
	self.combox.Bind(wx.EVT_COMBOBOX_DROPDOWN, self.evt_combox_dropdown)
下拉菜单事件函数
def evt_combox_dropdown(self, event):
        print 'combox%d dropdown'%self.sta_num
        serial_list = list(serial.tools.list_ports.comports())
        if serial_list:	#判断是否为空
            portName_list = []
			#转换serial handle为port name
            for i in range(0, len(serial_list)):
                portname = list(serial_list[i])
                portName_list.append(str(portname[0]))
            print portName_list
        
        self.combox.SetItems(portName_list)

然后进入正题,这里根据DSR信号来触发。

#串口自动触发检测线程
class Job(threading.Thread):
    ...

    def run(self):
        while self.__running.isSet():
            self.__flag.wait()              # 为True时立即返回, 为False时阻塞直到内部的标识位为True后返回
            print "into job function"
	    i=0
            isOpen = serial_isOpen(i)
            if serial_list[i]!=1 and isOpen:
               now_dsr = serial_list[i].getDSR()
               if now_dsr != last_dsr[i]:
                    last_dsr[i] = now_dsr
                    print 'dsr level changed to %d'%now_dsr
                    if now_dsr == True:
                        if thread_list[i] != 1:
                            if ~thread_list[i].is_alive():
                                serial_Open(0, False)
                                #do something
                        else:
                            serial_Open(0, False)
                            #do something
                break
            time.sleep(1)

    ...

即每当DSR信号置低时触发工作

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值