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

          行業(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://www.tzhjjxc.com,All rights reserved.

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

          會員登錄

          ×

          請輸入賬號

          請輸入密碼

          =

          請輸驗證碼

          收藏該商鋪

          登錄 后再收藏

          提示

          您的留言已提交成功!我們將在第一時間回復您~
          湟中县| 山西省| 双鸭山市| 肥西县| 水富县| 且末县| 通河县| 和硕县| 乃东县| 墨竹工卡县| 朔州市| 墨脱县| 游戏| 新宾| 太谷县| 乌苏市| 五家渠市| 寿阳县| 当雄县| 灵川县| 宁晋县| 涟源市| 法库县| 寻甸| 湖州市| 龙州县| 张家港市| 陇南市| 陆良县| 绥阳县| 依兰县| 共和县| 通榆县| 鲁甸县| 湖口县| 错那县| 哈尔滨市| 尼勒克县| 朝阳区| 呼伦贝尔市| 江口县|