精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

利用網(wǎng)絡代理擴展1-Wire范圍

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-03-01 14:37 ? 次閱讀

本文檔將介紹一種使用代理將1-Wire范圍擴展到近無窮大極限的方法。描述基本代理的最佳類比是想象大多數(shù)公司的代理服務器(有時稱為公司防火墻)。在此設置中,只有一臺計算機(代理)具有與 Internet 的實際連接,其余用戶計算機只能訪問代理。LAN 上用于 LAN 外部計算機的所有網(wǎng)絡數(shù)據(jù)包在 WAN 上重復,反之亦然。這一理念可以應用到1-Wire網(wǎng)絡上。通過代理連接到1-Wire網(wǎng)絡需要幾個軟件模塊:客戶端模塊和主機模塊。主機模塊是在1-Wire代理服務器(PC、MxTNI?或微控制器)上運行的代碼,該服務器具有對1-Wire網(wǎng)絡的硬件訪問權限。客戶端模塊是在僅具有網(wǎng)絡訪問權限以訪問主機模塊的遠程計算機上運行的代碼。主機模塊可能訪問客戶端模塊,而不是對1-Wire網(wǎng)絡的硬件訪問,而客戶端模塊將引用另一個主機模塊。通過這種方式,可以將到達1-Wire網(wǎng)絡的代理鏈接在一起。

介紹

1-Wire協(xié)議的最初設計源于通過短連接與附近設備通信的愿望。盡管通過仔細考慮,可以將此連接的長度延長到比最初預期的更遠,但限制仍然非常真實。

本文檔將介紹一種使用代理將1-Wire范圍擴展到近無窮大極限的方法。描述基本代理的最佳類比是想象大多數(shù)公司的代理服務器(有時稱為公司防火墻)。通常,公司為其員工提供LAN(局域網(wǎng)),用于連接彼此的計算機并共享文件。公司通常需要提供一種訪問互聯(lián)網(wǎng)(非常廣域網(wǎng))的方法。在此設置中,只有一臺計算機(代理)具有與 Internet 的實際連接,其余計算機只能訪問代理。代理代表 LAN 上的所有計算機發(fā)出所有互聯(lián)網(wǎng)數(shù)據(jù)請求。在此示例中,代理充當 WAN 和 LAN 之間的接口。LAN 上用于 LAN 外部計算機的所有網(wǎng)絡數(shù)據(jù)包在 WAN 上“重復”,反之亦然。

poYBAGP-8qCAba11AAAf2-tHsmI100.gif


圖1.代理服務器示例。

圖 1 說明了代理服務器提供的基本服務,即提供對內(nèi)部計算機通常無法訪問的網(wǎng)絡的訪問權限。更具體地說,可以通過 LAN 訪問代理的內(nèi)部計算機在沒有代理幫助的情況下沒有其他方式訪問 WAN。通過代理服務器路由信息請求,現(xiàn)在可以訪問以前無法訪問的外部服務器。盡管很多細節(jié)都發(fā)生了變化,但同樣的基本思想可以應用于1-Wire網(wǎng)絡。圖 2 說明了此應用程序的基礎知識。

pYYBAGP-8qGANkqLAAAoxnjTuZM867.gif


圖2.1-Wire代理示例。

圖2中的應用代表希望接入1-Wire網(wǎng)絡,但無論出于何種原因無法直接訪問該網(wǎng)絡的所有應用。原因可能是它們離網(wǎng)絡太遠,或者它們在不允許硬件訪問的環(huán)境中運行(即在 Java 驅(qū)動的手機上運行的 Java? 應用程序)。由于電氣限制,使用1-Wire網(wǎng)絡的應用通常運行在距離200-Wire從器件不到1米的硬件上。在圖2所示的場景中,應用只需要訪問網(wǎng)絡介質(zhì)和合適的1-Wire代理服務器即可。網(wǎng)絡介質(zhì)可以是任何內(nèi)容,例如 RF 無線網(wǎng)絡、IR 點對點鏈路或 TCP/IP 以太網(wǎng)網(wǎng)絡。得益于被稱為互聯(lián)網(wǎng)的超大型廣域網(wǎng),外部計算機與實際1-Wire網(wǎng)絡之間的距離不再是問題。

