最近在一个python工具中需要实现串口自动触发工作的功能,之前只在winform上面实现,今天使用python试试。这里简单记一下:
首先用wxpython实现一个Button,点击事件绑定函数OnButtonAutoStopAll
1
2
3
4
5
6
7
|
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控件实现点击下拉时自动加载当前串口名
1
2
3
|
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) |
下拉菜单事件函数
1
2
3
4
5
6
7
8
9
10
11
12
|
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信号来触发。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#串口自动触发检测线程 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信号置低时触发工作
以上这篇python实现串口自动触发工作的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/ubuntu14/article/details/75335106