2013-02-18 88 views
0

更正。请参阅下面我自己的问题的答案。到Alien RFID阅读器的Python界面

我想通过与Python 2.7的TCP/IP接口与Alien RFID 9800阅读器进行通信。
但是,附加的测试代码不会超出读者登录范围,并且读者不会处理“Get ReaderName”命令。
我正在使用默认的用户名(外星人)和密码(密码)。事情从异形界面工作正常。登录交换有问题吗?什么是不对的?

import socket 

cmdHost, cmdPort = '192.168.1.106', 23 

CmdDelim = '\n'    # Corrected from '\n\r' to '\n'. Delimiter of Alien commands (sent to reader). 
ReaderDelim = '\r\n\0'  # Delimiter of Alien reader responses (received from reader). 
CmdPrefix = chr(1)   # Causes Alien reader to suppress prompt on response. 

def getResponse(conn): 
    ''' Get the reader's response with correct terminator. ''' 
    response = '' 
    while not response.endswith(ReaderDelim): 
     more = conn.recv(4096) 
     if not more: 
      break 
     response += more 
    return response 

def GetReaderName(): 
    ''' Log into the reader, get the reader name, then quit. ''' 
    print 'Sending commands to the Alien reader...' 
    cmdSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    try: 
     cmdSocket.connect((cmdHost, int(cmdPort))) 
    except Exception as inst: 
     log('Reader Connection Failed: CmdAddr=%s:%d' % (cmdHost, cmdPort)) 
     log('%s' % inst) 
     cmdSocket.close() 
     return False 

    # Read the initial header from the reader. 
    response = getResponse(cmdSocket) 
    print response 

    # UserName 
    cmdSocket.sendall('alien%s' % CmdDelim) 
    response = getResponse(cmdSocket) 
    print response 

    # Password 
    cmdSocket.sendall('password%s' % CmdDelim) 
    response = getResponse(cmdSocket) 
    print response 

    # Get ReaderName command 
    cmdSocket.sendall('%sGet ReaderName%s' % (CmdPrefix, CmdDelim)) 
    response = getResponse(cmdSocket) 
    print response 

    # Quit 
    cmdSocket.sendall('%sQuit%s' % (CmdPrefix, CmdDelim)) 
    response = getResponse(cmdSocket) 
    print response 

    cmdSocket.close() 
    return True 

if __name__ == '__main__': 
    GetReaderName() 

回答

0

你有一些print response命令。打印什么,或不?

+0

我得到外星人阅读头。但是,我什么都没有得到。上检查网络上的一些Java代码,一个 '\ n'[LR]定界符用于甚则记录 '\ r \ n'[CR] [LF]。 TCP/IP分隔符只是'\ n'[LF]? – EMS 2013-02-18 16:38:51

0

经过进一步实验,我们可以确认命令终结是简单的 '\ n'[LF],而不是 '\ r \ N'[CR] [LR]为TCP接口。所以如果上面的代码纠正为:

CmdDelim = '\n' 

现在,一切工作正常。

不幸的是,Alien文档非常具体,[CR] [LF]是命令终止符。对于串行接口也许是这样,但它不适用于TCP。