概述

通過代理連接到1-Wire網(wǎng)絡需要幾個模塊:客戶端模塊和主機模塊。主機模塊是在1-Wire代理服務器(PC、MxTNI或微控制器)上運行的代碼,該服務器具有對1-Wire網(wǎng)絡的硬件訪問權限。客戶端模塊是在僅具有網(wǎng)絡訪問權限以訪問主機模塊的遠程計算機上運行的代碼。主機模塊(而不是對1-Wire網(wǎng)絡的硬件訪問)可以訪問客戶端模塊,該客戶端模塊將引用另一個主機模塊。通過這種方式,可以將到達1-Wire網(wǎng)絡的代理鏈接在一起。圖3顯示了1-Wire應用、客戶端模塊、主機模塊和1-Wire網(wǎng)絡之間的交互性。

poYBAGP-8qKAT5nBAAAd-cVSQdo470.gif

圖3.客戶端/主機配置。

PC在1-Wire網(wǎng)絡上的通信方式通常是使用適配器,通常使用合適的1-Wire主站來產(chǎn)生正確的時序。例如,DS9097U適配器使用DS2480B串行1-Wire線路驅(qū)動器芯片。PC 使用串行端口連接到 DS9097U。通過串行端口發(fā)送的命令到達DS2480B,然后轉(zhuǎn)換為1-Wire網(wǎng)絡命令。DS2480B通過PC的串行端口返回任何1-Wire網(wǎng)絡命令的輸出。但是,當通過1-Wire代理與1-Wire網(wǎng)絡通信時,PC將調(diào)用客戶端模塊向主機模塊發(fā)送命令。這些命令將通過網(wǎng)絡介質(zhì)(例如因特網(wǎng))傳輸?shù)街鳈C模塊。然后,主機模塊將通過1-Wire主站與物理1-Wire網(wǎng)絡進行通信。1-Wire通信的結果將通過網(wǎng)絡介質(zhì)返回到客戶端模塊的緩沖區(qū)中。

實現(xiàn)

發(fā)生重復的軟件應用層可以是許多地方中的任何一個。1-Wire應用主要由以下幾層組成:

應用—保持有關如何使用1-Wire數(shù)據(jù)的知識(即,如何將1-Wire通信塊轉(zhuǎn)換為以華氏度為單位的溫度結果)。

演示 - 維護有關不同數(shù)據(jù)格式的知識,并將其包裝到可能有用的 API 中。

傳輸—保持有關如何將數(shù)據(jù)塊傳輸?shù)?-Wire網(wǎng)絡或從<>-Wire網(wǎng)絡傳輸數(shù)據(jù)塊的知識。

鏈路—保持如何重置1-Wire網(wǎng)絡并傳輸<>或<>的知識。

在鏈路層安裝代理需要通過網(wǎng)絡傳輸串行或并行端口命令。例如,如果主機的某個串行端口上裝有DS9097U適配器,則客戶端模塊將發(fā)送直接針對DS2480B主芯片的命令。iButton 網(wǎng)站上提供的串行到以太網(wǎng)示例(請參閱本文檔末尾的鏈接部分)完全演示了這一原則。此示例允許電腦具有虛擬 COM 端口。發(fā)送到此虛擬COM端口的所有命令都通過網(wǎng)絡傳輸?shù)搅硪慌_設備(PC或MxTNI)。如果主機設備的串行端口上有DS9097U,則客戶端可以將DS9097U視為直接連接。

在傳輸層安裝代理的想法由IEEE? 1451.4的協(xié)議規(guī)范處理。在這一層,客戶端模塊不會關注用于連接1-Wire網(wǎng)絡的實際硬件,而是將鏈路層視為主機處理的理所當然的東西。客戶端將主要向主機傳輸重置命令和數(shù)據(jù)塊。

