成人精品一区二区久久久 I 国产美女永久无遮挡 I 中文字幕+乱码+中文字幕明步 I 国产在视频一区二区三区吞精 I 日韩精品小视频 I 成人性生交大片免费4 I 免费aaa级毛片在线视频 I 一级片毛片 I 大型成人社区 I 国模在线播放 I 欧美大荫蒂毛茸茸视频 I 偷偷色噜狠狠狠狠的777米奇 I www.久久亚洲 I 日日搞夜夜操 I 亚洲成色777777女色窝 I 毛片黄色毛片 I 午夜片在线观看 I 国产一区二区三区中文字幕 I 天天干夜夜骑 I 日韩在线视频一区二区三区 I 久久久无码精品亚洲a片0000 I 写真福利片hd在线播放 I 欧美成人一区二免费视频 I 色噜噜狠狠爱综合视频 I 中文字幕无线码免费人妻 I 国产精品久久久久久久久久不蜜臀 I 欧美综合人人做人人爱 I 1024成人网色www I 国产精品视频一二三区 I 亚洲免费美女视频

peteryi
級別: 正式會員
精華主題: 0
發帖數量: 6 個
工控威望: 97 點
下載積分: 583 分
在線時間: 2(小時)
注冊時間: 2014-10-28
最后登錄: 2019-07-31
查看peteryi的 主題 / 回貼
樓主  發表于: 2014-10-28 19:56
最近手上有個威綸通MT6056I的HMI,需要與公司的一款板卡通訊,板卡遵循的是自由協議,但是采用的校驗方式CRC-16/XMODEM.
這種校驗方式是CRC16校驗方式的一種,但是與MODBUS協議的CRC16的生成方式不同。威綸通的腳本語言庫中有CRC校驗函數,但是這個校驗
函數是CRC-16/MODBUS版本的,不能為我所用,所以我計劃自己設計一個CRC16/XMODEM的函數,然后將這個函數保存到函數庫里,以備他用
。由于第一次使用這個屏幕,經驗不做,遇到一些困難,但也努力解決了。
        首先不得不吐槽下,威綸通的宏指令說明書寫的太簡單了,在遇到問題的時候,可能無法從指令的說明手冊上找到答案,更多的是自己摸索。比如
自己寫子函數時就遇到狗血的問題
       1:數組不能作為函數參數
            比如
                        sub short function(char dat[],char len)
            其中 char dat[] 參數將出錯。
            解決方法,后面有表述
       2: 在調用子函數的時候,在函數的參數中不能出現常量,只能是變量的方式
           例如我定義了子函數 function( short a,short b)
           調用方式  function( 1000,1000)  編譯器將會告訴你參數類型錯誤
           當我改成如下掉用方式就可以了
            short i=1000
            short j=1000
            function(i,j)
  
      好進入正題吧,如何寫個CRC校驗函數,其實根本問題,是如何將一串數據傳給子函數,子函數將傳過來的數據根據特定算法,運算出計算結果,關于CRC算法,本文不做論述,只提供代碼。
我首先想到的是這樣的思路:定義 這樣一個函數 short CRC16(short dat[],short len),用來計算CRC。
但是卻遇到了上面1中的問題,數組參數無法作為函數的形參,官方也找不到解決方法。
最后想到的解決方法是在LW存儲區開辟一塊暫存區域,將要進行CRC計算的數據搬運到這塊暫存區域上。再CRC校驗函數中根據LW的地址將數據取出,進行CRC計算。
如此可解決無法傳遞數組參數的問題。操作如下。
        定義  sub short CRC_16(short dataddr, short len)
       參數說明 short dataddr,dataddr是位于LW暫存區的起始地址,short len len 數據長度。
         下面紅色區域為重點區域,注意理解。

   sub short CRC_16(short dataddr, short len)
    short i, j
    unsigned short crc_reg = 0x0000
    unsigned short current
    unsigned char dattmp[128]    //申請一定長度的數組來保存要進行校驗的數據。
    GetData(dattmp[0], "Local HMI", LW, dataddr, len)//將暫存區的數據復制到dattmp中

    len=len-1
    for i = 0 to len
        current = dattmp
        current=current<<8
        crc_reg=crc_reg^current
      
        for j = 1 to 8
      
            if (crc_reg & 0x8000) <> 0 then
                crc_reg = (crc_reg << 1) ^ 0x1021
            else
                crc_reg=crc_reg << 1
            end if
        next
      

    next
    return crc_reg;
