欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    翻譯:overXsky

    稿費(fèi):200RMB(不服你也來(lái)投稿啊!)

    投稿方式:發(fā)送郵件至linwei#360.cn,或登陸網(wǎng)頁(yè)版在線投稿

    概述


    本周二,微軟推送了一個(gè)重大補(bǔ)丁,修復(fù)了許多個(gè)重大安全漏洞,極大地提高了Edge瀏覽器開(kāi)發(fā)者及其安全性的聲譽(yù)。但我希望微軟能夠說(shuō)服那些依然遵循荒唐的IE政策的守舊派,或者至少能夠公開(kāi)的解釋一下他們?yōu)槭裁春敛魂P(guān)心IE——要么廢除它,要么保護(hù)它。

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

    超快速回顧


    微軟Edge允許我們加載它的一些包含.html頁(yè)面的內(nèi)部資源,比如像acr_error.htm就可以,但是像BlockSite.htm這樣的卻不行。這是為什么呢?因?yàn)楹笳呖梢暂p松地欺騙內(nèi)部惡意軟件警告消息和地址欄。幾個(gè)月前,我們?cè)ㄟ^(guò)改變URL中的一個(gè)句點(diǎn)使其變成轉(zhuǎn)義副本的方法繞過(guò)了這一限制。不過(guò)現(xiàn)在這個(gè)漏洞已經(jīng)被修復(fù)了,Edge開(kāi)發(fā)者做了更改使得在進(jìn)行檢查/字符串比較操作之前事先解碼了我們的欺騙URL。所以,我們現(xiàn)在需要找到一種新的方法。來(lái)吧!現(xiàn)在關(guān)掉手頭讓你分心的事物,投入時(shí)間并沉浸在這趣味無(wú)窮的比特世界中。

    目前沒(méi)有符號(hào)名文件


    微軟的很多公開(kāi)符號(hào)都沒(méi)有上傳,所以我們就無(wú)法在極短的時(shí)間內(nèi)出色地完成分析。但也不用太過(guò)擔(dān)心,不管怎樣我們都會(huì)盡力并成功繞過(guò)它。只需要以攻擊者的方式時(shí)刻在心中記住這一點(diǎn):我們的目標(biāo)是繞過(guò)這個(gè)補(bǔ)丁,就是這樣。而不是一直糾結(jié)于:“唉,我需要休息一周的時(shí)間直到微軟推送了符號(hào)名才行。”

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


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

    下面這行JavaScript代碼甚至都沒(méi)有打開(kāi)一個(gè)新的窗口就拋出了“ACCESS_DENIED”拒絕訪問(wèn)異常。

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

    Edge這種阻塞內(nèi)部URL的行為是合理的:這個(gè)特定的錯(cuò)誤頁(yè)面能夠接受來(lái)自hash/query-string中的參數(shù),這就給了攻擊者欺騙地址欄和頁(yè)面內(nèi)容的可乘之機(jī)。

    我們的目標(biāo)是再次愚弄Edge打開(kāi)該URL。然而,這次的任務(wù)中我們會(huì)使用下面的URL(經(jīng)過(guò)編碼的句點(diǎn)和尾部的facebook,這樣方便在內(nèi)存中找到字符串)

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

    接下來(lái)就讓我們附加Edge進(jìn)程然后查找BlockSite.htm字符串,并將搜尋范圍限制在EdgeHtml.dll模塊中,因?yàn)榻^大多數(shù)的Edge代碼都駐留在此。這只是個(gè)猜測(cè),如果我們沒(méi)有找到想要的結(jié)果可以嘗試搜尋其他模塊,甚至所有的Edge文件。

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

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

    開(kāi)頭兩個(gè)屬于內(nèi)核模塊,接下來(lái)的三個(gè)都來(lái)自于EdgeHtml。說(shuō)得更明白些,edgehtml中的一段代碼調(diào)用了內(nèi)核模塊/庫(kù)中的StrStrIW函數(shù),這看上去十分標(biāo)準(zhǔn)。快速地Google一下StrStrIW就能看到MSDN對(duì)其的說(shuō)明文檔。

    文檔相當(dāng)清楚,也多虧了棧軌跡我們得知edgehtml調(diào)用了該函數(shù)。讓我們?cè)贓dge返回地址下斷點(diǎn)來(lái)分析到達(dá)該點(diǎn)前的代碼。(另外,我們還可以使用兩次pt命令,即跳至下一返回命令。可以自己試一試!)

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

    我們需要記住的很重要的一點(diǎn)是,之所以要調(diào)查這里是因?yàn)樵谧址容^操作之后我們沒(méi)有看到別的檢查,而且比較操作就在我們面前,很快就將被執(zhí)行。不過(guò)我們不用考慮的太多,只要能夠用類似的技術(shù)繞過(guò)就行了。

    最主要的問(wèn)題在于,此處的比較操作是使用硬編碼的字符串來(lái)進(jìn)行的,但我們知道URL可以有很多種方式來(lái)寫(xiě)。之前我們的辦法就是編碼一個(gè)句點(diǎn),這次需要想出一種新的辦法,因?yàn)榇蜓a(bǔ)丁后會(huì)在作比較前解碼句點(diǎn)從而導(dǎo)致失敗。

    現(xiàn)在我的腦海中浮現(xiàn)出許多種方式,比如多重編碼,或者在URL中加入更多的斜杠。讓我們?cè)囈辉嚰尤胍粋€(gè)斜杠,可能能夠欺騙字符串檢查并被視為一個(gè)合法的URL。所以我們?cè)趀rrorPages后面加入一個(gè)斜杠,像這樣:

    哇!好像一個(gè)簡(jiǎn)單的雙斜杠就能繞過(guò)補(bǔ)丁并讓Edge加載錯(cuò)誤頁(yè)面,讓我們構(gòu)造一個(gè)更完善的查詢字符串來(lái)完全騙過(guò)惡意軟件警告頁(yè)面:

    PoC驗(yàn)證及后話


    PoC鏈接:

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

    打開(kāi)后界面如圖所示:

    使用方式很簡(jiǎn)單,比如想要執(zhí)行一個(gè)如下的JavaScript命令:

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

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

    其實(shí)最后會(huì)發(fā)現(xiàn)繞過(guò)的方式十分簡(jiǎn)單,并且十分有效,但發(fā)現(xiàn)并找到這一思路的過(guò)程值得學(xué)習(xí)。

    一、什么是MODBUS?

    1.基本概念:

    MODBUS 是MODICON公司(現(xiàn)為施耐德電氣公司的一個(gè)品牌)最先倡導(dǎo)的一種軟的通訊規(guī)約,經(jīng)過(guò)大多數(shù)公司 的實(shí)際應(yīng)用,逐漸被認(rèn)可,成為一種標(biāo)準(zhǔn)的通訊規(guī)約,只要按照這種規(guī)約進(jìn)行 數(shù)據(jù)通訊或傳輸,不同的系統(tǒng)就可以通訊。目前,在RS232/RS485通訊過(guò)程中, 更是廣泛采用這種規(guī)約。

    常用的MODBUS 通訊規(guī)約有兩種,一種是MODBUS ASCII,一種是MODBUS RTU。 一般來(lái)說(shuō),通訊數(shù)據(jù)量少而且主要是文本的通訊則采用MODBUS ASCII規(guī)約,通訊數(shù)據(jù)數(shù)據(jù)量大而且是二進(jìn)制數(shù)值時(shí),多采用MODBUS RTU規(guī)約。

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

    2.MODBUS協(xié)議簡(jiǎn)述:

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

    MODBUS協(xié)議只允許在主機(jī)(PC,PLC等)和終端設(shè)備之間通訊,而不允許獨(dú)立的終端設(shè)備之間的數(shù)據(jù)交換,這樣各終端設(shè)備不會(huì)在它們初始化時(shí)占據(jù)通訊線路,而僅限于響應(yīng)到達(dá)本機(jī)的查詢信號(hào)。

    3.查詢—回應(yīng)周期:

    查詢

    查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能。數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的任何附加信息。例如功能代碼03是要求從設(shè)備讀保持寄存器并返回它 們的內(nèi)容。數(shù)據(jù)段必須包含要告之從設(shè)備的信息:從何寄存器開(kāi)始讀及要讀的寄存器數(shù)量。錯(cuò)誤檢測(cè)域?yàn)閺脑O(shè)備提供了一種驗(yàn)證消息內(nèi)容是否正確的方法。

    回應(yīng)

    如果從設(shè)備產(chǎn)生一正常的回應(yīng),在回應(yīng)消息中的功能代碼是在查詢消息中的功能代碼的回應(yīng)。數(shù)據(jù)段包括了從設(shè)備收集的數(shù)據(jù):如寄存器值或狀態(tài)。如果有錯(cuò)誤發(fā)生, 功能代碼將被修改以用于指出回應(yīng)消息是錯(cuò)誤的,同時(shí)數(shù)據(jù)段包含了描述此錯(cuò)誤信息的代碼。錯(cuò)誤檢測(cè)域允許主設(shè)備確認(rèn)消息內(nèi)容是否可用。

    4.傳輸方式:

    傳輸方式是指一個(gè)數(shù)據(jù)幀內(nèi)一系列獨(dú)立的數(shù)據(jù)結(jié)構(gòu)以及用于傳輸數(shù)據(jù)的有限規(guī)則,下面定義了與MODBUS 協(xié)議– RTU方式相兼容的傳輸方式。

    每個(gè)字節(jié)的位:

    · 1個(gè)起始位

    · 8個(gè)數(shù)據(jù)位,最小的有效位先發(fā)送

    · 無(wú)奇偶校驗(yàn)位

    · 1個(gè)停止位

    錯(cuò)誤檢測(cè)(Error checking):CRC(循環(huán)冗余校驗(yàn))

    5.協(xié)議

    當(dāng)數(shù)據(jù)幀到達(dá)終端設(shè)備時(shí), 它通過(guò)一個(gè)簡(jiǎn)單的“端口”進(jìn)入被尋址到的設(shè)備,該設(shè)備去掉數(shù)據(jù)幀的“信封”(數(shù)據(jù)頭),讀取數(shù)據(jù),如果沒(méi)有錯(cuò)誤,就執(zhí)行數(shù)據(jù)所請(qǐng)求的任務(wù),然后,它將自己 生成的數(shù)據(jù)加入到取得的“信封”中,把數(shù)據(jù)幀返回給發(fā)送者。返回的響應(yīng)數(shù)據(jù)中包含了以下內(nèi)容:終端從機(jī)地址(Address)、被執(zhí)行了的命令(Function)、執(zhí)行命令生成的被請(qǐng)求數(shù)據(jù)(Data)和一個(gè)校驗(yàn)碼(Check)。發(fā)生任何錯(cuò)誤都不會(huì)有成功的響應(yīng),或者返回一個(gè)錯(cuò)誤指示幀。

    6.地址(Address)域



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

    7 功能(Function)域

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

    8.數(shù)據(jù)(Data)域

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

    9.錯(cuò)誤校驗(yàn)(Check)域

    該域允許主機(jī)和終端檢查傳 輸過(guò)程中的錯(cuò)誤。有時(shí),由于電噪聲和其它干擾,一組數(shù)據(jù)在從一個(gè)設(shè)備傳輸?shù)搅硪粋€(gè)設(shè)備時(shí)在線路上可能會(huì)發(fā)生一些改變,出錯(cuò)校驗(yàn)?zāi)軌虮WC主機(jī)或者終端不去響 應(yīng)那些傳輸過(guò)程中發(fā)生了改變的數(shù)據(jù),這就提高了系統(tǒng)的安全性和效率,錯(cuò)誤校驗(yàn)使用了16位循環(huán)冗余的方法(CRC16)。

    10.錯(cuò)誤檢測(cè)的方法

    錯(cuò)誤校驗(yàn)(CRC)域占用兩個(gè)字節(jié),包含了一個(gè)16位的二進(jìn)制值。CRC值由傳輸設(shè)備計(jì)算出來(lái),然后附加到數(shù)據(jù)幀上,接收設(shè)備在接收數(shù)據(jù)時(shí)重新計(jì)算CRC值,然后與接收到的CRC域中的值進(jìn)行比較,如果這兩個(gè)值不相等,就發(fā)生了錯(cuò)誤。

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

    上述處理重復(fù)進(jìn)行,直到執(zhí)行完了8次移位操作,當(dāng)最后一位(第8位)移完以后,下一個(gè)8位字節(jié)與寄存器的當(dāng)前值進(jìn)行異或運(yùn)算,同樣進(jìn)行上述的另一個(gè)8次移位異或操作,當(dāng)數(shù)據(jù)幀中的所有字節(jié)都作了處理,生成的最終值就是CRC值。

    11.生成一個(gè)CRC的流程為:

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

    2 、把數(shù)據(jù)幀中的第一個(gè)字節(jié)的8位與CRC寄存器中的低字節(jié)進(jìn)行異或運(yùn)算,結(jié)果存回CRC寄存器。

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

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

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

    6 、重復(fù)第2步到第5步來(lái)處理下一個(gè)八位,直到所有的字節(jié)處理結(jié)束。

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

    此外還有一種利用預(yù)設(shè)的表格計(jì)算CRC的方法,它的主要特點(diǎn)是計(jì)算速度快,但是表格需要較大的存儲(chǔ)空間,該方法此處不再贅述,請(qǐng)參閱相關(guān)資料。

    二、特點(diǎn)

    Modbus具有以下幾個(gè)特點(diǎn):

    1、標(biāo)準(zhǔn)、開(kāi)放,用戶可以免費(fèi)、放心地使用Modbus協(xié)議,不需要交納許可證費(fèi),也不會(huì)侵犯知識(shí)產(chǎn)權(quán)。目前,支持Modbus的廠家超過(guò)400家,支持Modbus的產(chǎn)品超過(guò)600種。

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

    3、Modbus的幀格式簡(jiǎn)單、緊湊,通俗易懂。用戶使用容易,廠商開(kāi)發(fā)簡(jiǎn)單。

    三、功能碼定義

    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系統(tǒng)中有2種傳輸模式可選擇。這2種傳輸模式與從機(jī)PC通信的能力是同等的。選擇時(shí)應(yīng)視所用ModBus主機(jī)而定,每個(gè)ModBus系統(tǒng)只能使用一種模式,不允許2種模式混用。一種模式是ASCII(美國(guó)信息 交換碼),另一種模式是RTU(遠(yuǎn)程 終端設(shè)備)。

    用戶選擇想要的模式,包括 串口通信參數(shù)( 波特率、校驗(yàn)方式等),在配置每個(gè)控制器的時(shí)候,在一個(gè)Modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù)。所選的ASCII或RTU方式僅適用于標(biāo)準(zhǔn)的Modbus網(wǎng)絡(luò),它定義了在這些網(wǎng)絡(luò)上連續(xù)傳輸?shù)南⒍蔚拿恳晃唬约皼Q定怎樣將信息打包成消息域和如何解碼。在其它網(wǎng)絡(luò)上(像MAP和Modbus Plus)Modbus消息被轉(zhuǎn)成與串行傳輸無(wú)關(guān)的幀。

    1.傳輸模式特性:

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

    用RTU模式傳輸?shù)臄?shù)據(jù)是8位二進(jìn)制字符。如欲轉(zhuǎn)換為ASCII模式,則每個(gè)RTU字符首先應(yīng)分為高位和低位兩部分,這兩部分各含4位,然后轉(zhuǎn)換成十六進(jìn)制等量值。用以構(gòu)成 報(bào)文的ASCII字符都是十六進(jìn)制字符。ASCII模式使用的 字符雖是RTU模式的兩倍,但ASCII數(shù)據(jù)的譯碼和處理更為容易一些,此外,用RTU模式時(shí)報(bào)文字符必須以連續(xù)數(shù)據(jù)流的形式傳送,用ASCII模式,字符之間可產(chǎn)生長(zhǎng)達(dá)1s的間隔,以適應(yīng)速度較慢的機(jī)器。

    控制器能設(shè)置為兩種傳輸模式(ASCII或RTU)中的任何一種在標(biāo)準(zhǔn)的Modbus網(wǎng)絡(luò)通信。

    2.ASCII模式:

    當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以ASCII(美國(guó)標(biāo)準(zhǔn)信息交換代碼)模式通信,一個(gè)信息中的每8位字節(jié)作為2個(gè)ASCII字符傳輸,如數(shù)值63H用ASCII方式時(shí),需發(fā)送兩個(gè)字節(jié),即ASCII“6"(0110110)和ASCII”3“(0110011),ASCII字符占用的位數(shù)有7位和8位,國(guó)際通用7位為多。這種方式的主要優(yōu)點(diǎn)是字符發(fā)送的時(shí)間間隔可達(dá)到1秒而不產(chǎn)生錯(cuò)誤。

    代碼系統(tǒng)

    • 十六進(jìn)制,ASCII 字符0...9,A...F
    • 消息中的每個(gè)ASCII字符都是一個(gè)十六進(jìn)制字符組成 每個(gè)字節(jié)的位
    • 1個(gè)起始位
    • 7個(gè) 數(shù)據(jù)位,最小的有效位先發(fā)送
    • 1個(gè) 奇偶校驗(yàn)位,無(wú)校驗(yàn)則無(wú) 1個(gè)停止位(有校驗(yàn)時(shí)),2個(gè)Bit(無(wú)校驗(yàn)時(shí)) 錯(cuò)誤檢測(cè)域
    • LRC(縱向冗長(zhǎng)檢測(cè))

    3.RTU模式:

    當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以RTU模式通信,在消息中的每個(gè)8Bit字節(jié)按照原值傳送,不做處理,如63H,RTU將直接發(fā)送01100011。這種方式的主要優(yōu)點(diǎn)是:數(shù)據(jù)幀傳送之間沒(méi)有間隔,相同波特率下傳輸數(shù)據(jù)的密度要比ASCII高,傳輸速度更快。

    代碼系統(tǒng)

    • 8位二進(jìn)制, 十六進(jìn)制數(shù)0...9,A...F
    • 消息中的每個(gè)8 位域都是一或兩個(gè)十六進(jìn)制字符組成
    • 每個(gè)字節(jié)的位 1個(gè)起始位 8個(gè) 數(shù)據(jù)位,最小的有效位先發(fā)送
    • 1個(gè) 奇偶校驗(yàn)位,無(wú)校驗(yàn)則無(wú)
    • 1個(gè)停止位(有校驗(yàn)時(shí)),2個(gè)Bit(無(wú)校驗(yàn)時(shí))

    五、數(shù)據(jù)校驗(yàn)方式

    1.CRC:

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

    CRC是先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用一過(guò)程將消息中連續(xù)的8位字節(jié)和當(dāng)前寄存器中的值進(jìn)行處理。僅每個(gè)字符中的8Bit數(shù)據(jù)對(duì)CRC有效,起始位和停止位以及 奇偶校驗(yàn)位均無(wú)效。

    CRC產(chǎn)生過(guò)程中,每個(gè)8位字符都單獨(dú)和寄存器內(nèi)容相異或(XOR),結(jié)果向最低有效位方向移動(dòng),最高有效位以0填充。LSB被提取出來(lái)檢測(cè),如果LSB為1,寄存器單獨(dú)和預(yù)置的值或一下,如果LSB為0,則不進(jìn)行。整個(gè)過(guò)程要重復(fù)8次。在最后一位(第8位)完成后,下一個(gè)8位字節(jié)又單獨(dú)和寄存器的當(dāng)前值相異或(XOR)。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的CRC值。

    CRC添加到消息中時(shí),低字節(jié)先加入,然后高字節(jié)。

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

    習(xí)慣于成串發(fā)送數(shù)據(jù)的設(shè)備會(huì)首選送出字符的最右位(LSB-最低有效位)。而在生成CRC情況下,發(fā)送首位應(yīng)是被除數(shù)的最高有效位MSB。由于在運(yùn)算中不用進(jìn)位,為便于操作起見(jiàn),計(jì)算CRC時(shí)設(shè)MSB在最右位。生成多項(xiàng)式的位序也必須反過(guò)來(lái),以保持一致。多項(xiàng)式的MSB略去不記,因其只對(duì)商有影響而不影響余數(shù)。

    生成CRC-16校驗(yàn)字節(jié)的步驟如下:

    ①裝如一個(gè)16位 寄存器,所有數(shù)位均為1。

    ②該16位寄存器的高位 字節(jié)與開(kāi)始8位字節(jié)進(jìn)行“異或”運(yùn)算。運(yùn)算結(jié)果放入這個(gè)16位寄存器。

    ③把這個(gè)16寄存器向右移一位。

    ④若向右(標(biāo)記位)移出的數(shù)位是1,則生成多項(xiàng)式10,1000,000,0000,001和這個(gè)寄存器進(jìn)行“異或”運(yùn)算;若向右移出的數(shù)位是0,則返回③。

    ⑤重復(fù)③和④,直至移出8位。

    ⑥另外8位與該十六位寄存器進(jìn)行“異或”運(yùn)算。

    ⑦重復(fù)③~⑥,直至該 報(bào)文所有字節(jié)均與16位 寄存器進(jìn)行“異或”運(yùn)算,并移位8次。

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

    2.LRC:

    LRC錯(cuò)誤校驗(yàn)用于ASCII模式。這個(gè)錯(cuò)誤校驗(yàn)是一個(gè)8位二進(jìn)制數(shù),可作為2個(gè)ASCII十六進(jìn)制字節(jié)傳送。把十六進(jìn)制字符轉(zhuǎn)換成二進(jìn)制,加上無(wú)循環(huán)進(jìn)位的二進(jìn)制字符和二進(jìn)制補(bǔ)碼結(jié)果生成LRC錯(cuò)誤校驗(yàn)(參見(jiàn)圖)。這個(gè)LRC在接收設(shè)備進(jìn)行核驗(yàn),并與被傳送的LRC進(jìn)行比較,冒號(hào)(:)、回車符號(hào)(CR)、換行字符(LF)和置入的其他任何非ASCII十六進(jìn)制字符在運(yùn)算時(shí)忽略不計(jì)。

    Modbus與PROFIBUS-DP協(xié)議比較

    Modbus的協(xié)議內(nèi)容是完全公開(kāi)的,內(nèi)容是簡(jiǎn)單滴,實(shí)現(xiàn)起來(lái)是非常容易滴,單片機(jī)、PLC、DCS統(tǒng)統(tǒng)都能輕易實(shí)現(xiàn)。

    Profibus則要復(fù)雜一些,關(guān)鍵是需要專用芯片進(jìn)行二次開(kāi)發(fā),并且需要得到上級(jí)組織的認(rèn)證,開(kāi)發(fā)成本肯定高不少 。

    當(dāng)然從性能上講,基于串口的modbus rtu/ASCII通訊性能肯定比不過(guò)profibus dp,但是就一些儀表級(jí)的簡(jiǎn)單通訊或者控制器級(jí)別的小數(shù)據(jù)量通訊,modbus是足以勝任的。說(shuō)白了,就是modbus是*絲,profibus是高富帥!

    1、01號(hào)命令,讀可讀寫(xiě)數(shù)字量寄存器(線圈狀態(tài)):

    計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)01] [起始寄存器地址高8位] [低8位] [讀取的寄存器數(shù)高8位] [低8位] [CRC校驗(yàn)的低8位] [CRC校驗(yàn)的高8位]

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

    意義如下:

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

    <2>命令號(hào)01:讀取數(shù)字量的命令號(hào)固定為01。

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

    <4>寄存器數(shù)高8位、低8位:表示從起始地址開(kāi)始讀多少個(gè)開(kāi)關(guān)量。例子中為37個(gè)開(kāi)關(guān)量。

    <5>CRC校驗(yàn):是從開(kāi)頭一直校驗(yàn)到此之前。設(shè)備響應(yīng):[設(shè)備地址] [命令號(hào)01] [返回的字節(jié)個(gè)數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]

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

    意義如下:

    <1>設(shè)備地址和命令號(hào)和上面的相同。

    <2>返回的字節(jié)個(gè)數(shù):表示數(shù)據(jù)的字節(jié)個(gè)數(shù),也就是數(shù)據(jù)1,2...n中的n的值。

    <3>數(shù)據(jù)1...n:由于每一個(gè)數(shù)據(jù)是一個(gè)8位的數(shù),所以每一個(gè)數(shù)據(jù)表示8個(gè)開(kāi)關(guān)量的值,每一位為0表示對(duì)應(yīng)的開(kāi)關(guān)斷開(kāi),為1表示閉合。比如例子中,表示20號(hào)(索引號(hào)為19)開(kāi)關(guān)閉合,21號(hào)斷開(kāi),22閉合,23閉合,24斷開(kāi),25斷開(kāi),26閉合,27閉合...如果詢問(wèn)的開(kāi)關(guān)量不是8的整倍數(shù),那么最后一個(gè)字節(jié)的高位部分無(wú)意義,置為0。

    <4>CRC校驗(yàn)同上。

    2、05號(hào)命令,寫(xiě)數(shù)字量(線圈狀態(tài)):

    計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)05] [需下置的寄存器地址高8位] [低8位] [下置的數(shù)據(jù)高8位] [低8位] [CRC校驗(yàn)的低8位] [CRC校驗(yàn)的高8位]

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

    意義如下:

    <1>設(shè)備地址和上面的相同。

    <2>命令號(hào):寫(xiě)數(shù)字量的命令號(hào)固定為05。

    <3>需下置的寄存器地址高8位,低8位:表明了需要下置的開(kāi)關(guān)的地址。

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

    <5>注意此命令一條只能下置一個(gè)開(kāi)關(guān)量的狀態(tài)。

    設(shè)備響應(yīng):如果成功把計(jì)算機(jī)發(fā)送的命令原樣返回,否則不響應(yīng)。

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

    計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數(shù)高8位] [低8位] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]

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

    意義如下:

    <1>設(shè)備地址和上面的相同。

    <2>命令號(hào):讀模擬量的命令號(hào)固定為03。

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

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

    設(shè)備響應(yīng):[設(shè)備地址] [命令號(hào)03] [返回的字節(jié)個(gè)數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]

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

    意義如下:

    <1>設(shè)備地址和命令號(hào)和上面的相同。

    <2>返回的字節(jié)個(gè)數(shù):表示數(shù)據(jù)的字節(jié)個(gè)數(shù),也就是數(shù)據(jù)1,2...n中的n的值。例子中返回了3個(gè)模擬量的數(shù)據(jù),因?yàn)橐粋€(gè)模擬量需要2個(gè)字節(jié)所以共6個(gè)字節(jié)。

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

    <4>CRC校驗(yàn)同上。

    4、06號(hào)命令,寫(xiě)單個(gè)模擬量寄存器(保持寄存器):

    計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)06] [需下置的寄存器地址高8位] [低8位] [下置的數(shù)據(jù)高8位] [低8位] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]

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

    意義如下:

    <1>設(shè)備地址和上面的相同。

    <2>命令號(hào):寫(xiě)模擬量的命令號(hào)固定為06。

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

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

    <5>注意此命令一條只能下置一個(gè)模擬量的狀態(tài)。

    設(shè)備響應(yīng):如果成功把計(jì)算機(jī)發(fā)送的命令原樣返回,否則不響應(yīng)。

    5、16號(hào)命令,寫(xiě)多個(gè)模擬量寄存器(保持寄存器):

    計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)16] [需下置的寄存器地址高8位] [低8位] [數(shù)據(jù)數(shù)量高8位] [數(shù)據(jù)數(shù)量低8位] [下置的數(shù)據(jù)高8位] [低8位][……][……] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]



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

    意義如下:

    <1>設(shè)備地址和上面的相同。

    <2>命令號(hào):寫(xiě)模擬量的命令號(hào)固定為16。

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

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

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

    設(shè)備響應(yīng):如果成功把計(jì)算機(jī)返回的如下命令,否則不響應(yīng)。設(shè)備響應(yīng):[設(shè)備地址] [命令號(hào)16] [需下置的寄存器地址高8位] [低8位] [數(shù)據(jù)數(shù)量高8位] [數(shù)據(jù)數(shù)量低8位] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位],如上例返回:[11][16][00][01][00][01] [CRC高] [CRC低]

網(wǎng)站首頁(yè)   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

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

備案號(hào):冀ICP備2024067069號(hào)-3 北京科技有限公司版權(quán)所有