最高的層,也可能是最有效的層,將是表示層。這種代理包含在1-Wire API for Java Kit中。在1-Wire API for Java中,每個適合1-Wire連接的適配器都由DSPortAdapter的一個子類表示。在面向?qū)ο蟮恼Z言中,這意味著各種適配器(串行、并行或 USB)的所有實例都可以被視為其父類 DSPortAdapter 的實例。這是在面向?qū)ο?a target="_blank">程序員應該非常熟悉的演示文稿中隱藏實現(xiàn)的情況。由于1-Wire API中的這種設計選擇,因此添加DSPortAdapter的新子類非常簡單,該子類僅實現(xiàn)上述客戶端模塊。圖 4 的類圖中描述了此客戶端模塊及其與主機模塊的關系。

pYYBAGP-8qOAYSLgAAAuwSKnLkw316.gif

圖4.類交互圖。

使用1-Wire代理的最大問題是數(shù)據(jù)包延遲。如果網(wǎng)絡介質(zhì)的數(shù)據(jù)包周轉(zhuǎn)時間為一秒,則大多數(shù)實時應用程序根本不可能實現(xiàn)。理想情況下,網(wǎng)絡數(shù)據(jù)包延遲(有時稱為 PING 時間)應小于 PC 在連接外部硬件時產(chǎn)生的延遲。例如,如果發(fā)送到串行端口和從串行端口讀取的任何數(shù)據(jù)的數(shù)據(jù)包周轉(zhuǎn)時間為 20 毫秒,則 5 毫秒的網(wǎng)絡數(shù)據(jù)包延遲幾乎不會明顯。如果網(wǎng)絡數(shù)據(jù)包延遲明顯更高,則可能需要更高層的實現(xiàn)來提高應用程序的實時響應能力。為了說明這一點,以下是鏈路層代理的示例數(shù)據(jù)包交換可能的樣子:

Client Module transmits a serial write command to reset the DS2480B
        Packet = {XMIT_SERIAL, DS2480B_COMMAND_MODE, DS2480B_CMD_RESET}

Server Module writes bytes to serial port.

Client Module transmits a serial read command with a number of bytes to read
        Packet = {RECV_SERIAL, NUM_BYTES_TO_RECV}

Server Module transmits bytes read from serial port, representing return value of reset command
        Packet = {NUM_BYTES_TO_RECV, however many bytes...}

Client Module interprets return value

對于發(fā)送的每個數(shù)據(jù)包,為數(shù)據(jù)包延遲添加一個乘數(shù)。如果以這種方式連續(xù)多次調(diào)用DS9097U,很明顯,它可以相當快地增加大量網(wǎng)絡流量。在表示層,可以按如下方式再現(xiàn)完全相同的1-Wire活動:

Client Module transmits reset command
        Packet = {ADAPTER _CMD_RESET}

Server Module transmits reset command to serial port. Then reads bytes back from serial port, and
interprets the return value of reset command. Server Module transmits return value
        Packet = {RET_SUCCESS}

將1-Wire代理實現(xiàn)方案移至應用層可以顯著減少數(shù)據(jù)包延遲問題。但是,由于這一層的實現(xiàn)是高度不可移植的(即,應用層的實現(xiàn)本質(zhì)上與特定應用程序綁定),因此目前沒有可用的參考實現(xiàn)。為了便于說明,讓我們檢查一下與一個特定應用的區(qū)別:溫度輪詢。用于溫度轉(zhuǎn)換的可能網(wǎng)絡數(shù)據(jù)包交換將在鏈路層和表示層生成大量數(shù)據(jù)包。需要發(fā)送“1-Wire復位”命令、“匹配ROM”命令和“執(zhí)行溫度轉(zhuǎn)換”命令。客戶端模塊將負責解釋每個命令的返回值,因為它以網(wǎng)絡數(shù)據(jù)包的形式從主機模塊接收。如果在應用層實施1-Wire代理,則客戶端模塊只需發(fā)送“執(zhí)行完整溫度轉(zhuǎn)換”命令。來自服務器的返回值(在單個數(shù)據(jù)包中)可能只是溫度轉(zhuǎn)換的結果。

