操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    翻譯:overXsky

    稿費:200RMB(不服你也來投稿啊!)

    投稿方式:發送郵件至linwei#360.cn,或登陸網頁版在線投稿

    概述


    本周二,微軟推送了一個重大補丁,修復了許多個重大安全漏洞,極大地提高了Edge瀏覽器開發者及其安全性的聲譽。但我希望微軟能夠說服那些依然遵循荒唐的IE政策的守舊派,或者至少能夠公開的解釋一下他們為什么毫不關心IE——要么廢除它,要么保護它。

    如果你還沒有看過之前的一篇《使用惡意軟件警告欺騙地址欄》,建議你在閱讀下面講如何繞過補丁的文章之前先去看一下。(注:有中文版本)

    超快速回顧


    微軟Edge允許我們加載它的一些包含.html頁面的內部資源,比如像acr_error.htm就可以,但是像BlockSite.htm這樣的卻不行。這是為什么呢?因為后者可以輕松地欺騙內部惡意軟件警告消息和地址欄。幾個月前,我們曾通過改變URL中的一個句點使其變成轉義副本的方法繞過了這一限制。不過現在這個漏洞已經被修復了,Edge開發者做了更改使得在進行檢查/字符串比較操作之前事先解碼了我們的欺騙URL。所以,我們現在需要找到一種新的方法。來吧!現在關掉手頭讓你分心的事物,投入時間并沉浸在這趣味無窮的比特世界中。

    目前沒有符號名文件


    微軟的很多公開符號都沒有上傳,所以我們就無法在極短的時間內出色地完成分析。但也不用太過擔心,不管怎樣我們都會盡力并成功繞過它。只需要以攻擊者的方式時刻在心中記住這一點:我們的目標是繞過這個補丁,就是這樣。而不是一直糾結于:“唉,我需要休息一周的時間直到微軟推送了符號名才行。”

    查找并分析“BlockSite.htm”字符串


    我們知道在海量的Edge代碼中,某個地方一定存在著對“BlockSite.htm”的字符串比較操作。將Edge附加到調試器上,找到這個字符串并在此處設立內存斷點,從而觀察哪段代碼樹讀取了它。

    下面這行JavaScript代碼甚至都沒有打開一個新的窗口就拋出了“ACCESS_DENIED”拒絕訪問異常。

    1
    window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm");

    Edge這種阻塞內部URL的行為是合理的:這個特定的錯誤頁面能夠接受來自hash/query-string中的參數,這就給了攻擊者欺騙地址欄和頁面內容的可乘之機。

    我們的目標是再次愚弄Edge打開該URL。然而,這次的任務中我們會使用下面的URL(經過編碼的句點和尾部的facebook,這樣方便在內存中找到字符串)

    1
    window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite%2ehtm?BlockedDomain=facebook.com");

    接下來就讓我們附加Edge進程然后查找BlockSite.htm字符串,并將搜尋范圍限制在EdgeHtml.dll模塊中,因為絕大多數的Edge代碼都駐留在此。這只是個猜測,如果我們沒有找到想要的結果可以嘗試搜尋其他模塊,甚至所有的Edge文件。

    成功加載正確的Edge進程后,我們需要知道模塊的起始和結束位置,這樣才能在內存中以確定的范圍進行搜索。

    看上去我們正處在內核模塊中,不要忘了我們的目標是找出EdgeHtml模塊中哪段代碼引用了BlockSite字符串。讓我們先看看棧軌跡中的最近的5次調用。

    開頭兩個屬于內核模塊,接下來的三個都來自于EdgeHtml。說得更明白些,edgehtml中的一段代碼調用了內核模塊/庫中的StrStrIW函數,這看上去十分標準。快速地Google一下StrStrIW就能看到MSDN對其的說明文檔。

    文檔相當清楚,也多虧了棧軌跡我們得知edgehtml調用了該函數。讓我們在Edge返回地址下斷點來分析到達該點前的代碼。(另外,我們還可以使用兩次pt命令,即跳至下一返回命令。可以自己試一試!)

    哈!我們看到%2e(句點)已經被解碼了。這讓我感覺像是Edge調用了StrStrIW函數后檢查了“/assets/errorPages/BlockSite.htm”是否包含在URL中。這是我目前相信的偽代碼:

    我們需要記住的很重要的一點是,之所以要調查這里是因為在字符串比較操作之后我們沒有看到別的檢查,而且比較操作就在我們面前,很快就將被執行。不過我們不用考慮的太多,只要能夠用類似的技術繞過就行了。

    最主要的問題在于,此處的比較操作是使用硬編碼的字符串來進行的,但我們知道URL可以有很多種方式來寫。之前我們的辦法就是編碼一個句點,這次需要想出一種新的辦法,因為打補丁后會在作比較前解碼句點從而導致失敗。

    現在我的腦海中浮現出許多種方式,比如多重編碼,或者在URL中加入更多的斜杠。讓我們試一試加入一個斜杠,可能能夠欺騙字符串檢查并被視為一個合法的URL。所以我們在errorPages后面加入一個斜杠,像這樣:

    哇!好像一個簡單的雙斜杠就能繞過補丁并讓Edge加載錯誤頁面,讓我們構造一個更完善的查詢字符串來完全騙過惡意軟件警告頁面:

    PoC驗證及后話


    PoC鏈接:

    https://www.cracking.com.ar/demos/edgesmartscreen/patch-bypass-1.html

    打開后界面如圖所示:

    使用方式很簡單,比如想要執行一個如下的JavaScript命令:

    只需在第一個文本框中輸入“http://www.baidu.com”,第二個文本框中輸入“It's not safe, please use https://www.so.com/ instead”,然后點擊open smartsceen按鈕,就會彈出baidu.com不安全的警告:

    試想一下,當普通用戶沒有防備地點擊了遭受攻擊的網站中的按鈕(比如導航網站的搜索引擎或者銀行登錄頁面),網站彈出一個警告頁面并甩出一個新的釣魚鏈接,然后用戶可能就中招了。

    其實最后會發現繞過的方式十分簡單,并且十分有效,但發現并找到這一思路的過程值得學習。

    一、什么是MODBUS?

    1.基本概念:

    MODBUS 是MODICON公司(現為施耐德電氣公司的一個品牌)最先倡導的一種軟的通訊規約,經過大多數公司 的實際應用,逐漸被認可,成為一種標準的通訊規約,只要按照這種規約進行 數據通訊或傳輸,不同的系統就可以通訊。目前,在RS232/RS485通訊過程中, 更是廣泛采用這種規約。

    常用的MODBUS 通訊規約有兩種,一種是MODBUS ASCII,一種是MODBUS RTU。 一般來說,通訊數據量少而且主要是文本的通訊則采用MODBUS ASCII規約,通訊數據數據量大而且是二進制數值時,多采用MODBUS RTU規約。

    在實際的應用過程中,為了解決某一個特殊問題,人們喜歡自己修改MODBUS規約來滿足自己的需要(事實上,人們經常使用自己定義的規約來通訊,這樣能解決問題,但不太規范)。更為普通的用法是,少量修改規約,但將規約格式附在軟件說明書一起,或直接放在幫助中,這樣就方便了用戶的通訊。

    2.MODBUS協議簡述:

    ACRXXXE系列儀表使用的是MODBUS-RTU通訊協議,MODBUS協議詳細定義了校驗碼、數據序列等,這些都是特定數據交換的必要內容。MODBUS協議在一根通訊線上 使用主從應答式連接(半雙工),這意味著在一根單獨的通訊線上信號沿著相反的兩個方向傳輸。首先,主計算機的信號尋址到一臺唯一的終端設備(從機),然 后,終端設備發出的應答信號以相反的方向傳輸給主機。

    MODBUS協議只允許在主機(PC,PLC等)和終端設備之間通訊,而不允許獨立的終端設備之間的數據交換,這樣各終端設備不會在它們初始化時占據通訊線路,而僅限于響應到達本機的查詢信號。

    3.查詢—回應周期:

    查詢

    查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持寄存器并返回它 們的內容。數據段必須包含要告之從設備的信息:從何寄存器開始讀及要讀的寄存器數量。錯誤檢測域為從設備提供了一種驗證消息內容是否正確的方法。

    回應

    如果從設備產生一正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的回應。數據段包括了從設備收集的數據:如寄存器值或狀態。如果有錯誤發生, 功能代碼將被修改以用于指出回應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。

    4.傳輸方式:

    傳輸方式是指一個數據幀內一系列獨立的數據結構以及用于傳輸數據的有限規則,下面定義了與MODBUS 協議– RTU方式相兼容的傳輸方式。

    每個字節的位:

    · 1個起始位

    · 8個數據位,最小的有效位先發送

    · 無奇偶校驗位

    · 1個停止位

    錯誤檢測(Error checking):CRC(循環冗余校驗)

    5.協議

    當數據幀到達終端設備時, 它通過一個簡單的“端口”進入被尋址到的設備,該設備去掉數據幀的“信封”(數據頭),讀取數據,如果沒有錯誤,就執行數據所請求的任務,然后,它將自己 生成的數據加入到取得的“信封”中,把數據幀返回給發送者。返回的響應數據中包含了以下內容:終端從機地址(Address)、被執行了的命令(Function)、執行命令生成的被請求數據(Data)和一個校驗碼(Check)。發生任何錯誤都不會有成功的響應,或者返回一個錯誤指示幀。

    6.地址(Address)域



    地址域在幀的開始部分,由 一個字節(8位二進制碼)組成,十進制為0~255,在我們的系統中只使用1~247,其它地址保留。這些位標明了用戶指定的終端設備的地址,該設備將接 收來自與之相連的主機數據。每個終端設備的地址必須是唯一的,僅僅被尋址到的終端會響應包含了該地址的查詢。當終端發送回一個響應,響應中的從機地址數據 便告訴了主機哪臺終端正與之進行通信。

    7 功能(Function)域

    功能域代碼告訴了被尋址到的終端執行何種功能。下表列出了該系列儀表用到的功能碼,以及它們的意義和功能。

    8.數據(Data)域

    數據域包含了終端執行特定 功能所需要的數據或者終端響應查詢時采集到的數據。這些數據的內容可能是數值、參考地址或者設置值。例如:功能域碼告訴終端讀取一個寄存器,數據域則需要 指明從哪個寄存器開始及讀取多少個數據,內嵌的地址和數據依照類型和從機之間的不同內容而有所不同。

    9.錯誤校驗(Check)域

    該域允許主機和終端檢查傳 輸過程中的錯誤。有時,由于電噪聲和其它干擾,一組數據在從一個設備傳輸到另一個設備時在線路上可能會發生一些改變,出錯校驗能夠保證主機或者終端不去響 應那些傳輸過程中發生了改變的數據,這就提高了系統的安全性和效率,錯誤校驗使用了16位循環冗余的方法(CRC16)。

    10.錯誤檢測的方法

    錯誤校驗(CRC)域占用兩個字節,包含了一個16位的二進制值。CRC值由傳輸設備計算出來,然后附加到數據幀上,接收設備在接收數據時重新計算CRC值,然后與接收到的CRC域中的值進行比較,如果這兩個值不相等,就發生了錯誤。

    CRC運算時,首先將一個 16位的寄存器預置為全1,然后連續把數據幀中的每個字節中的8位與該寄存器的當前值進行運算,僅僅每個字節的8個數據位參與生成CRC,起始位和終止位 以及可能使用的奇偶位都不影響CRC。在生成CRC時,每個字節的8位與寄存器中的內容進行異或,然后將結果向低位移位,高位則用“0”補充,最低位 (LSB)移出并檢測,如果是1,該寄存器就與一個預設的固定值(0A001H)進行一次異或運算,如果最低位為0,不作任何處理。

    上述處理重復進行,直到執行完了8次移位操作,當最后一位(第8位)移完以后,下一個8位字節與寄存器的當前值進行異或運算,同樣進行上述的另一個8次移位異或操作,當數據幀中的所有字節都作了處理,生成的最終值就是CRC值。

    11.生成一個CRC的流程為:

    1、預置一個16位寄存器為0FFFFH(全1),稱之為CRC寄存器。

    2 、把數據幀中的第一個字節的8位與CRC寄存器中的低字節進行異或運算,結果存回CRC寄存器。

    3、將CRC寄存器向右移一位,最高位填以0,最低位移出并檢測。

    4 、如果最低位為0:重復第三步(下一次移位);如果最低位為1:將CRC寄存器與一個預設的固定值(0A001H)進行異或運算。

    5、重復第三步和第四步直到8次移位。這樣處理完了一個完整的八位。

    6 、重復第2步到第5步來處理下一個八位,直到所有的字節處理結束。

    7、最終CRC寄存器的值就是CRC的值。

    此外還有一種利用預設的表格計算CRC的方法,它的主要特點是計算速度快,但是表格需要較大的存儲空間,該方法此處不再贅述,請參閱相關資料。

    二、特點

    Modbus具有以下幾個特點:

    1、標準、開放,用戶可以免費、放心地使用Modbus協議,不需要交納許可證費,也不會侵犯知識產權。目前,支持Modbus的廠家超過400家,支持Modbus的產品超過600種。

    2、Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質上傳送,如雙絞線、光纖、無線等。

    3、Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發簡單。

    三、功能碼定義

    1 ModBus功能碼

    01 READ COIL STATUS

    02 READ INPUT STATUS

    03 READ HOLDING REGISTER

    04 READ INPUT REGISTER

    05 WRITE SINGLE COIL

    06 WRITE SINGLE REGISTER

    15 WRITE MULTIPLE COIL

    16 WRITE MULTIPLE REGISTER

    四、傳輸方式

    在ModBus系統中有2種傳輸模式可選擇。這2種傳輸模式與從機PC通信的能力是同等的。選擇時應視所用ModBus主機而定,每個ModBus系統只能使用一種模式,不允許2種模式混用。一種模式是ASCII(美國信息 交換碼),另一種模式是RTU(遠程 終端設備)。

    用戶選擇想要的模式,包括 串口通信參數( 波特率、校驗方式等),在配置每個控制器的時候,在一個Modbus網絡上的所有設備都必須選擇相同的傳輸模式和串口參數。所選的ASCII或RTU方式僅適用于標準的Modbus網絡,它定義了在這些網絡上連續傳輸的消息段的每一位,以及決定怎樣將信息打包成消息域和如何解碼。在其它網絡上(像MAP和Modbus Plus)Modbus消息被轉成與串行傳輸無關的幀。

    1.傳輸模式特性:

    ASCII可打印字符便于故障檢測,而且對于用高級語言(如Fortran)編程的主計算機及主PC很適宜。RTU則適用于 機器語言編程的計算機和PC主機。

    用RTU模式傳輸的數據是8位二進制字符。如欲轉換為ASCII模式,則每個RTU字符首先應分為高位和低位兩部分,這兩部分各含4位,然后轉換成十六進制等量值。用以構成 報文的ASCII字符都是十六進制字符。ASCII模式使用的 字符雖是RTU模式的兩倍,但ASCII數據的譯碼和處理更為容易一些,此外,用RTU模式時報文字符必須以連續數據流的形式傳送,用ASCII模式,字符之間可產生長達1s的間隔,以適應速度較慢的機器。

    控制器能設置為兩種傳輸模式(ASCII或RTU)中的任何一種在標準的Modbus網絡通信。

    2.ASCII模式:

    當控制器設為在Modbus網絡上以ASCII(美國標準信息交換代碼)模式通信,一個信息中的每8位字節作為2個ASCII字符傳輸,如數值63H用ASCII方式時,需發送兩個字節,即ASCII“6"(0110110)和ASCII”3“(0110011),ASCII字符占用的位數有7位和8位,國際通用7位為多。這種方式的主要優點是字符發送的時間間隔可達到1秒而不產生錯誤。

    代碼系統

    • 十六進制,ASCII 字符0...9,A...F
    • 消息中的每個ASCII字符都是一個十六進制字符組成 每個字節的位
    • 1個起始位
    • 7個 數據位,最小的有效位先發送
    • 1個 奇偶校驗位,無校驗則無 1個停止位(有校驗時),2個Bit(無校驗時) 錯誤檢測域
    • LRC(縱向冗長檢測)

    3.RTU模式:

    當控制器設為在Modbus網絡上以RTU模式通信,在消息中的每個8Bit字節按照原值傳送,不做處理,如63H,RTU將直接發送01100011。這種方式的主要優點是:數據幀傳送之間沒有間隔,相同波特率下傳輸數據的密度要比ASCII高,傳輸速度更快。

    代碼系統

    • 8位二進制, 十六進制數0...9,A...F
    • 消息中的每個8 位域都是一或兩個十六進制字符組成
    • 每個字節的位 1個起始位 8個 數據位,最小的有效位先發送
    • 1個 奇偶校驗位,無校驗則無
    • 1個停止位(有校驗時),2個Bit(無校驗時)

    五、數據校驗方式

    1.CRC:

    CRC域是兩個字節,包含一16位的二進制值。它由傳輸設備計算后加入到消息中。接收設備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,則有誤。

    CRC是先調入一值是全“1”的16位寄存器,然后調用一過程將消息中連續的8位字節和當前寄存器中的值進行處理。僅每個字符中的8Bit數據對CRC有效,起始位和停止位以及 奇偶校驗位均無效。

    CRC產生過程中,每個8位字符都單獨和寄存器內容相異或(XOR),結果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨和預置的值或一下,如果LSB為0,則不進行。整個過程要重復8次。在最后一位(第8位)完成后,下一個8位字節又單獨和寄存器的當前值相異或(XOR)。最終寄存器中的值,是消息中所有的字節都執行之后的CRC值。

    CRC添加到消息中時,低字節先加入,然后高字節。

    CRC-16錯誤校驗程序如下:報文(此處只涉及 數據位,不指起始位、停止位和任選的 奇偶校驗位)被看作是一個連續的二進制,其最高有效位(MSB)首選發送。報文先與X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示為二進制數11000,0000,0000,0101。整數商位忽略不記,16位余數加入該報文(MSB先發送),成為2個CRC校驗字節。余數中的1全部初始化,以免所有的零成為一條報文被接收。經上述處理而含有CRC字節的報文,若無錯誤,到接收設備后再被同一多項式(X↑16+X↑15+X↑2+1)除,會得到一個零余數(接收設備核驗這個CRC字節,并將其與被傳送的CRC比較)。全部運算以2為模(無進位)。

    習慣于成串發送數據的設備會首選送出字符的最右位(LSB-最低有效位)。而在生成CRC情況下,發送首位應是被除數的最高有效位MSB。由于在運算中不用進位,為便于操作起見,計算CRC時設MSB在最右位。生成多項式的位序也必須反過來,以保持一致。多項式的MSB略去不記,因其只對商有影響而不影響余數。

    生成CRC-16校驗字節的步驟如下:

    ①裝如一個16位 寄存器,所有數位均為1。

    ②該16位寄存器的高位 字節與開始8位字節進行“異或”運算。運算結果放入這個16位寄存器。

    ③把這個16寄存器向右移一位。

    ④若向右(標記位)移出的數位是1,則生成多項式10,1000,000,0000,001和這個寄存器進行“異或”運算;若向右移出的數位是0,則返回③。

    ⑤重復③和④,直至移出8位。

    ⑥另外8位與該十六位寄存器進行“異或”運算。

    ⑦重復③~⑥,直至該 報文所有字節均與16位 寄存器進行“異或”運算,并移位8次。

    ⑧這個16位寄存器的內容即2字節CRC錯誤校驗,被加到報文的最高有效位。 另外,在某些非ModBus通信協議中也經常使用CRC16作為校驗手段,而且產生了一些CRC16的變種,他們是使用CRC16多項式X↑16+X↑15+X↑2+1,單首次裝入的16位寄存器為0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次裝入寄存器值為0000或FFFFH。CRC簡單函數如下:

    2.LRC:

    LRC錯誤校驗用于ASCII模式。這個錯誤校驗是一個8位二進制數,可作為2個ASCII十六進制字節傳送。把十六進制字符轉換成二進制,加上無循環進位的二進制字符和二進制補碼結果生成LRC錯誤校驗(參見圖)。這個LRC在接收設備進行核驗,并與被傳送的LRC進行比較,冒號(:)、回車符號(CR)、換行字符(LF)和置入的其他任何非ASCII十六進制字符在運算時忽略不計。

    Modbus與PROFIBUS-DP協議比較

    Modbus的協議內容是完全公開的,內容是簡單滴,實現起來是非常容易滴,單片機、PLC、DCS統統都能輕易實現。

    Profibus則要復雜一些,關鍵是需要專用芯片進行二次開發,并且需要得到上級組織的認證,開發成本肯定高不少 。

    當然從性能上講,基于串口的modbus rtu/ASCII通訊性能肯定比不過profibus dp,但是就一些儀表級的簡單通訊或者控制器級別的小數據量通訊,modbus是足以勝任的。說白了,就是modbus是*絲,profibus是高富帥!

    1、01號命令,讀可讀寫數字量寄存器(線圈狀態):

    計算機發送命令:[設備地址] [命令號01] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

    例:[11][01][00][13][00][25][CRC低][CRC高]

    意義如下:

    <1>設備地址:在一個485總線上可以掛接多個設備,此處的設備地址表示想和哪一個設備通訊。例子中為想和17號(十進制的17是十六進制的11)通訊。

    <2>命令號01:讀取數字量的命令號固定為01。

    <3>起始地址高8位、低8位:表示想讀取的開關量的起始地址(起始地址為0)。比如例子中的起始地址為19。

    <4>寄存器數高8位、低8位:表示從起始地址開始讀多少個開關量。例子中為37個開關量。

    <5>CRC校驗:是從開頭一直校驗到此之前。設備響應:[設備地址] [命令號01] [返回的字節個數][數據1][數據2]...[數據n] [CRC校驗的高8位] [CRC校驗的低8位]

    例:[11][01][05][CD][6B][B2][0E][1B] [CRC高] [CRC低]

    意義如下:

    <1>設備地址和命令號和上面的相同。

    <2>返回的字節個數:表示數據的字節個數,也就是數據1,2...n中的n的值。

    <3>數據1...n:由于每一個數據是一個8位的數,所以每一個數據表示8個開關量的值,每一位為0表示對應的開關斷開,為1表示閉合。比如例子中,表示20號(索引號為19)開關閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關量不是8的整倍數,那么最后一個字節的高位部分無意義,置為0。

    <4>CRC校驗同上。

    2、05號命令,寫數字量(線圈狀態):

    計算機發送命令:[設備地址] [命令號05] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

    例:[11][05][00][AC][FF][00][CRC高][CRC低]

    意義如下:

    <1>設備地址和上面的相同。

    <2>命令號:寫數字量的命令號固定為05。

    <3>需下置的寄存器地址高8位,低8位:表明了需要下置的開關的地址。

    <4>下置的數據高8位,低8位:表明需要下置的開關量的狀態。例子中為把該開關閉合。注意,此處只可以是[FF][00]表示閉合[00][00]表示斷開,其他數值非法。

    <5>注意此命令一條只能下置一個開關量的狀態。

    設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。

    3、03號命令,讀可讀寫模擬量寄存器(保持寄存器):

    計算機發送命令:[設備地址] [命令號03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的高8位] [CRC校驗的低8位]

    例:[11][03][00][6B][00][03] [CRC高][CRC低]

    意義如下:

    <1>設備地址和上面的相同。

    <2>命令號:讀模擬量的命令號固定為03。

    <3>起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107。

    <4>寄存器數高8位、低8位:表示從起始地址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個字節。

    設備響應:[設備地址] [命令號03] [返回的字節個數][數據1][數據2]...[數據n] [CRC校驗的高8位] [CRC校驗的低8位]

    例:[11][03][06][02][2B][00][00][00][64] [CRC高] [CRC低]

    意義如下:

    <1>設備地址和命令號和上面的相同。

    <2>返回的字節個數:表示數據的字節個數,也就是數據1,2...n中的n的值。例子中返回了3個模擬量的數據,因為一個模擬量需要2個字節所以共6個字節。

    <3>數據1...n:其中[數據1][數據2]分別是第1個模擬量的高8位和低8位,[數據3][數據4]是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。

    <4>CRC校驗同上。

    4、06號命令,寫單個模擬量寄存器(保持寄存器):

    計算機發送命令:[設備地址] [命令號06] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的高8位] [CRC校驗的低8位]

    例:[11][06][00][01][00][03] [CRC高] [CRC低]

    意義如下:

    <1>設備地址和上面的相同。

    <2>命令號:寫模擬量的命令號固定為06。

    <3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。

    <4>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為3。

    <5>注意此命令一條只能下置一個模擬量的狀態。

    設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。

    5、16號命令,寫多個模擬量寄存器(保持寄存器):

    計算機發送命令:[設備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數據數量高8位] [數據數量低8位] [下置的數據高8位] [低8位][……][……] [CRC校驗的高8位] [CRC校驗的低8位]



    例:[11][16][00][01][00][01][00][05] [CRC高] [CRC低]

    意義如下:

    <1>設備地址和上面的相同。

    <2>命令號:寫模擬量的命令號固定為16。

    <3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。

    <4>需下置的數據數量高8位,低8位:表明了需要下置的數據數量,這里為1。

    <5>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為5。

    設備響應:如果成功把計算機返回的如下命令,否則不響應。設備響應:[設備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數據數量高8位] [數據數量低8位] [CRC校驗的高8位] [CRC校驗的低8位],如上例返回:[11][16][00][01][00][01] [CRC高] [CRC低]

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有