在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MODBUS通訊協(xié)定及RS485介面通訊程式

            MODBUS通訊協(xié)定及RS485介面通訊程式

            作者: 時(shí)間:2016-12-16 來源:網(wǎng)絡(luò) 收藏
            MODBUS通訊協(xié)定RS485介面通訊程式
            一.檔案列表
            RS485.pdf電路圖
            RS485.CC的原始程式
            RS485.asm由C轉(zhuǎn)成的組合語言檔
            RS485.hex燒錄檔
            二.MODBUS介紹
            MODBUS通訊協(xié)定原本是MODICON公司為自己所生產(chǎn)的PLC(可程式邏輯控制器)所開發(fā)的通訊協(xié)定,後來廣泛為工業(yè)界所使用,它是一對(duì)多的方式來通訊,目前他是採(cǎi)開放的方式不需支付任何費(fèi)用,任何人皆可開發(fā),所以目前許多PLC、人機(jī)介面及圖控軟體都有支援。
            目前modbus通訊協(xié)定可分為ModbusASCII及ModbusRTU兩種傳送方式,ModbusASCII顧名思義就是以ASCII碼的方式來傳輸,而ModbusRTU是以Binary的方式來傳輸,二者以RTU的方式最快,所以我介紹RTU的方式,它傳送資料是從低位元開始傳送,下面的表格是Modbus通訊協(xié)定的功能表,其中384、484、584、884、M84及984為Modicon公司所生產(chǎn)的PLC型號(hào)。
            CodeName384484584884M84984
            01ReadCoilStatusYYYYYY
            02ReadInputStatusYYYYYY
            03ReadHoldingRegistersYYYYYY
            04ReadInputRegistersYYYYYY
            05ForceSingleCoilYYYYYY
            06PresetSingleRegisterYYYYYY
            07ReadExceptionStatusYYYYYY
            08Diagnostics(seeModiconModbusProtocolReferenceGuideChapter3)
            09Program484NYNNNN
            10Poll484NYNNNN
            11FetchComm.EventCtr.YNYNN
            12FetchComm.EventLogYNYNN
            13ProgramControllerYNYNNY
            14PollControllerYNYNNY
            15ForceMultipleCoilsYYYYYY
            16PresetMultipleRegistersYYYYYY
            17ReportSlaveIDYYYYY
            18Program884/M84NNNYYN
            19ResetComm.LinkNNNYYN
            20ReadGeneralReferenceNNYNNY
            21WriteGeneralReferenceNNYNNY
            22MaskWrite4XRegisterNNNNN(1)
            23Read/Write4XRegistersNNNNN(1)
            24ReadFIFOQueueNNNNN(1)
            Notes:
            (1)Functionissupportedin984–785only.
            此次的範(fàn)例我們只用了Function3(ReadHoldingRegisters)及Function6(PresetSingleRegister)的功能,所以以下針對(duì)這兩個(gè)Function做一說明
            Function03(ReadHoldingRegisters)
            讀取SlaveHoldingRegisters的內(nèi)容(二進(jìn)制碼)從PLC4X的參考位置,我以範(fàn)例來說明
            QUERYExample

            FieldName (Hex)
            --------------------------------
            SlaveAddress 11
            Function 03
            StartingAddressHi 00
            StartingAddressLo 6B
            No.ofPointsHi 00
            No.ofPointsLo 03
            ErrorCheck(LRCorCRC) ––

            SlaveAddress從0-7E(Hex),F(xiàn)unctioncode為03,讀取暫存器的起始位置從40108-40110,其中108為6C,但因通訊的暫存器位置從0開始,所以108需減一,也就是6B,108-110總共三個(gè)暫存器(No.ofPoints),ErrorCheck有分LRC及CRC,LRC為ModbusASCIIMode的錯(cuò)誤檢查碼,RTUMode使用的是CRC的檢查方式,CRC的檢查方式在程式說明的章節(jié)再說明。織夢(mèng)內(nèi)容管理系統(tǒng)

            RESPONSEExample

            FieldName (Hex)
            --------------------------------
            SlaveAddress 11
            Function 03
            ByteCount 06
            DataHi(Register40108) 02
            DataLo(Register40108) 2B
            DataHi(Register40109) 00
            DataLo(Register40109) 00
            DataHi(Register40110) 00
            DataLo(Register40110) 64
            ErrorCheck(LRCorCRC) ––

            此回應(yīng)是從Slave傳至Master,前頭的Address及Function都與Master傳過來的一樣,ByteCount為要回傳至Master的byte數(shù),因?yàn)镸aster要求讀取3個(gè)暫存器的資料,一個(gè)暫存器有兩個(gè)bytes,所以總共6個(gè)bytes,再來就是依次傳回40108-10110的內(nèi)容,最後再CRC檢查碼。
            Function06(PresetSingleRegister)
            將資料寫入HoldingRegister,且一次只寫入一個(gè)暫存器
            QUERYExample

            FieldName (Hex)
            --------------------------------
            SlaveAddress 11
            Function 06
            RegisterAddressHi 00
            RegisterAddressLo 01
            PresetDataHi 00
            PresetDataLo 03
            ErrorCheck(LRCorCRC) ––

            將資料03寫入SlaveAddress11暫存器40002的位置。
            RESPONSEExample

            FieldName (Hex)
            --------------------------------
            SlaveAddress 11
            Function 06
            RegisterAddressHi 00
            RegisterAddressLo 01
            PresetDataHi 00
            PresetDataLo 03
            ErrorCheck(LRCorCRC) ––

            Slave的回應(yīng)很簡(jiǎn)單,只要從Master傳來的資料無誤,也通過CRC的檢查,將原本收到的資料傳回給Master即可。
            三.程式說明
            程式裡頭最主要的是CRCcheck,在這裡針對(duì)CRCcheck做一說明,程式裡有一個(gè)副程式uns16crc16(uns8*puchMsg,uns8crc_count),我針對(duì)其參數(shù)做一說明:
            uns16à傳回16bits的無號(hào)數(shù)資料
            uns8*puchMsgà傳入字串位址,其字串的資料型態(tài)為無號(hào)數(shù)的八位元
            uns8crc_countà無號(hào)數(shù)的八位元,其代表傳入字串的長(zhǎng)度
            針對(duì)crc16副程式做一說明:
            先宣告三個(gè)暫存器uindex,uchCRCHi及uchCRCLo,且將ff(Hex)的值丟入uchCRCHi及uchCRCLo。
            1.檢查crc_count是否為零,若為零則到步驟5,否則繼續(xù)。
            2.將uchCRCHi與字串的第一個(gè)byte做ExclusiveOR(互斥或),將結(jié)果送到uindex暫存器,將指標(biāo)移到字串的下一個(gè)字元。織夢(mèng)內(nèi)容管理系統(tǒng)
            3.使用uindex當(dāng)索引去查auchCRCHi的表格相對(duì)應(yīng)的值,再將它與uchCRCLo做ExclusiveOR(互斥或),將結(jié)果送入uchCRCLo中。
            4.將crc_count減一,跳至步驟一。
            5.將uchCRCHi往左移8bit再與uchCRCLo做OR,然後將此16bits的資料傳回。
            這套C語言是由BKnudsenData所開發(fā),其網(wǎng)站為http://www.bknd.com/cc5x/index.shtml,相對(duì)其他公司,這套CCompiler較為便宜,所以較符合經(jīng)濟(jì)效益,以下針對(duì)主程式做一說明:
            此程式是當(dāng)Modbus的Slave,其位址為11(Hex),它只有設(shè)定頻率(set_hz)及設(shè)定啟動(dòng)(set_run)這兩組暫存器需要設(shè)定而已,而需讀取的資料有設(shè)定頻率(40001)、設(shè)定啟動(dòng)(40086)、目前運(yùn)轉(zhuǎn)的頻率(40079)、目前運(yùn)轉(zhuǎn)的電流(40080)、目前運(yùn)轉(zhuǎn)的狀態(tài)(40085)及目前的錯(cuò)誤訊息(40087)。
            從第205-266列為Slave從Master接收到資料之後所做的相關(guān)處理及回應(yīng),第207列是做從Master接收的資料再一次做CRC的檢查,看計(jì)算的CRC檢查碼與Master傳過來的檢查碼有無一樣,若一樣則傳回該回應(yīng)的值。dedecms.com
            從第267-282列為將要傳送到Master的值,透過串列埠傳出去,且將LTC485的IC設(shè)為傳送模式;第283-284列為若TRMT(TransmitShiftRegisterStatusbit)為空的話,這表示所有資料已傳送完畢,則將LTC485設(shè)為接收模式。
            第112-113列為若接收資料間隔超過8ms,則需從新開始接收字串。


            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