2015-01-31 7 views
0

네트워크에서 bacnet 포인트를 읽으려면 Bacypypes라는 파이썬 라이브러리를 사용합니다. 함수 MultipleReadProperty로 포인트를 읽는 첫 번째 시도에서 아무런 문제가 없습니다. 나는 모든 값을 아무런 문제없이 얻는다. 하지만 두 번째 설문 조사에서 다음과 같은 소켓에 대한 오류가 발생합니다.Errno 10048 Bacpypes를 통해 네트워크에서 다시 읽으려고 할 때

[0.0, 1149064.0, 1941115.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 13525024.0, 448152.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] 
[31/Jan/2015:11:39:33] HTTP Traceback (most recent call last): 
    File "C:\Python27\lib\site-packages\cherrypy\_cprequest.py", line 670, in respond 
    response.body = self.handler() 
    File "C:\Python27\lib\site-packages\cherrypy\lib\encoding.py", line 217, in __call__ 
    self.body = self.oldhandler(*args, **kwargs) 
    File "C:\Python27\lib\site-packages\cherrypy\_cpdispatch.py", line 61, in __call__ 
    return self.callable(*self.args, **self.kwargs) 
    File "C:\Users\Sansal\Desktop\Projeler\sayac_okuma8\main2.py", line 231, in sayac_oku 
    readings_from_counters=ReadCounters(counters_list) 
    File "C:\Users\Sansal\Desktop\Projeler\sayac_okuma8\main2.py", line 153, in ReadCounters 
    this_application = ReadPointListApplication(points_list, this_device, args.ini.address) 
    File "C:\Users\Sansal\Desktop\Projeler\sayac_okuma8\main2.py", line 43, in __init__ 
    BIPSimpleApplication.__init__(self, *args) 
    File "C:\Python27\lib\site-packages\bacpypes-0.10.6-py2.7.egg\bacpypes\app.py", line 555, in __init__ 
    self.mux = UDPMultiplexer(self.localAddress) 
    File "C:\Python27\lib\site-packages\bacpypes-0.10.6-py2.7.egg\bacpypes\bvllservice.py", line 85, in __init__ 
    self.directPort = udp.UDPDirector(self.addrTuple) 
    File "C:\Python27\lib\site-packages\bacpypes-0.10.6-py2.7.egg\bacpypes\udp.py", line 144, in __init__ 
    self.bind(address) 
    File "C:\Python27\lib\asyncore.py", line 342, in bind 
    return self.socket.bind(addr) 
    File "C:\Python27\lib\socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted. 

첫 번째 줄에서 알 수 있듯이 네트워크에서 아무런 문제없이 값을 얻을 수 있습니다.

문제를 해결하기 위해 Bacpypes 라이브러리의 stop() 함수를 몇 가지 코드에서 사용했습니다. 특히 폴링을 시작하는 코드 바로 앞에 있습니다. 하지만, 어떻게 든 소켓을 닫을 수없는 것으로 보입니다. 이 문제에 대해 몇 가지 제안을 해주실 수 있습니까?

미리 감사드립니다.

+0

[http://stackoverflow.com/questions/12362542/python-server-only-one-usage-of-each -socket-address-is-normally-permitted) – Ethaan

+0

알았다. 하지만 이제 errorno 10035가 나타납니다. –

+0

새 오류로 질문을 업데이트 할 수 있습니까? – Ethaan

답변

1

최근에는 Bacypypes가 0.15 버전으로 업데이트되었으며 많은 노력이 문서에서 이루어졌습니다. 새로운 기능이 새로 추가되었으며 코드는 whois, IAm과 같은 일반적인 것들에 대해 단순화되었습니다.

난 당신이보고를 여기 http://bacpypes.readthedocs.io/en/latest/

하고이 제안 : https://github.com/JoelBender/bacpypes/blob/master/samples/MultipleReadProperty.py

또한 제안 할 수 bacpypes의 상단에 내장에 아웃 - 오브 - 박스 기능을 제공한다 BAC0 (http://bac0.readthedocs.io/en/latest/) BACnet 장치와 통신하십시오. (면책 조항 : BAC0은 내 프로젝트이고 나는 bacypypes에 기고자입니다.)

+0

고마워, Mr. Tremblay .. –