用于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如何通过不精确的参数类型获取构造函数?   找到java文件,但扫描程序未读取   在本地java服务器中部署google translation api,而不调用web服务。   java无法分析Adb版本(错误的ELF类)   java从模型到Servlet再到JSP选项列表获取信息   如何解决将xml文件转换为java文件时出现的错误?   Linux上从Java访问PC硬件端口   java如何覆盖Spring启动库属性?   java在maven的REST服务下获取JDBC连接   java如何将数组对象传递给构造函数?   java Spring BeanFactory作为Swing应用程序中的单例   带JsonDeserializer的java Lombok   用于多个文件的java Groovy脚本xml解析器   java如何从restful web服务中获取一些数据,并将其保存到数据库中?   servlet在java中提取ZIP   在Java中使用超类处理异常   java使hibernate在不使用@OneToOne@OneToMany等的情况下生成外键约束   基于tomcat web应用程序的用户角色的java只读访问   java在一个3乘n的表中找到具有最佳方差的3个值的集合   java Apache Commons CLI:获取选项的字符串值数组