end sub

  上面綠色部分是進行CRC計算的,這里不做研究。下面來講講紅色部分。紅色部分就是申請數組空間,然后,將LW,暫存空間的數據,轉移到所申請的數組中,交給下面計算。
  這里的疑惑是為何要申請數組,然后在拷貝數據,這么麻煩,而不是用下面的方式進行,下面的算法是每次循環開始先讀取暫存空間數據,先不說犧牲時間什么的,最起碼這
中不用申請上面那128大的數組。理論可行,但是實際上確實錯誤的。其主要GetData和SetData 函數實現原理,以及數據在LW中存儲方式不清楚造成的。
sub short CRC_16_2(short dataddr, short len)
    short i, j
    unsigned short crc_reg = 0x0000
    unsigned short current
    unsigned char dattmp
    short addr
    addr=dataddr
    len=len-1
  
    for i = 0 to len

       GetData(dattmp, "Local HMI", LW, addr, 1)
        addr=addr+1
        current = dattmp

        current=current<<8
        crc_reg=crc_reg^current
      
        for j = 1 to 8
      
            if (crc_reg & 0x8000) <> 0 then
                crc_reg = (crc_reg << 1) ^ 0x1021
            else
                crc_reg=crc_reg << 1
            end if
        next
      
    next
    return crc_reg;
end sub



GetData和SetData 函數實現原理,以及數據在LW中存儲方式
先來說說LW中的數據存儲 (吐槽:為何網上關于這方面的資料很少,幾乎沒有LW存儲空間的詳細說明)
目前 筆者使用 軟件 EB8000 V4.65

LW 可理解為計算機的RAM ,掉電數據不保存,但是存取速度快。每個存儲單元是16bit。分為高字節 (bit15-bit8)和低字節(bit7 -bit 0)
bit15                                                            bit0


例如 0x1234 存儲方式為高字節 0x12 ,低字節0x34.

SetData 當用SetData 來寫LW中的數據的時候,會根據第一個參數的類型來指導操作

                    如下程序,這是正常的操作程序。a的類型是short
unsigned short a=0x1234
unsigned char b[2]
unsigned char c
SetData(a, "Local HMI", LW, 0, 1)
GetData(c, "Local HMI", LW, 0, 1)
GetData(b[0], "Local HMI", LW, 0, 2)
TRACE("C = %d", c)                    //c=0x34
TRACE("b[0] = %d", b[0])          //b[0]=0x34
TRACE("b[1] = %d", b[1])         //b[1]=0x12

但是SetData的第一個參數是第一個char類型的數組如下
unsigned short a
unsigned char b[2]
b[1]=0x12
b[0]=0x34
SetData(b[0], "Local HMI", LW, 0, 2)
GetData(a, "Local HMI", LW, 0, 1)
TRACE("a = %d", a) //a=0x1234

可以看出,在保存char 型數據的時候,為了節省空間進行了特別處理
理論上b[0]應該保存在LW0000,b[1]保存在LW0001.但是實際上確實b[0]保存在 LW0000的低字節,b[1]保存在LW0000的高字節。

同樣的道理GetData 也遵循相同的操作。

現在能回答為何不能采用第二種子函數寫法.主要原因是 每次循環都是讀取一個字的底字節。高字節數據被丟棄了。
假如寫入內存的是b[0]到b[10],則通過下面循環讀取的是b[0],b[2],b[4].....,請好好體會。
    for i = 0 to len

       GetData(dattmp, "Local HMI", LW, addr, 1)
        addr=addr+1
        current = dattmp
    next