軟件接口示例

在1-Wire API for Java Kit中使用客戶端模塊非常簡單,只需創(chuàng)建NetAdapter的實例并將連接字符串傳遞給初始化方法即可。連接字符串的格式為:

::

主機名是運行主機模塊的 PC(或 MxTNI)的主機名或該計算機的 IP 地址。端口是主機正在偵聽的 TCP/IP 端口。共享密鑰用于簡單形式的身份驗證。當客戶端模塊連接到主機模塊時,主機會向客戶端發(fā)出隨機質(zhì)詢。然后,客戶端查找隨機質(zhì)詢字節(jié)和共享密鑰的 CRC-16。然后將此CRC-16傳輸回主機進行驗證。如果 CRC-16 與主機計算的內(nèi)容匹配,則認為用戶已通過身份驗證。請注意,NetAdapter 中還有一種附加的初始化方法,該方法允許通過接受已建立的 TCP/IP 套接字(可能是加密連接)來執(zhí)行進一步的步驟來保護連接。

在1-Wire API for Java Kit中,有一個示例程序可以簡化主機模塊的使用。此應用程序?qū)⒅鳈C模塊的所有參數(shù)作為命令行上的參數(shù),并使用這些參數(shù)創(chuàng)建 NetAdapterHost 的實例。桌面和 MxTNI 都包含預構建的二進制文件。圖 5 顯示了在 COM9097 串行端口上使用 DS1U 適配器在桌面上啟動主機模塊的命令行。當前工作目錄是1-Wire API for Java Kit中StartNetAdapterHost的應用程序文件夾。

java -cp ".;" StartNetAdapterHost -adapterName DS9097U
        -adapterPort COM1 -listenPort 6161 -secret "this is my secret"

圖5.在 PC 上啟動主機模塊。

在 PC 上執(zhí)行圖 5 中所示的行將啟動 NetAdapterHost,它將在端口 6161 上創(chuàng)建一個偵聽 TCP/IP 套接字。用于簡單身份驗證的共享密鑰是“這是我的密鑰”。在 MxTNI 上啟動主機模塊幾乎相同。只需將 StartNetAdapterHost.tini 文件通過 ftp 到 MxTNI 機器即可。然后登錄并使用圖 6 中所示的命令行。

java StartNetAdapterHost.tini -adapterName TINIExternalAdapter
        -adapterPort serial1 -listenPort 6161 -secret "this is my secret"

圖6.在 MxTNI 上啟動主機模塊。

主機模塊啟動后,將接受來自客戶端模塊的傳入連接。數(shù)字 圖8所示為遠程溫度演示,演示如何連接到主機并與1-Wire器件交互。此應用程序?qū)⑦B接到指定的主機并查找任何溫度設備。它 然后輪詢每個設備,并以攝氏度和華氏度顯示當前溫度。自 使用示例應用,只需將代碼復制并粘貼到名為 RemoteTemperatureDemo.java 的文件中即可。 更改類頂部的常量以反映實際設置(即,確保主機名 變量具有啟動 NetAdapterHost 的計算機的主機名)。然后執(zhí)行 圖 7 中所示的命令來編譯和執(zhí)行此類。

javac -classpath ".;" RemoteTemperatureDemo.java

java -classpath ".;" RemoteTemperatureDemo

圖7.編譯并運行遠程溫度演示。

該程序的輸出應為找到的每個溫度器件的64位1-Wire地址,后跟當前溫度。如果未找到設備,將顯示一條錯誤消息,指示這一點。

有關使用 NetAdapter 和 NetAdapterHost 的更多信息,請參閱這些類的 JavaDocs。所有1-Wire類的JavaDocs都包含在1-Wire API for Java Kit中。

import com.dalsemi.onewire.adapter.*;
import com.dalsemi.onewire.container.*;
import com.dalsemi.onewire.utils.*;
import java.util.Enumeration;

