• gx_dlms 的杂乱记录


    
    DLMS_ERROR_CODE_FALSE
    
    
    W3Jehpnc543MuwUz6ZWDshy5kwbbE9Cw
    
    CGXDLMSClient::GetData(CGXByteBuffer& reply, CGXReplyData& data)
    	CGXDLMS::GetData(m_Settings, reply, data, NULL)
    	
    		// hdlc路线,这里的reply 是原始接受的数据,data 要返回的CGXReplyData
    		GetHdlcData(settings.IsServer(), settings, reply, data, frame, notify))
    			帧类型 U/I/S
    			address
    			crc
    		//tcp路线
    		GetTcpData
    		
    		
    		if (!target->IsComplete())
    			return DLMS_ERROR_CODE_FALSE;
    		GetDataFromFrame(reply, *target, settings.GetInterfaceType() == DLMS_INTERFACE_TYPE_HDLC);
    			//提取具体的apdu数据
    		GetPdu(settings, *target)
    			//解析出具体的apdu的头
    			case	HandleGetResponse
    						// 把数据提取出来
    					aare
    					....
    			GetValueFromData
    
    // ua解析
    ParseUAResponse
    	CGXDLMS::ParseSnrmUaResponse(data, &m_Settings.GetLimits());
    	m_Settings.SetConnected(DLMS_CONNECTION_STATE_HDLC);
    // aare
    ParseAAREResponse
    	CGXAPDU::ParsePDU(m_Settings, m_Settings.GetCipher(),reply, result, sd, NULL)) != 0)
    
    流的处理,数据接受完整的处理与判断
    
    
    m_Parser->SNRMRequest
    	根据类型和数据 构造 hdlc的数据帧
    	 CGXDLMS::GetHdlcFrame
    ReadDataBlock
    		ReadDLMSPacket
    			write(m_hComPort, data.GetData(), len);
    			Read(0x7E, bb)
    			m_Parser->GetData(bb, reply, notify)
    				GetHdlcData // 从hdlc 得到数据
    				GetDataFromFrame
    			
    
    
    GetLNPdu   组合  获得 E6 E6 00 开始的数据
    
    
    
    GXHelpers::GetData
    int CGXDLMSTranslator::DataToXml(CGXByteBuffer& data, std::string& xml)
    GetDataTypes
    数据读取 
    m_Parser->Read 组数据
    ReadDataBlock
    	ReadDLMSPacket	发数据
    UpdateValue解析数据	
    		
    if 0==GetData
    	if(m_Complete==flase)
    			
    	else(m_Complete==true)
    	
    	有个positon 指示了当前解析的位置
    
    一些有用的定义
    DLMS_COMMAND_SNRM  表示了具体的帧类型
    
    faq
    	GetHdlcData 里面有些回退操作
    待优化
    GetHDLCAddress
    	可以在size=5时候退出
    GetHdlcData 应先检查crc 再去做帧类型检查	
    	
    	
    关于构造和析构
    	
    
  • 相关阅读:
    Linux下tty/pty/pts/ptmx详解
    ubuntu 12 或更高版本 下安装和配置 xrdp 远程登陆
    ubuntu+apache2+php5+mysql5.0的安装
    Ubuntu SSH 服务安装配置和使用
    ubuntu 12.10 进入命令行界面 (字符界面)
    ubuntu 下使用 cron 和 crontab
    Ubuntu用命令行发邮件mutt,报警发短信通知
    Ubuntu 安装 proftpd,并添加虚拟用户
    绝对有效的 ubuntu 12.xx 下 apache2 + svn 安装和配置方法
    添加android系统通知
  • 原文地址:https://www.cnblogs.com/zongzi10010/p/11991501.html
Copyright © 2020-2023  润新知