再需要調用CRC函數的時候,可用如下的方法操作
        char sendbus[26]

        short lwadd=7000 //lw 暫存區開始地址
        short len=26        
        SetData(sendbuf[1], "Local HMI", LW, lwadd, len)   //將得計算的數阻搬到LW7000開始的空間,具體在什么地址,可自己安排,只要注意LW 范                                                                                        //0-9000
        tmp = CRC_16(lwadd, len)                                //CRC計算

版權申明:本文章由逸創論壇(www.yeecon.com)原創,轉載請標明出處:http://www.yeecon.com/forum.php?mod=viewthread&tid=74&fromuid=1
(出處: 逸控BBS)

由于本人知識有限,文中如有錯誤,請告知。
作者:semonpic    
E-Mail: semonping@163.com
企鵝號 442999791
[ 此帖被peteryi在2014-10-28 20:45重新編輯 ]

主站蜘蛛池模板: 欧美色图一区二区 | 国产精品毛片av在线看 | 中文字幕国产在线观看 | 熟女人妻aⅴ一区二区三区电影 | 亚洲日韩精品看片无码 | 色一情一交一乱一区二区 | 黑人大战亚洲人精品一区 | 亚洲国产日韩欧美综合另类bd | 另类综合在线 | 亚洲国产综合精品 在线 一区 | 日韩欧美视频一区二区 | 免费男人下部进女人下部视频 | 69亚洲乱人伦 | 久久www免费人成看片小草 | 丁香六月天婷婷 | 欧美日韩高清在线观看 | 欧美性色xxxx | 欧美另类69 | 日韩天堂在线 | 无码中文人妻在线一区 | 黄av在线 | 九九热欧美 | 国产精品视频超级碰 | 亚洲区综合 | 中文字幕精品视频在线观看 | 色喜国模李晴超大尺度 | 国内精品免费视频自在线拍 | 免费一区二区三区 | 国产青青| 曰批视频免费30分钟成人 | 亚洲一区久久久 | 一区二区三区四区欧美 | 欧美精品在线观看视频 | 中文字幕久久熟女蜜桃 | 国产麻豆亚洲精品一区二区 | 粉嫩粉嫩一区性色av片 | 无码人妻丰满熟妇啪啪 | 伊人久久中文 | 熟妇高潮一区二区三区 | 天堂资源 | 久久97久久97精品免视看秋霞 | 18禁床震无遮掩视频 | 国产区图片区小说区亚洲区 | 吸咬奶头狂揉60分钟视频 | av中文在线资源 | 粉嫩小泬无遮挡久久久久久 | 妓女妓女一区二区三区在线观看 | xvideos.蜜桃一区二区 | 日日摸天天摸97狠狠婷婷 | x88av 福利 | 青草国产 | 韩国av永久免费 | 日本丰满护士爆乳xxxx | 亚洲精品国产一区二区精华液 | 免费网站观看www在线观看 | 久久久国产精品消防器材 | 夜夜摸视频网 | 日韩av手机在线播放 | 欧美毛片无码又大又粗黑寡妇 | 主站蜘蛛池模板: 蛛词}| 性妲己一级淫片免费放 | 在线播放亚洲 | 成人91看片 | 日本免费黄色网址 | 天天做天天爱夜夜爽女人爽 | 黑人精品xxx一区一二区 | 亚洲19p| 男人让女人爽的免费视频 | 网站色| 亚洲天天做日日做天天欢毛片 | 麻豆精品人妻一区二区三区蜜桃 | 男人边吃奶边做好爽免费视频 | 狠狠色综合久久丁香婷婷 | 亚洲最大成人一区久久久 | 亚洲人成人77777网站 | 亚洲欧美日韩综合俺去了 | 45分钟免费真人视频 | 国产乱肉妇乱免费 | 狠狠干天天射 | 黄色一级国产 | 成人欧美一区二区三区色青冈 | 一区二区三区亚洲视频 | 国产精品亚洲а∨怡红院 | 很黄很黄的曰批视频 | 玖玖资源 av在线 亚洲 | 成人网址在线观看 | 五月婷婷激情 | 欧美成人生活片 | 日韩综合在线观看 | 五月婷婷网 | 九九在线观看高清免费 | 国产乡下妇女做爰视频 | 99这里有精品热视频 | 人妻丝袜中文无码av影音先锋专区 | 国产精品99久久免费观看 | 国产成人欧美综合在线影院 | 国产老妇伦国产熟女老妇高清 | 男人天堂2019| 午夜伦4480yy私人影院久久 | 国产jizz | 欧美熟妇性xxxx交潮喷 | 日韩新片王网 | 国产中文字幕在线免费观看 | 久久精品水蜜桃av综合天堂 | 无码国产精品一区二区免费式直播 | 色综合久久久久久久 | aⅴ免费视频在线观看 | 麻豆精品久久久久久中文字幕无码 | 香蕉久久国产av一区二区 | 国产精品视频一区二区亚瑟 | 成人性生交大片免费看小说 | 黑人强伦姧人妻日韩那庞大的 | 日韩高清免费观看 | 亚洲伊人中文字幕 | 第一宅男av导航入口 | av网站在线免费看 | 无码区国产区在线播放 | 久久精品第九区免费观看 | 亚洲欧美日韩中字视频三区 | 主站蜘蛛池模板: 蛛词}| 欧美在线小视频 | 日本视频免费播放 | 国外国内精品国产成人国产三级 | 天堂在线资源8 | 中文成人无码精品久久久动漫 | 国产精品福利在线播放 | 亚洲三级网站 | 91日韩视频 | 美女91网站 | 国内熟妇人妻色无码视频在线 | 一级持黄录像免费观看 | 无码毛片一区二区本码视频 | 亚洲一区精品二人人爽久久 | 国产av无码日韩av无码网站 | 国产无套露脸在线观看 | 麻豆疯狂做受xxxx高潮视频 | 粉嫩虎白女毛片人体 | 日本在线视频播放 | 高清不卡av | 国产精品18久久久久久vr | 亚洲色丰满少妇高潮18p | 中文字幕 欧美激情 | 亚洲熟妇久久国产精品 | 亚洲精品毛片av | 日本免费不卡一区在线电影 | 国产精品国产三级国产aⅴ入口 | 一区二区国产高清视频在线 | 精品国产亚洲第一区二区三区 | 国产探花在线精品一区二区 | 久久久久久夜精品精品免费啦 | 人妻在厨房被色诱 中文字幕 | 中文字幕无码日韩av | 免费人成视频x8x8入口 | 欧美大片免费观看在线观看网站推荐 | 国产激情久久久久影院小草 | 狠狠婷婷综合久久久久久 | 久久成人精品 | 992tv香蕉128tv在线观看 | 狠狠色噜噜狠狠狠狠av | 久久影院国产 | 亚洲韩国日本高清一区 | 日韩欧美在线一区二区 | 日韩亚洲国产欧美 | 毛片手机在线观看 | 久久亚洲精品成人av二次元 | 日韩在线免费视频观看 | 狠狠色噜噜狠狠狠狠97首创麻豆 | 伊人网站| 午夜视频免费在线 | 国产精品成人无码a片在线看 | 黄色网址在线播放 | 黄网站色成年片在线观看 | 视频一区在线播放 | 久久无码专区国产精品 | 伊人亚洲精品 | 北条麻妃99精品青青久久 | 男人天堂五月天 | 日本视频高清一区二区三区 | 色窝窝无码一区二区三区成人网站 | 主站蜘蛛池模板: 蛛词}| 日韩性网站 | 一卡二卡3卡4卡视频免费播放 | 亚洲人成在久久综合网站 | 亚洲国产成人精品无码区在线秒播 | 欧美综合色区 | 韩国的无码av看免费大片在线 | 日韩欧美视频二区 | 国产午夜激情视频 | 欧美日韩精品一区二区视频 | 亚洲 欧美 国产 动漫 综合 | 人人妻人人狠人人爽 | 欧美色偷偷 | 一级片aaaa| 国产成人无码一区二区在线播放 | 国产伦一区二区三区色一情 | 亚洲天堂在线观看完整版 | 亚洲欧美卡通动漫专区 | 秋霞午夜鲁丝一区二区老狼 | 国产v亚洲 | 新91在线| 亚欧综合在线 | 森泽佳奈av在线播放 | 国产婷婷 | 在线一二区 | 成人乱淫av日日摸夜夜爽 | 中文在线a∨在线 | 免费无遮挡禁18污污网站 | 精品少妇一区二区30p | 色中色综合网 | 插入综合网 | 国产色视频网站免费 | 东北毛片 | 亚洲精品性 | 日本亲近相奷中文字幕 | 国产精品久久久久久久久费观看 | 亚洲色图欧美色 | 2020精品国产福利在线观看香蕉 | 一本色道久久综合狠狠躁 | 色av色婷婷| 亚洲卡1卡2卡三卡4卡5卡6卡 | 久久久国产精品免费 | 国产性色av免费观看 | 沈阳45老熟女高潮喷水亮点 | 国产日韩欧美亚欧在线 | 免费看中国毛片 | 久久人妻内射无码一区三区 | 国产精品一卡二卡三卡 | 成人h视频在线观看 | 久草精品视频在线观看 | 美女无遮挡免费视频网站 | 国产熟妇另类久久久久久 | av不卡在线 | bdsm在线播放视频 | 中文字幕一区二区av | 成人免费毛片嘿嘿连载视频 | 亚洲婷婷网 | 少妇精品高潮欲妇又嫩中文字幕 | 夜夜天天拍拍 | 国产精品熟女高潮视频 | 主站蜘蛛池模板: 蛛词}| 国产午夜精品久久久久久久蜜臀 | 中国国产黄色片 | 久久性感美女视频 | 欧美大成色www永久网站婷 | 国产av永久无码天堂影院 | 欧美精品综合 | 极品国产主播粉嫩在线 | 欧美jizz40性欧美 | 久草福利在线观看 | 国产成人无码久久久精品一 | 欧美z0zo人禽交免费观看99 | 久久久噜噜噜久久久白丝袜 | 国产精品丝袜久久久久久高清 | 天天干天天操天天干 | 国产高清中文手机在线观看 | 亚洲最大无码中文字幕网站 | 亚洲操你 | 欧美三級片黃色三級片黃色 | 羞羞的铁拳 | 伊人精品久久 | a毛片成人| 国产女主播在线播放 | 日韩视频在线观看一区 | 又色又爽又黄18禁美女裸身无遮挡 | 91丨porny丨国产丝袜福利 | 永久免费无码日韩视频 | 欧美日韩色图 | 日本一区不卡在线观看 | 亚洲h色 | 97视频免费观看 | 日本三级不卡视频 | 欧美一区二区三区在线看 | 无码国产偷倩在线播放 | 少妇真实被内射视频三四区 | 欧美 日产 国产精选 | 亚洲乱码av中文一区二区软件 | 日本黄色免费在线观看 | 国产呻吟久久久久久久92 | 国产一区二区三区日韩 | 很色很爽很黄裸乳视频 | 又大又长又粗又爽又黄少妇视频 | 六月丁香激情 | 农民人伦一区二区三区剧情简介 | 天天爽天天射 | 18禁美女黄网站色大片免费看 | 美女视频国产 | 中国肥胖女人真人毛片 | 日日噜夜夜爽精品一区 | 伊人av在线免费观看 | 欧美黄色免费看 | 欧美一级性 | 亚洲一区二区三区无码久久 | 香蕉视频在线免费播放 | 日本中文不卡 | 亚洲午夜性猛春交xxxx | 国产免费91视频 | 巨乳美乳一区二区三区 | 国产亚洲无日韩乱码 | 性感美女的逼 |