public class RemoteTemperatureDemo {
        // update these variables to reflect your setup
        public static final String hostname = "shughes.dalsemi.com";
        public static final int port = 6161;
        public static final String secret = "this is my secret";

        public static void main (String[] args) {
                OneWireContainer owc = null;
                TemperatureContainer tc = null;

                // create the NetAdapter object
                NetAdapter adapter = new NetAdapter();

                try {
                        // connect to the NetAdapterHost
                        adapter.selectPort(hostname + ":" + port + ":" + secret);
                        adapter.beginExclusive(true);

                        // find the first temperature device
                        Enumeration e = adapter.getAllDeviceContainers();
                        while (tc==null && e.hasMoreElements()) {
                                // get the next container
                                owc = (OneWireContainer)e.nextElement();
                                // check if it is a temperature device
                                if(owc instanceof TemperatureContainer) {
                                        tc = (TemperatureContainer)owc;
                                        System.out.println("Device: " + owc.getAddressAsString());

                                        // poll the temperature device
                                        byte[] state = tc.readDevice();
                                        tc.doTemperatureConvert(state);
                                        double temp = tc.getTemperature(state);

                                        // display temeprature result
                                        System.out.print(" " + temp + " C (");
                                        System.out.println(Convert.toFahrenheit(temp) + " F)");
                                }
                        }
                        
                        // if no temperature devices were found
                        if(tc==null)
                                System.out.println("No temperature devices found!");
                } catch (Exception e) {
                        System.out.println(e.getMessage());
                } finally {
                        adapter.endExclusive();
                        try {
                                adapter.freePort();
                        } catch(Exception e) {;}
                }
        }
}

圖8.遠程溫度演示。

審核編輯:郭婷


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7421

    瀏覽量

    87714
  • 服務器
    +關注

    關注

    12

    文章

    9021

    瀏覽量

    85183
  • 1-Wire
    +關注

    關注

    0

    文章

    49

    瀏覽量

    21293
