質問

私は、ハイパーターミナルとのみ対話するデバイスを制御するために基本的なドライバーを書き込もうとしています。すべての入力は、HTフォーミングデータとすべてのリターンには、人間の視覚化のためのフォーマットを正しくするために、豊富な平等な標識、ニューライン、およびスペースが含まれます。私は例外をたくさん投げているので、リターンがトラブルを引き起こしていると確信していますが、他にどのように対処できるかはわかりません。誰かがこれを行うより良い方法を知っていますか?

デバイスマニュアル: http://us.startech.com/media/products/pcm815shna/manuals/pcm815shna.pdf

import visa
import re


class iopower8(visa.SerialInstrument):
    #initialization
    def __init__(self,loc):
        visa.SerialInstrument.__init__(self,loc)
        self.term_chars = '\r' #set terminal characters
        self.write('\r\r') #start faux 'Hyperterminal'

    def on(self, bank, out):
        self.ask("on " + str(bank) + " " + str(out))
        for i in range (1,3):#read buffer into void to prevent issues
            try:
                self.read_raw()
            except(visa_exceptions.VisaIOError):
                self.buffer_clear()
                break
        return self.status(bank, out)

    def off(self, bank, out):
        self.ask("of " + str(bank) + " " + str(out))
        for i in range (1,3):#read buffer into void to prevent issues
            try:
                self.read_raw()
            except(visa_exceptions.VisaIOError):
                self.buffer_clear()
                break
        return self.status(bank, out)

    def status(self, bank, port): #enter bank and port # you want to check
        self.ask("st " + str(bank))
        result = 'Error' #send error message regardless
        for i in range (1,13):#all 12 lines need to be read out of the buffer to prevent issues later
            try:
                stuff = self.read()#read the line to a holding srting, and dump in void if wriong line to clear buffer
                if stuff.strip() == ('='*44):
                    break
            except(visa_exceptions.VisaIOError):
                break
        for i in range(1,9):
            try:
                stuff = self.read()#read the line to a holding string, and dump in void if wriong line to clear buffer.
                if i == port: #this offset will get you to the line with the relevant port's status
                    result = re.match('(.*?)(ON|OFF)', stuff) #regex to the find the on/off status
                    #convert to boolean
                    if result.group(2) == 'ON':
                        result = True
                    elif result.group(2) =='OFF':
                        result = False
                    else:
                        result = 'ERROR'
            except(visa_exceptions.VisaIOError):
                self.buffer_clear()
                break
        return result

    def buffer_clear(self): #in case of buffer jamming
        while True:
            try:
                self.read_raw()
            except(visa_exceptions.VisaIOError):
                break

    def all_on(self, bank):
        self.ask("on " + str(bank) + " 0")
        for i in range (1,3):#read buffer into void to prevent issues
            try:
                hold = self.read_raw()
            except(visa_exceptions.VisaIOError):
                self.buffer_clear()
                break

    def all_off(self, bank):
        self.ask("of " + str(bank) + " 0")
        for i in range (1,3):#read buffer into void to prevent issues
            try:
                self.read_raw()
            except(visa_exceptions.VisaIOError):
                self.buffer_clear()
                break
役に立ちましたか?

解決

Hiperterminalについて特別なことは何もありません。ラインの端は通常です '\r\n' また '\n' 1人。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top