精品乱码一区内射人妻无码-亚洲中文AⅤ中文字幕在线-免费不卡国产福利在线观看-国产综合无码一区二区色蜜蜜

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

          免費會員·5年
          您現(xiàn)在的位置: 深圳市一天廣聯(lián)科技有限公司>>可編程串口以太網(wǎng)網(wǎng)關 全新的極簡編程>> 國網(wǎng)DL645-2007電表規(guī)約轉(zhuǎn)Modbus方案
          國網(wǎng)DL645-2007電表規(guī)約轉(zhuǎn)Modbus方案
          參考價: 面議
          具體成交價以合同協(xié)議為準
          • 產(chǎn)品型號
          • 品牌
          • 其他 廠商性質(zhì)
          • 所在地

          訪問次數(shù):476更新時間:2021-07-27 15:28:40

          聯(lián)系我們時請說明是智能制造網(wǎng)上看到的信息,謝謝!
          產(chǎn)品簡介
          產(chǎn)品名稱: 國網(wǎng)DL645-2007電表規(guī)約轉(zhuǎn)Modbus方案 規(guī)  格: 產(chǎn)品備注: 產(chǎn)品類別:DL645-20......
          產(chǎn)品介紹

          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ù),請咨詢電表廠家以獲得相關信息。

          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



          會員登錄

          ×

          請輸入賬號

          請輸入密碼

          =

          請輸驗證碼

          收藏該商鋪

          X
          該信息已收藏!
          標簽:
          保存成功

          (空格分隔,最多3個,單個標簽最多10個字符)

          常用:

          提示

          X
          您的留言已提交成功!我們將在第一時間回復您~
          產(chǎn)品對比 二維碼

          掃一掃訪問手機商鋪

          對比框

          在線留言