收藏 人收藏

    評論

    相關推薦

    1-Wire時序的理解及配置

    /μs的壓擺率是一個較理想的設置。此時1-Wire從器件速率范圍為15μs至54μs。只有一個從器件并且時基低于54μs時,系統(tǒng)將無法工作。下降沿擺率變?yōu)?.65V/μs或2.2V/μs,會增加網(wǎng)絡
    發(fā)表于 11-12 00:17

    如何訪問1-Wire API

    任何組件在創(chuàng)建者來實現(xiàn)這一點。有人知道如何訪問1-Wire API嗎?謝謝 以上來自于百度翻譯 以下為原文I have been looking for a 1-wire component
    發(fā)表于 07-29 15:25

    應用筆記187 1-Wire搜索算法

    應用筆記187 1-Wire搜索算法 Dallas Semiconductor的每片1-Wire®器件都有唯一的64 位注冊碼,它存儲在只讀存儲器(ROM)中。在1-Wire網(wǎng)絡
    發(fā)表于 04-10 09:59 ?25次下載

    1-Wire搜索算法

    摘要:Maxim的1-Wire®器件都帶有一個64位的唯一注冊碼,存儲在只讀存儲器內(nèi)(ROM),能夠在1-Wire網(wǎng)絡中通過1-Wire主機對其尋址。如果
    發(fā)表于 04-30 14:09 ?1364次閱讀
    <b class='flag-5'>1-Wire</b>搜索算法

    Overview of 1-Wire Technology

    Abstract: This article provides a general overview of the 1-Wire technology, its communication
    發(fā)表于 05-08 11:43 ?1896次閱讀
    Overview of <b class='flag-5'>1-Wire</b> Technology

    Reading and Writing 1-Wire Dev

    Reading and Writing 1-Wire Devices Through Serial Interfaces Abstract: This application note
    發(fā)表于 06-27 23:47 ?1572次閱讀
    Reading and Writing <b class='flag-5'>1-Wire</b> Dev

    A Simple 1-Wire DAC

    A Simple 1-Wire DAC Abstract: Connecting the outputs of a 1-Wire addressable switch (DS2408) to a
    發(fā)表于 10-23 17:44 ?1056次閱讀
    A Simple <b class='flag-5'>1-Wire</b> DAC

    Bluetooth to 1-Wire communicat

    Bluetooth to 1-Wire communication using the DS9097U Abstract: This application note explains
    發(fā)表于 02-27 17:29 ?1289次閱讀
    Bluetooth to <b class='flag-5'>1-Wire</b> communicat

    1-Wire總線主機

    Abstract: Communication with 1-Wire slave devices requires a 1-Wire master. There are numerous ways
    發(fā)表于 10-19 17:02 ?53次下載

    使用NFC系統(tǒng)無線供電和訪問1-Wire網(wǎng)絡

    對于1-Wire網(wǎng)絡的感應功率傳輸、訪問、控制和信息交換,可以利用近場通信(NFC)系統(tǒng)。利用從NFC鏈路收集的功率,可通過單個節(jié)點實現(xiàn)1-Wire
    的頭像 發(fā)表于 12-22 11:50 ?3318次閱讀
    使用NFC系統(tǒng)無線供電和訪問<b class='flag-5'>1-Wire</b><b class='flag-5'>網(wǎng)絡</b>

    可靠的長線1-Wire網(wǎng)絡指南

    本應用筆記介紹了一個項目的結果,以表征各種形式、規(guī)模和數(shù)量的1-Wire網(wǎng)絡的運行情況。它還為可靠的網(wǎng)絡運行提供了工作參數(shù)。這里討論的一些方面在短線應用中并不重要,例如小于1米的
    的頭像 發(fā)表于 01-16 16:35 ?1308次閱讀
    可靠的長線<b class='flag-5'>1-Wire</b><b class='flag-5'>網(wǎng)絡</b>指南

    通過串行接口讀寫1-Wire器件

    本應用筆記介紹了1-Wire協(xié)議在新舊器件中的電氣方面。一個特別的章節(jié)解釋了如何為由新舊1-Wire從機組成的網(wǎng)絡確定適當?shù)臅r序參數(shù)。1-Wire母版概念部分提供了詳細討論
    的頭像 發(fā)表于 02-21 17:21 ?1793次閱讀
    通過串行接口讀寫<b class='flag-5'>1-Wire</b>器件

    可靠的長線1-Wire網(wǎng)絡指南

    1-Wire協(xié)議最初設計用于通過短連接與附近設備進行通信。1-Wire也是在單個微處理器端口引腳上增加輔助存儲器的一種方式。后來開發(fā)的方法將1-Wire協(xié)議擴展到遠遠超出電路板尺寸的
    的頭像 發(fā)表于 03-01 14:21 ?1782次閱讀
    可靠的長線<b class='flag-5'>1-Wire</b><b class='flag-5'>網(wǎng)絡</b>指南

    使用UART實現(xiàn)1-Wire總線主控

    本應用筆記解釋了如何使用微處理器的UART實現(xiàn)1-Wire總線主機。它包括對所需電氣接口、UART配置以及UART和1-Wire信號之間的時序關系的說明。此外,它還參考了UART 1-Wire
    的頭像 發(fā)表于 03-29 11:28 ?3738次閱讀
    使用UART實現(xiàn)<b class='flag-5'>1-Wire</b>總線主控

    如何將1-Wire主機復用到多個通道?

    常常是不可避免的,導致確定有效限制的難度加大。解決這些難題的一種方法是利用模擬多路復用器(mux)將星形拓撲分解成許多通道。使用多個通道的優(yōu)點包括:加快各個1-Wire節(jié)點的接入時間,提高網(wǎng)絡的魯棒性,以及在不同通道上混用僅過驅(qū)
    的頭像 發(fā)表于 10-24 16:05 ?401次閱讀
    如何將<b class='flag-5'>1-Wire</b>主機復用到多個通道?