用于python的gurux dlms库。

gurux-dlms的Python项目详细描述


有关概述,请参见Gurux

加入gurux社区或按照@Gurux进行项目更新。

gurux_dlms library是一个高性能的python组件,它可以帮助您读取与dlms/cosem兼容的电、煤气或水表。我们试图使组件易于使用,以至于您根本不需要了解协议。

更多信息请查看Gurux.DLMS

我们正在更新gurux网页上的文档。

开始阅读时,应先阅读DLMS/COSEM FAQ。阅读有关创建自己的meter reading application或构建自己的meter reading application的说明 dlms/cosemmeter/simulator/proxy

如果你有问题,可以在guruxForum中提问。

您可以使用任何想要的连接(TCP、串行、PLC)库。 gurux.dlms类只分析数据。

开始前

如果发现问题,请在此处报告: http://www.gurux.fi/project/issues/gurux.dlms.python

简单示例

首先需要安装库:

pipinstallgurux_dlms

使用前必须设置以下设备参数。 参数由制造商指定。

Firstimportgurux_dlms.fromgurux_dlmsimport*Alldefaultparametersaregiveninconstructor.//IsusedLogicanNameorShortNamereferencing.client=GXDLMSClient(True)

HDLC寻址

每个仪表都有自己的服务器地址。服务器地址分为逻辑地址和物理地址。 通常您可以使用值1表示仪表地址。您可以从仪表的序列号中计算服务器地址。 您可以使用getserveraddress方法。

//Countserveraddressfromserialnumber.serverAddress=CGXDLMSClient.getServerAddress(Serialnumber)//Countserveraddressfromlogicanandphysicaladdress.serverAddress=CGXDLMSClient.getServerAddress2(logicalAddress,physicalAddress,Addresssizeinbytes);

如果您使用的是iec握手,则必须首先发送identify命令并移动到模式e。

Supportforserialportisaddedlater.

设置参数后,可以尝试连接仪表。 首先应该发送snrm请求并处理ua响应。 之后,您将发送aarq请求并处理aare响应。

reply=GXReplyData()data=self.client.snrmRequest()ifdata:self.readDLMSPacket(data,reply)self.client.parseUAResponse(reply.data)size=self.client.limits.maxInfoTX+40self.replyBuff=bytearray(size)reply.clear()self.readDataBlock(self.client.aarqRequest(),reply)self.client.parseAareResponse(reply.data)reply.clear()ifself.client.authentication.value>Authentication.LOW.value:foritinself.client.getApplicationAssociationRequest():self.readDLMSPacket(it,reply)self.client.parseApplicationAssociationResponse(reply.data)

如果参数正确,则进行连接。 接下来,您可以读取关联视图并显示meter可以提供的所有对象。

#Read Association View from the meter.reply=GXReplyData()self.readDataBlock(self.client.getObjectsRequest(),reply)objects=self.client.parseObjects(reply.data,True)converter=GXDLMSConverter.GXDLMSConverter()converter.updateOBISCodeInformation(objects)

现在你可以阅读想要的东西了。读取后,必须通过发送 断开连接请求。

self.readDLMSPacket(self.client.disconnectRequest(),reply)#Close media.
defreadDLMSPacket2(self,data,reply):ifnotdata:returnnotify=GXReplyData()reply.error=0succeeded=Falserd=GXByteBuffer()ifnotreply.isStreaming():self.writeTrace("TX: "+self.now()+"\t"+GXByteBuffer.hex(data),TraceLevel.VERBOSE)self.media.sendall(data)msgPos=0count=100pos=0try:whilenotself.client.getData(rd,reply,notify):ifnotify.data.size!=0:ifnotnotify.isMoreData():t=GXDLMSTranslator(TranslatorOutputType.SIMPLE_XML)xml=t.dataToXml(notify.data)print(xml)notify.clear()msgPos=rd.positioncontinuerd.position=msgPosrd.set(self.media.recv(100))ifpos==3:raiseValueError("Failed to receive reply from the device in given time.")ifpos!=0:print("Data send failed.  Try to resend "+str(pos)+"/3")++posexceptExceptionase:self.writeTrace("RX: "+self.now()+"\t"+rd.__str__(),TraceLevel.ERROR)raiseeself.writeTrace("RX: "+self.now()+"\t"+rd.__str__(),TraceLevel.VERBOSE)ifreply.error!=0:raiseGXDLMSException(reply.error)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何实时生成简单的2D图形?   java如何使用DirectoryStream过滤隐藏文件。滤器   二进制Java BigInteger测试位64位长   java Grails替换onetoone关联中的对象   爪哇七月至SLF4J大桥   java无法解决符号“窗口”错误   java在Mysql中保存NULL而不是HTML文档的文本   java当blackberry OS显示摄像头权限警报,用户点击通话结束(红色)按钮时,如何正确退出blackberry应用程序   二维地图平铺java上的块碰撞问题   java jpa mysql表不存在自动生成不工作   java在按下按钮或失去焦点时切换JDialog可见性   如何将java中的复杂映射序列化为JSON   JavaHadoop2。2.0追加文件发生AlreadyBeingCreatedException   字符串Java printDailyCost方法   feed如何修复java中新闻api的“太多请求”错误   基于字符串的java Android目录层次结构   如果键存在且值不为null,则java放入映射,否则抛出异常   java如何获取cglib代理类实例的字节码?   算法Java中按多个属性对对象进行分组的一般方法