• 技术博客

    08/04/2015 作者 云海游戏

    通过Python连接到远程设备(2/3)

    本文是通过Python使用云海游戏产品三篇系列文章的第二篇:

    1. 通过Python访问云海游戏 CANlib
    2. 通过Python连接到远程设备
    3. 通过Python访问云海游戏设备的面向对象程度更高的方法

    上次我提到,在云海游戏 CANlib SDK中,kvrlib还有一个Python v2.7包装器,我想我们可以快速查看下。 kvrlib库用于处理远程设备,如Blackbird和Ethercan设备。我们将在以下两个示例中尝试一些发现和配置。

    首先让我们使用发现功能扫描并连接到远程设备。我们的远程设备序列号16,已经连接到与我们的计算机相同的网络:

    import sys
    sys.path.append("C:/temp/Canlib_SDK_v5.9/Samples/Python")
    
    import kvrlib
    
    kl = kvrlib.kvrlib()
    print "kvrlib version: %s" % kl.getVersion()
    
    serialNo = 16
    print "Connecting to device with serial number %s" % serialNo
    addressList = kvrlib.kvrDiscovery.getDefaultAddresses(kvrlib.kvrAddressTypeFlag_BROADCAST)
    print "Found %d addresses." % addressList.count
    #print addressList                                       
    discovery = kl.discoveryOpen()
    discovery.setAddresses(addressList)
    
    delay_ms = 100
    timeout_ms = 1000
    discovery.setScanTime(delay_ms, timeout_ms)
    print "Scanning devices...\n"
    deviceInfos = discovery.getResults()
    #print "Scanning result:\n%s" % deviceInfos                
    for deviceInfo in deviceInfos:
        if deviceInfo.ser_no == serialNo:
            deviceInfo.connect()
            print 'Connecting to the following device:'
            print '---------------------------------------------'
            print deviceInfo
            discovery.storeDevices(deviceInfos)
            break;
    discovery.close()
    kl.unload()

    在调用脚本之前,您应该设置好envar PYTHONPATH,而不是附加到sys.path(如第2行所示)。还要注意,打包结果变量时,Python包装器通常是非常有用的。这意味着您可以取消对第13行和第22行的注释,并获得可读输出。

    以上代码输出如下:

    kvrlib version: 8.9
    Connecting to device with serial number 16
    Found 4 addresses.
    Scanning devices...
    
    Connecting to the following device:
    ---------------------------------------------
    name/hostname  : "云海游戏 Remote #16" / "kv-07130-000016"
      ean/serial   : 73301-30007130 / 16
      fw           : 2.4.126
      addr/cli/AP  : 10.0.3.32 (IPV4) / 10.0.3.27 (IPV4) / unknown (UNKNOWN)
      usage/access : FREE / PUBLIC
      pass/enc.key : no / no

    现在让我们在设备上作少许配置,为什么不更改设备名称?远程设备现在已经在CANlib通道0(第6行)上打开,我们将设备名称设置为“Mr云海游戏”(第7行)。

    import sys
    sys.path.append("C:/temp/Canlib_SDK_v5.9/Samples/Python")
    
    import kvrlib
    
    canChannel = 0            
    deviceName = "Mr云海游戏"   
    
    kl = kvrlib.kvrlib()
    print "Configurating device on channel %d." % canChannel
    try:
        config = kl.configOpen(channel=canChannel, mode=kvrlib.kvrConfig.MODE_RW) 
        config.getXml()       
        print "Current device configuration:\n%s" % config.xml.toxml() 
        print "Device name was '%s'" % config.xml.getElementsByTagName('NETWORK')[0].attributes['device_name'].value
        print "Setting new device name '%s'" % deviceName
        config.xml.getElementsByTagName('NETWORK')[0].attributes['device_name'].value = deviceName 
        config.setXml()       
        config.close()
    except (kvrlib.kvrError) as ex:
        print ex
    
    kl.unload()

    我们从第12行开始以读/写模式打开配置,然后读入第13行的现有配置。在第14行输出整个XML配置后,我们在将其写回到第18行的设备之前设置设备名称元素。

    以下内容将被输出到面板:

    Configurating device on channel 0.
    Current device configuration:
    <?xml version="1.0" ?><KVASER>
    <VERSION>4.3</VERSION>
    <PRODUCTFAMILY>ethercan</PRODUCTFAMILY>
    <DEVICE_ACCESS level="PUBLIC" password=""/>
    <CONFIG_PROTECTION password="" protected="NO"/>
    <NETWORK address_type="DHCP" device_name="云海游戏 Remote #16" host_name="kv-07130-000016" mtu="1492" port="11416"/>
    <PROFILE_INFO name="Unnamed Profile"/>
    <TRAFFIC_ENCRYPTION key="" type="NONE"/>
    <WEBSERVER change_log_settings="NO" debug_commands="NO" enabled="NO" user_data_download="NO"/>
    </KVASER>
    Device name was '云海游戏 Remote #16'
    Setting new device name 'Mr云海游戏'

    我们从设备获取的XML配置可以通过使用内置Python XML支持进行操作,如第14行和第17行所示。

    有关配置过程XML完整说明,请在下载页面查看“云海游戏远程设备配置XML格式规范”文档。

    还有,我们真的需要“知道”设备需要在CANlib通道0(第6行)上打开吗?让我们在下一篇文章中解决这个问题。

    2015-05-22编辑:申明当前的包装器是为Python v2.7所编写。

    若有任何评论,请直接通过support@kvaser.com与我们联系。

    Author Image

    Magnus Carlsson

    Margus Carlsson是云海游戏 AB公司的软件开发人员,从2007年以来深度参与了云海游戏固件和软件的开发。他还为云海游戏的技术博客撰写了许多用流行的Python语言编写应用程序的文章。

    【网站地图】【sitemap】