国产强伦姧在线观看无码,中文字幕99久久亚洲精品,国产精品乱码在线观看,色桃花亚洲天堂视频久久,日韩精品无码观看视频免费

      行業(yè)產(chǎn)品

      • 行業(yè)產(chǎn)品

      深圳市一天廣聯(lián)科技有限公司


      當前位置:深圳市一天廣聯(lián)科技有限公司>>可編程串口以太網(wǎng)網(wǎng)關(guān) 全新的極簡編程>>國網(wǎng)DL645-2007電表規(guī)約轉(zhuǎn)Modbus方案

      國網(wǎng)DL645-2007電表規(guī)約轉(zhuǎn)Modbus方案

      返回列表頁
      參  考  價面議
      具體成交價以合同協(xié)議為準

      產(chǎn)品型號

      品       牌

      廠商性質(zhì)其他

      所  在  地

      聯(lián)系方式:白工查看聯(lián)系方式

      更新時間:2022-12-27 13:49:34瀏覽次數(shù):467次

      聯(lián)系我時,請告知來自 智能制造網(wǎng)

      產(chǎn)品簡介

      產(chǎn)品名稱: 國網(wǎng)DL645-2007電表規(guī)約轉(zhuǎn)Modbus方案 規(guī)  格: 產(chǎn)品備注: 產(chǎn)品類別:DL645-2007協(xié)議轉(zhuǎn)Modbus方案......

      詳細介紹

      1、概述
      DL645協(xié)議是智能電表常用的通訊協(xié)議。此協(xié)議規(guī)定了非常多的數(shù)據(jù)點,但是目前的智能電表通常只支持幾個常用數(shù)據(jù)點,而且所支持數(shù)據(jù)點并無統(tǒng)一標準。為協(xié)議處理和轉(zhuǎn)換造成了比較大的難度。

      我公司的AiMaster、AiMaker系列可編程產(chǎn)品內(nèi)置了DL645-2007處理算法。通過Lua函數(shù)調(diào)用DL645庫接口函數(shù),這樣可以根據(jù)不同的電表,靈活進行數(shù)據(jù)處理。

      在取得DL645數(shù)據(jù)后,就可以放入Modbus虛擬機的Modbus寄存器,提供給多個上位機同時讀取。無需編寫任何Modbus通訊代碼。如果使用AiMaker600物聯(lián)網(wǎng)PLC,還可以根據(jù)取得的數(shù)據(jù)做出控制動作。

      AiMaster、AiMaker產(chǎn)品也可以對取得DL645數(shù)據(jù),使用算法做進一步運算處理,也可以傳輸至云端,提供給APP讀取。

      2、讀取電能數(shù)據(jù)

      此例子讀取總電量數(shù)據(jù),所有電表都支持此功能。電表是否支持規(guī)約中的其他電能數(shù)據(jù),請咨詢電表廠家。


      tab1.jpg



      print("讀取DL645正向有功總電能數(shù)據(jù)。")
      --表號
      local saddr={20,19,01,01,50,02}
      --標識碼,此標識碼為DL645-2007協(xié)議所規(guī)定的電能數(shù)據(jù)標識碼
      --格式為BCD碼,可以直接套用協(xié)議中的標識碼規(guī)定
      --為
      local idcode={0x00,0x01,0x00,0x00}
      --電表應答的原始數(shù)據(jù)
      local rawdata={0}
      local res=0.0

      while (true) do
      rawdata={0}
      --readpwvalue讀取電能數(shù)據(jù)函數(shù)
      --參數(shù)1:串口號,為0起,0為串口1,1為串口2,以此類推
      --參數(shù)2:6個數(shù)字的表號,通常在電表上可以找到表號,直接填入即可,表號為BCD數(shù)字格式。
      --參數(shù)3:為數(shù)組格式的標識碼,用于指出要讀取的電能數(shù)據(jù),應符合DL645-2007的定義,
      --例如:為讀取正向有功總電能,為讀取反向有功總電能。
      --參數(shù)4:接收到的原始數(shù)據(jù)數(shù)組,從電表收到的原始數(shù)據(jù),如果讀取錯誤,此數(shù)據(jù)無效。
      --參數(shù)5:通訊超時,發(fā)送讀取指令后,等待電表應答的超時,如果達到超時而未收到電表
      --應答數(shù)據(jù),則認為電表無應答,將返回錯誤。
      --返回:如果返回數(shù)據(jù)為nil說明讀取失敗。否則返回讀取到的電能數(shù)據(jù)值,為帶2位小數(shù)的浮點數(shù)。
      res=dl645.readpwvalue(2,saddr,idcode,rawdata,1000)

      if (res==nil) then
            print(string.format("
      讀取失敗"));
      else
         --res為浮點數(shù)格式的總電量數(shù)據(jù)
             print(string.format("
      res:%6.2f",res));
          end
      debug.printarray(rawdata);
      --setvaluefc3函數(shù),將電能數(shù)據(jù)值,設置進Modbus寄存器值
      --參數(shù)1:Modbus寄存器地址,2個地址保存4個字節(jié)
      --參數(shù)2:下位機地址碼
      --參數(shù)3:數(shù)據(jù)類型2-ushort,3-long,4-float,5-int,6-short;
      --參數(shù)4:此Modbus寄存器地址的數(shù)據(jù)
      --相同類型的數(shù)據(jù),應組織在各自的連續(xù)的寄存器地址,不應混和組合.
      --數(shù)據(jù)類型為u_short,u_short為16bit數(shù)據(jù),占用1個寄存器地址,寄存器讀取數(shù)量為1
      --設置進Modbus寄存器提供給上位機讀取。
      --對應的Modbus參數(shù)為,下位機地址1,寄存器地址0起,讀取2個寄存器,格式為反轉(zhuǎn)float
      lib_vmb.setvaluefc3(0,1,4,res);
      syslib.ossleep(1000);
       end

      3、讀取變量數(shù)據(jù)

      并不是所有電表都支持此例子所讀取的變量數(shù)據(jù),請咨詢電表廠家以獲得更多信息。

      圖片.png


      print("讀取DL645變量數(shù)據(jù)。")
      --啟用發(fā)送前導字符4個0xFE
      --setopt函數(shù)設置DL645庫的全局參數(shù)。
      --參數(shù)1:為選項編號,1-是否啟用發(fā)送前導字符4個0xFE
      --參數(shù)2:為選項數(shù)據(jù),1-發(fā)送(默認),0-不發(fā)送前導字符
      --dl645.setopt(1,1)
      while (true) do
      --表號
      local saddr={20,19,01,01,50,02}

      --idcode為16進制格式的4字節(jié)標識碼
      --字節(jié)存儲順序,按照DL645-2007協(xié)議規(guī)定的DI3、DI2、DI1、DI0順序排列。
      --idcode數(shù)組的第1個字節(jié)是DI3。以此類推。
      --第1個字節(jié)0x02為讀取變量數(shù)據(jù),第2個字節(jié)0x01是讀取電壓
      --第3個字節(jié)0x01為讀取A相電壓,第3個字節(jié)未用,設置為0.
      --讀取其他變量數(shù)據(jù)的標識碼,請查閱DL645-2007協(xié)議手冊?;騾⒖?常用DL645數(shù)據(jù)轉(zhuǎn)Modbus"例程
      local idcode={0x02,0x01,0x01,0x00}
      --rawdata用于存儲電表應答的原始數(shù)據(jù)
      local rawdata={0}
      --res為讀取到的數(shù)據(jù)。
      local res=0.0

      --readvaldata讀取變量數(shù)據(jù)函數(shù)
      --參數(shù)1:串口號,為0起,0為串口1,1為串口2,以此類推
      --參數(shù)2:6個數(shù)字的表號,通常在電表上可以找到表號,直接填入即可,表號為BCD數(shù)字格式。
      --參數(shù)3:為數(shù)組格式的標識碼,用于指出要讀取的電能數(shù)據(jù),應符合DL645-2007,1997的定義,
      --例如:為讀取A相電壓
      --參數(shù)4:接收到的原始數(shù)據(jù)數(shù)組,從電表收到的原始數(shù)據(jù),如果讀取錯誤,此數(shù)據(jù)無效。
      --參數(shù)5:通訊超時,發(fā)送讀取指令后,等待電表應答的超時,如果達到超時而未收到電表
      --應答數(shù)據(jù),則認為電表無應答,將返回錯誤。

      --返回:如果返回數(shù)據(jù)為nil說明讀取失敗。
      --否則返回讀取到的數(shù)據(jù),返回的數(shù)據(jù)小數(shù)位數(shù)已經(jīng)根據(jù)DL645-2007協(xié)議的規(guī)定進行了處理。
      res=dl645.readvaldata(2,saddr,idcode,rawdata,1000)

      if (res==nil) then
           print(string.format("
      讀取失敗"));
          else
           print(string.format("
      A相電壓:%6.2f",res));
           --A相電壓數(shù)據(jù)在Modbus寄存器地址100,讀取2個寄存器地址。
      lib_vmb.setvaluefc3(100,1,4,res);

          end
      --查看返回的原始數(shù)據(jù)
      debug.printarray(rawdata);

      --讀取A相電流
      idcode={0x02,0x02,0x01,0x00}

      res=dl645.readvaldata(2,saddr,idcode,rawdata,1000)

      if (res==nil) then
           print(string.format("
      讀取失敗"));
          else
            print(string.format("
      A相電流:%6.2f",res));
           --A相電流數(shù)據(jù)在Modbus寄存器地址102,讀取2個寄存器地址。
      lib_vmb.setvaluefc3(102,1,4,res);
          end
      --查看返回的原始數(shù)據(jù)
      debug.printarray(rawdata);

      --讀取電網(wǎng)頻率
      idcode={0x02,0x80,0x00,0x02}

      res=dl645.readvaldata(2,saddr,idcode,rawdata,1000)

      if (res==nil) then
           print(string.format("
      讀取失敗"));
          else
            print(string.format("
      電網(wǎng)頻率:%6.2f",res));
           --電網(wǎng)頻率數(shù)據(jù)在Modbus寄存器地址104,讀取2個寄存器地址。
      lib_vmb.setvaluefc3(104,1,4,res);
          end
      --查看返回的原始數(shù)據(jù)
      debug.printarray(rawdata);

      --讀取A相相角
      idcode={0x02,0x07,0x01,0x00}

      res=dl645.readvaldata(2,saddr,idcode,rawdata,1000)

      if (res==nil) then
           print(string.format("
      讀取失敗"));
          else
      print(string.format("
      A相相角:%6.2f",res));
      --A相相角在Modbus寄存器地址106,讀取2個寄存器地址。
      lib_vmb.setvaluefc3(106,1,4,res);

        end
      --查看返回的原始數(shù)據(jù)
      debug.printarray(rawdata);

      --讀取瞬時總有功功率
      idcode={0x02,0x80,0x00,0x05}

      res=dl645.readvaldata(2,saddr,idcode,rawdata,1000)

      if (res==nil) then
           print(string.format("
      讀取失敗"));
          else
            print(string.format("
      瞬時總有功功率:%6.4f",res));
      --瞬時總有功功率在Modbus寄存器地址108,讀取2個寄存器地址。
      lib_vmb.setvaluefc3(108,1,4,res);
        end
      --查看返回的原始數(shù)據(jù)
      debug.printarray(rawdata);

      syslib.ossleep(1000);
       
      end

      3、讀取需量數(shù)據(jù)

      很多電表不支持需量數(shù)據(jù),請咨詢電表廠家以獲得相關(guān)信息。

      table3.jpg


      print("讀取DL645需量數(shù)據(jù)。")
      --啟用發(fā)送前導字符4個0xFE
      --setopt函數(shù)設置DL645庫的全局參數(shù)。
      --參數(shù)1:為選項編號,1-是否啟用發(fā)送前導字符4個0xFE
      --參數(shù)2:為選項數(shù)據(jù),1-發(fā)送(默認),0-不發(fā)送前導字符
      --dl645.setopt(1,1)
      while (true) do
      --表號
      local saddr={20,19,01,01,50,02}

      --idcode為16進制格式的4字節(jié)標識碼
      --字節(jié)存儲順序,按照DL645-2007協(xié)議規(guī)定的DI3、DI2、DI1、DI0順序排列。
      --請查閱DL645-2007協(xié)議手冊?;騾⒖?常用DL645數(shù)據(jù)轉(zhuǎn)Modbus"例程
      --0x01,0x01,0x00,0x00標識碼為讀取正向有功需量及發(fā)生日期
      local idcode={0x01,0x01,0x00,0x00}
      --rawdata用于存儲電表應答的原始數(shù)據(jù)
      local rawdata={0}

      --maxqrdata為需量數(shù)據(jù),為浮點數(shù)
      local res=0.0
      --maxqrdt為需量發(fā)生日期
      local maxqrdt

      --readmaxrqdata讀取需數(shù)據(jù)及發(fā)生日期函數(shù)
      --參數(shù)1:串口號,為0起,0為串口1,1為串口2,以此類推
      --參數(shù)2:6個數(shù)字的表號,通常在電表上可以找到表號,直接填入即可,表號為BCD數(shù)字格式。
      --參數(shù)3:為數(shù)組格式的標識碼,用于指出要讀取的電能數(shù)據(jù),應符合DL645-2007的定義,
      --例如:為讀取正向有功需量數(shù)據(jù)及發(fā)生日期
      --參數(shù)4:接收到的原始數(shù)據(jù)數(shù)組,從電表收到的原始數(shù)據(jù),如果讀取錯誤,此數(shù)據(jù)無效。
      --參數(shù)5:通訊超時,發(fā)送讀取指令后,等待電表應答的超時,如果達到超時而未收到電表
      --應答數(shù)據(jù),則認為電表無應答,將返回錯誤。

      --返回2個數(shù)據(jù):
      --數(shù)據(jù)1:需量數(shù)據(jù)(maxqrdata),為浮點數(shù)。
      --數(shù)據(jù)2:需量發(fā)生日期(maxqrdt),數(shù)據(jù)為數(shù)組格式,數(shù)值按照{(diào)年,月,日,小時,分鐘}存儲。
      maxqrdt,maxqrdata=dl645.readmaxrqdata(2,saddr,idcode,rawdata,1000)

      if (maxqrdata==nil) then
           print(string.format("
      讀取失敗"));
          else
           print(string.format("
      正向有功需量值:%2.4f",maxqrdata));
           print(string.format("
      正向有功需量發(fā)生日期:%d年%d月%d日%d時%d分",maxqrdt[1],maxqrdt[2],maxqrdt[3],
                                  maxqrdt[4],maxqrdt[5]));
          end
           debug.printarray(rawdata);    

      --例子2 ,讀取A相正向有功需量數(shù)據(jù)
      local idcode={0x01,0x15,0x00,0x00}
      maxqrdt,maxqrdata=dl645.readmaxrqdata(2,saddr,idcode,rawdata,1000)

      if (maxqrdata==nil) then
           print(string.format("
      讀取失敗"));
          else
           print(string.format("
      A相正向有功需量值:%2.4f",maxqrdata));
           print(string.format("
      A相正向有功需量發(fā)生日期:%d年%d月%d日%d時%d分",maxqrdt[1],maxqrdt[2],maxqrdt[3],
                                  maxqrdt[4],maxqrdt[5]));
          end
           debug.printarray(rawdata);    

      syslib.ossleep(1000);
       end

      其他推薦產(chǎn)品更多>>

      感興趣的產(chǎn)品PRODUCTS YOU ARE INTERESTED IN

      智能制造網(wǎng) 設計制作,未經(jīng)允許翻錄必究 .? ? ? Copyright(C)?2021 http://towegas.com,All rights reserved.

      以上信息由企業(yè)自行提供,信息內(nèi)容的真實性、準確性和合法性由相關(guān)企業(yè)負責,智能制造網(wǎng)對此不承擔任何保證責任。 溫馨提示:為規(guī)避購買風險,建議您在購買產(chǎn)品前務必確認供應商資質(zhì)及產(chǎn)品質(zhì)量。

      會員登錄

      ×

      請輸入賬號

      請輸入密碼

      =

      請輸驗證碼

      收藏該商鋪

      登錄 后再收藏

      提示

      您的留言已提交成功!我們將在第一時間回復您~