Real World Instrumentation with Python" # by J

Real World Instrumentation with Python" # by J

CHAPTER 13 User Interfaces 7KH3ULQFLSOHRI/HDVW$VWRQLVKPHQW0DNHDXVHU LQWHUIDFHDVFRQVLVWHQWDQGDVSUHGLFWDEOHDVSRVVLEOH ¢$QRQ\PRXV 8QOHVVDQDSSOLFDWLRQLVGHHSO\HPEHGGHGRUVSHFLILFDOO\GHVLJQHGWRUXQDVDEDFN JURXQGSURFHVVLWZLOOSUREDEO\QHHGVRPHW\SHRIXVHULQWHUIDFH,QWKLVFKDSWHUZH ZLOOH[SORUHGLIIHUHQWZD\VWRFRPPXQLFDWHZLWKDXVHU:H¦OOVWDUWE\H[DPLQLQJZKDW \RXFDQGRZLWKMXVWWKHFRPPDQGOLQH1H[WZH¦OOORRNDWKRZWRXVHDQ$16,FDSDEOH WHUPLQDOHPXODWRUSURJUDPWRGLVSOD\GDWDDQGDFFHSWLQSXWDQGWKHQWKHcursesVFUHHQ FRQWUROSDFNDJHIRU3\WKRQ$IWHUWKLVZH¦OOPRYHWRWKHUHDOPRIEULJKWFRORUVIDQF\ JUDSKVLPDJHVDQGGLDORJVZLWKDORRNDWWKH7N,QWHU*8,WRRONLWSURYLGHGZLWK WKHVWDQGDUG3\WKRQGLVWULEXWLRQ:H¦OODOVRWDNHDTXLFNWRXURIWKHZ[3\WKRQ*8, SDFNDJH Text-Based Interfaces 7H[WEDVHGLQWHUIDFHVDUHWKHIRXQGDWLRQRIDOOGLVSOD\EDVHGFRPSXWHUXVHULQWHUIDFHV ,VD\GLVSOD\EDVHGEHFDXVHWHFKQLFDOO\WKHILUVWLQWHUIDFHVZHUHSDQHOVIXOORIOLJKWVDQG VZLWFKHV3ULQWLQJWHUPLQDOVFDPHQH[WEXWLWZDVQ¦WXQWLOWKHDGYHQWRI&57WHUPLQDOV WKDWKXPDQPDFKLQHLQWHUIDFH +0, GHYLFHVEHJDQWRFRPHLQWRWKHLURZQ The Console 7KHPRVWVWUDLJKWIRUZDUGZD\WRLQWHUDFWZLWKDQ\SURJUDP3\WKRQRURWKHUZLVHLV WKURXJKWKHFRQVROHLQWHUIDFH8QGHU:LQGRZVWKLVLVWKHVRFDOOHG£'26ER[¤RUWKH £FPG SURPSW¤ DV LW¦V FXUUHQWO\ NQRZQ WKH :LQGRZV VKHOO DSSOLFDWLRQ LV FDOOHG FPGH[H 2QD8QL[RU/LQX[V\VWHPLWLVWKHVKHOOSURPSWIRUVKEDVKNVKWVFKRU ZKDWHYHUHOVH\RXPD\KDSSHQWREHXVLQJIRUDVKHOOLQWHUIDFH,IQRZLQGRZPDQDJHU LVDFWLYHWKHZKROHVFUHHQLVWKHFRQVROHEXWLWEHKDYHVMXVWOLNHWKHZLQGRZHGIRUP 487 6HQGLQJGDWDWRWKHVKHOOLQWKHIRUPRIVWULQJVLVHDV\¢WKDW¦VZKDWWKHprintVWDWHPHQW GRHV*HWWLQJLQSXWEDFNIURPDXVHULVQRWDVLQWXLWLYHO\REYLRXVPDLQO\EHFDXVH3\ WKRQGRHVQRWKDYHFURVVSODWIRUPHTXLYDOHQWVRIgetch()RUgetche() JHWFKDUDFWHU DQGJHWFKDUDFWHUZLWKHFKRUHVSHFWLYHO\ ,WGRHVKRZHYHUKDYHWKHraw_input()EXLOW LQPHWKRGZKLFKFDQKDQGOHPRVWRIWKHFRPPRQXVHULQSXWFKRUHVDQGLWZRUNVRQ DOOWKHSODWIRUPVWKDW3\WKRQVXSSRUWV6KRUWO\,¦OOVKRZ\RXKRZWRXVHFW\SHVDQGWKH &UXQWLPHOLEUDU\IRUERWK/LQX[DQG:LQGRZVEXWILUVWOHW¦VVHHKRZPXFKZHFDQGR ZLWKMXVWWKHFRQVROHLQWHUIDFH Example console display :KLOH\RXFRXOGDOZD\VMXVWXVHRFFDVLRQDOprintVWDWHPHQWVWRRXWSXWGDWDWRWKH FRQVROHLWPLJKWEHGLIILFXOWIRUDXVHUWRWHOOZKDW¦VKDSSHQLQJDVWKHGDWDVFUROOVE\ RQWKHVFUHHQ(VWDEOLVKLQJDWHPSODWHIRUWKHGDWDGLVSOD\DQGXVLQJDIL[HGIRUPDW PDNHVWKHGDWDHDVLHUWRUHDGDQGJUHDWO\UHGXFHVXVHUIUXVWUDWLRQ DQGWKDWXVHUPLJKW EH\RX ,I\RXZDQWWRXVHDIL[HGIRUPDWIRUGDWDRXWSXWWRWKHFRQVROH\RX¦OOQHHGDWOHDVWWZR WKLQJVVRPHZD\WRFOHDUWKHVFUHHQDQGDWHPSODWHWRFRQWDLQ\RXUGDWD:H¦OOORRN DWWKHWHPSODWHILUVW 8QOHVVZHUHVRUWWR$16,WHUPLQDOFRQWUROVWULQJV GLVFXVVHGLQWKHQH[WVHFWLRQ D SURJUDPGRHVQ¦WKDYHDQ\ZD\WRSRVLWLRQWKHFXUVRULQWKHFRQVROHZLQGRZ(DFKOLQH LQWKHGLVSOD\QHHGVWRWDNHFDUHRILWVRZQSRVLWLRQLQJDQGGDWDGLVSOD\IRUPDWWLQJ 7KHOLVWLQJIRUconsole1.pyVKRZVKRZWKLVLVGRQH #! /usr/bin/python # console1.py # # Demonstrates console output using the built-in print method. # # Source code from the book "Real World Instrumentation with Python" # By J. M. Hughes, published by O'Reilly. import time ainstat = ['OFF','OFF','OFF','OFF'] aindata = [0.0, 0.0, 0.0, 0.0] discstate = ['OFF','OFF','OFF','OFF','OFF','OFF','OFF','OFF'] discin = [0,0,0,0,0,0,0,0] print '\n' * 50 print "" print "System Status" print "" print "Analog Input 0 : %10s %f" % (ainstat[0], aindata[0]) print "Analog Input 1 : %10s %f" % (ainstat[1], aindata[1]) print "Analog Input 2 : %10s %f" % (ainstat[2], aindata[2]) print "Analog Input 3 : %10s %f" % (ainstat[3], aindata[3]) print "" print "Discrete Input 0: %3s %d" % (discstate[0], discin[0]) 488 | Chapter 13:ಗUser Interfaces print "Discrete Input 1: %3s %d" % (discstate[1], discin[1]) print "Discrete Input 2: %3s %d" % (discstate[2], discin[2]) print "Discrete Input 3: %3s %d" % (discstate[3], discin[3]) print "Discrete Input 4: %3s %d" % (discstate[4], discin[4]) print "Discrete Input 5: %3s %d" % (discstate[5], discin[5]) print "Discrete Input 6: %3s %d" % (discstate[6], discin[6]) print "Discrete Input 7: %3s %d" % (discstate[7], discin[7]) print "" time.sleep(2) 9HUWLFDOSRVLWLRQLQJLVEDVHGRQWKHRUGHULQZKLFKWKHOLQHVDUHSULQWHGRXWWRWKH FRQVROHDQGKRUL]RQWDOSRVLWLRQLQJLVGHWHUPLQHGE\KRZHDFKOLQHLVIRUPDWWHG7KH OLQHRIFRGHLPPHGLDWHO\IROORZLQJWKHIRXUYDULDEOHLQLWLDOL]DWLRQOLQHVprint "\n" * 50VLPXODWHVD£FOHDUVFUHHQ¤E\JHQHUDWLQJEODQNOLQHV,XVHGEHFDXVH,KDYH ODUJHFRPPDQGOLQHZLQGRZVEXWJHQHUDWLQJPRUHEODQNOLQHVWKDQWKHZLQGRZVXS SRUWVGRHVQRWKXUWDQ\WKLQJ7KHUHVXOWORRNVOLNHWKLV System Status Analog Input 0 : ACTIVE 0.000000 Analog Input 1 : OFF 0.000000 Analog Input 2 : ACTIVE 0.000000 Analog Input 3 : OFF 0.000000 Discrete Input 0: OFF 0 Discrete Input 1: OFF 1 Discrete Input 2: OFF 0 Discrete Input 3: OFF 0 Discrete Input 4: OFF 0 Discrete Input 5: OFF 0 Discrete Input 6: OFF 0 Discrete Input 7: OFF 0 6LQFHWKHUDZFRQVROH,2GRHVQ¦WKDYHDJHQHULFFOHDUVFUHHQIXQFWLRQDVHULHVRISULQW VWDWHPHQWVZLWKHPSW\VWULQJVFDQEHXVHGWRVFUROORIIDQ\WKLQJFXUUHQWO\RQWKHGLVSOD\ LQRUGHUWRPDNHURRPIRUQHZGDWD1RWHWKDWLIWKHZLQGRZLVODUJHUWKDQWKHQXPEHU RIOLQHVLQWKHWHPSODWHWKHWHPSODWHWH[WZLOOHQGXSDWWKHERWWRPRIWKHZLQGRZ WKH ODVWOLQHSULQWHGZLOOEHMXVWDERYHWKHSURPSW +RZHYHUWKHUHLVDQRWKHUZD\:HFDQILQGRXWZKDWW\SHRI26WKHFRGHLVUXQQLQJ XQGHUDQGWKHQXVHWKHDSSURSULDWHPHWKRGWRLVVXHDVFUHHQFOHDUFRPPDQGOLNHWKLV def clrDisp(numlines=50): if os.name == "posix": os.system('clear') elif os.name in ("nt", "dos", "ce"): os.system('CLS') else: print '\n' * numlines +HUHLVDQH[DPSOHRIWKLVWHFKQLTXH #! /usr/bin/python # console2.py Text-Based Interfaces | 489 # # Demonstrates console output using the built-in print method and # an OS-specific screen clear technique. # # Source code from the book "Real World Instrumentation with Python" # By J. M. Hughes, published by O'Reilly. import time import os ainstat = ['OFF','OFF','OFF','OFF'] aindata = [0.0, 0.0, 0.0, 0.0] discstate = ['OFF','OFF','OFF','OFF','OFF','OFF','OFF','OFF'] discin = [0,0,0,0,0,0,0,0] def clrDisp(numlines=50): if os.name == "posix": os.system('clear') elif os.name in ("nt", "dos", "ce"): os.system('CLS') else: print '\n' * numlines def drawData(): print "" print "System Status" print "" print "Analog Input 0 : %10s %f" % (ainstat[0], aindata[0]) print "Analog Input 1 : %10s %f" % (ainstat[1], aindata[1]) print "Analog Input 2 : %10s %f" % (ainstat[2], aindata[2]) print "Analog Input 3 : %10s %f" % (ainstat[3], aindata[3]) print "" print "Discrete Input 0: %3s %d" % (discstate[0], discin[0]) print "Discrete Input 1: %3s %d" % (discstate[1], discin[1]) print "Discrete Input 2: %3s %d" % (discstate[2], discin[2]) print "Discrete Input 3: %3s %d" % (discstate[3], discin[3]) print "Discrete Input 4: %3s %d" % (discstate[4], discin[4]) print "Discrete Input 5: %3s %d" % (discstate[5], discin[5]) print "Discrete Input 6: %3s %d" % (discstate[6], discin[6]) print "Discrete Input 7: %3s %d" % (discstate[7], discin[7]) print "" ainstat[1] = "ACTIVE" ainstat[3] = "ACTIVE" aindata[1] = 5.2 aindata[3] = 8.9 discstate[0] = "ON" discin[0] = 1 clrDisp() drawData() time.sleep(1.0) ainstat[1] = "OFF" ainstat[3] = "OFF" aindata[1] = 0.0 490 | Chapter 13:ಗUser Interfaces aindata[3] = 0.0 ainstat[0] = "ACTIVE" ainstat[2] = "ACTIVE" aindata[0] = 5.2 aindata[2] = 8.9 discstate[0] = "OFF" discin[0] = 0 discstate[1] = "ON" discin[1] = 1 clrDisp() drawData() time.sleep(1.0) 1RZZHKDYHWKHIRXQGDWLRQIRUDXVDEOHWH[WEDVHGGLVSOD\7RXSGDWHWKHGLVSOD\ WKHVFUHHQLVILUVWFOHDUHGXVLQJWKHDSSURSULDWHFRPPDQGDQGWKHQWKHOLQHVIURPWKH WHPSODWHDUHZULWWHQXVLQJWKHprintPHWKRG7KLVUHVXOWVLQTXLFNHUVFUHHQUHJHQHUDWLRQ WKDQWKHPXOWLSOHOLQHVPHWKRGDQGLWORRNVQLFHUWRR,IWKH26FDQQRWEHGHWHUPLQHG WKHIXQFWLRQGHIDXOWVWRWKHEODQNOLQHPHWKRGWRFOHDUWKHGLVSOD\)LJXUHVKRZV WKHIORZFKDUWIRUDWH[WEDVHGFRQVROHGDWDGLVSOD\EDVHGRQZKDWZH¦YHVHHQVRIDU Reading user input 1RZZHKDYHDPHDQVWRGLVSOD\GDWDEXWWKHUH¦VVWLOORQHWKLQJPLVVLQJXVHULQSXW )RUWXQDWHO\3\WKRQGRHVKDYHDRQHVL]HILWVDOOLQSXWPHWKRGWRUHDGLQSXWIURPWKH FRQVROH7KHraw_input()PHWKRGUHDGVDOLQHRILQSXWIURPWKHFRQVROHDQGUHWXUQVLW DVDVWULQJ$OLQHLQWKLVFDVHLVGHILQHGDV]HURRUPRUHFKDUDFWHUVWHUPLQDWHGZLWKDQ (2/7KH(2/ZLOOQRWEHDSSHQGHGWRWKHVWULQJUHWXUQHGE\raw_input() 7KHraw_input()PHWKRGFDQDOVRGLVSOD\DSURPSWVWULQJDQGLIWKHreadlinePRGXOH LVLQVWDOOHGLWZLOOXVHWKDWWRVXSSRUWLQSXWOLQHHGLWLQJDQGSURYLGHLQSXWKLVWRU\+HUH LVWKHWKLUGLWHUDWLRQRIWKHFRQVROHH[DPSOHZLWKraw_input()LQFRUSRUDWHGLQWRWKH FRGH #! /usr/bin/python # console3.py # # Demonstrates console output using the built-in print method and the # raw_input() method. # # Source code from the book "Real World Instrumentation with Python" # By J. M. Hughes, published by O'Reilly. import time import os ainstat = ['OFF','OFF','OFF','OFF'] aindata = [0.0, 0.0, 0.0, 0.0] discstate = ['OFF','OFF','OFF','OFF','OFF','OFF','OFF','OFF'] discin = [0,0,0,0,0,0,0,0] x = 0 def initData(): Text-Based Interfaces | 491 global ainstat, aindata, discstate, discin ainstat = ['OFF','OFF','OFF','OFF'] aindata = [0.0, 0.0, 0.0, 0.0] discstate = ['OFF','OFF','OFF','OFF','OFF','OFF','OFF','OFF'] discin = [0,0,0,0,0,0,0,0] def readData(): global ainstat, aindata, discstate, discin, x initData() discstate[x] = 'ON' discin[x] = 1 x += 1 if x > (len(discin) - 1): x = 0 def clrDisp(numlines=50): if os.name == "posix": os.system('clear') elif os.name in ("nt", "dos", "ce"): os.system('CLS') else: print '\n' * numlines def drawData(): print "" print "System Status" print "" print "Analog Input 0 : %10s %f" % (ainstat[0], aindata[0]) print "Analog Input 1 : %10s %f" % (ainstat[1], aindata[1]) print "Analog Input 2 : %10s %f" % (ainstat[2], aindata[2]) print "Analog Input 3 : %10s %f" % (ainstat[3], aindata[3]) print "" print "Discrete Input 0: %3s %d" % (discstate[0], discin[0]) print "Discrete Input 1: %3s %d" % (discstate[1], discin[1]) print "Discrete Input 2: %3s %d" % (discstate[2], discin[2])

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    60 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us