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

   sub short CRC_16(short dataddr, short len)
    short i, j
    unsigned short crc_reg = 0x0000
    unsigned short current
    unsigned char dattmp[128]    //申請(qǐng)一定長度的數(shù)組來保存要進(jìn)行校驗(yàn)的數(shù)據(jù)。
    GetData(dattmp[0], "Local HMI", LW, dataddr, len)//將暫存區(qū)的數(shù)據(jù)復(fù)制到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

  上面綠色部分是進(jìn)行CRC計(jì)算的,這里不做研究。下面來講講紅色部分。紅色部分就是申請(qǐng)數(shù)組空間,然后,將LW,暫存空間的數(shù)據(jù),轉(zhuǎn)移到所申請(qǐng)的數(shù)組中,交給下面計(jì)算。
  這里的疑惑是為何要申請(qǐng)數(shù)組,然后在拷貝數(shù)據(jù),這么麻煩,而不是用下面的方式進(jìn)行,下面的算法是每次循環(huán)開始先讀取暫存空間數(shù)據(jù),先不說犧牲時(shí)間什么的,最起碼這
中不用申請(qǐng)上面那128大的數(shù)組。理論可行,但是實(shí)際上確實(shí)錯(cuò)誤的。其主要GetData和SetData 函數(shù)實(shí)現(xiàn)原理,以及數(shù)據(jù)在LW中存儲(chǔ)方式不清楚造成的。
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 函數(shù)實(shí)現(xiàn)原理,以及數(shù)據(jù)在LW中存儲(chǔ)方式
先來說說LW中的數(shù)據(jù)存儲(chǔ) (吐槽:為何網(wǎng)上關(guān)于這方面的資料很少,幾乎沒有LW存儲(chǔ)空間的詳細(xì)說明)
目前 筆者使用 軟件 EB8000 V4.65

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


例如 0x1234 存儲(chǔ)方式為高字節(jié) 0x12 ,低字節(jié)0x34.

SetData 當(dāng)用SetData 來寫LW中的數(shù)據(jù)的時(shí)候,會(huì)根據(jù)第一個(gè)參數(shù)的類型來指導(dǎo)操作

                    如下程序,這是正常的操作程序。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的第一個(gè)參數(shù)是第一個(gè)char類型的數(shù)組如下
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 型數(shù)據(jù)的時(shí)候,為了節(jié)省空間進(jìn)行了特別處理
理論上b[0]應(yīng)該保存在LW0000,b[1]保存在LW0001.但是實(shí)際上確實(shí)b[0]保存在 LW0000的低字節(jié),b[1]保存在LW0000的高字節(jié)。

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

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

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

再需要調(diào)用CRC函數(shù)的時(shí)候,可用如下的方法操作
        char sendbus[26]

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

版權(quán)申明:本文章由逸創(chuàng)論壇(www.yeecon.com)原創(chuàng),轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://www.yeecon.com/forum.php?mod=viewthread&tid=74&fromuid=1
(出處: 逸控BBS)

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

主站蜘蛛池模板: www成人啪啪感受 | 日本不卡视频 | 日韩三区在线 | 在线αv| 一本久道中文无码字幕av | 激情综合色综合啪啪五月丁香搜索 | 狠狠色噜噜狠狠狠狠综合久 | 日本高清中文字幕 | 亚洲一区av无码少妇电影 | 国产 | 欧洲野花视频天堂视频p | 日本人妻巨大乳挤奶水 | 国产精品一区二区三区四区 | 国产又色又爽又黄又免费软件 | 日日天干夜夜人人添 | 欧美日韩亚洲一区二区三区 | 亚洲欧美激情四射在线日 | 亚洲精品一区二区 | 国产后进白嫩翘臀在线播放 | 性与爱午夜视频免费看 | 亚洲色在线视频 | 精品欧美一区二区久久久 | 人妻国产成人久久av免费高清 | 四虎影院在线免费观看 | 国产一卡二卡三卡四卡视频版 | 国产成人av片在线观看 | 99r| 天堂av免费观看 | 韩国黄色三级 | 久久一区二区三区精品 | 久久99亚洲精品久久久久 | 欧美黄色片视频 | 男女拍拍拍网站 | 在线播放免费av | 精品久久久免费 | 成人在线手机版视频 | 国产欧精精久久久久久久 | 国产99在线 | 欧洲 | 91精品国产综合久久婷婷香 | 好吊妞视频788gao在线观看 | 久久超碰在线 | 男主和女配啪慎入h闺蜜宋冉 | 黄色片视频在线免费观看 | 九色综合狠狠综合久久 | 日韩a人毛片精品无人区乱码 | 国产熟女精品视频大全 | 日本一本草久国产欧美日韩 | 玖玖在线 | 99在线精品观看 | 亚洲男人的天堂在线aⅴ视频 | 国产第5页| 精彩动漫 - 91爱爱 | 亚洲精品无码乱码成人 | 天天摸天天做天天爽天天弄 | 亚洲黄色成人 | 狼人av在线| 免费国产一区二区三区四区 | 美女黄的视频全免费 | 成年永久一区二区三区免费视频 | 精品一区二区三区激情在线欧美 | 主站蜘蛛池模板: 蛛词}| 五月丁香色综合久久4438 | chien国产乱露脸对白 | 天天色踪合 | 亚洲日韩亚洲另类激情文学 | 一本久久综合亚洲鲁鲁五月天 | 国产jk白丝在线观看免费 | 人妻少妇中文字幕乱码 | 色一情一乱一伦一区二区三欧美 | 精品国产自在精品国产精华天 | 免费久久视频 | 三级中文字幕永久在线 | 蜜臀av 国内精品久久久 | 老妇高潮潮喷到猛进猛出 | 久草在线香蕉 | 国产又色又爽又黄的在线观看视频 | 日本sm/羞辱/调教/捆绑视频 | 久久久蜜臀| 三上悠亚国产精品一区内容阅读 | 青青草视频免费播放 | 日本v在线 | 亚洲国产中文字幕在线视频综合 | 天天干天天怕 | 高潮内射免费看片 | 亚洲人成无码区在线观看 | 国产精品theporn88| 欧美精品亚洲精品日韩传电影 | 国产精品制服丝袜第一页 | 免费三级现频在线观看播放 | 色欲久久九色一区二区三区 | 在线国产99 | www.日韩.com| 国产一区二区三区久久久久久久 | 国产三级韩国三级日产三级 | 无码人妻少妇伦在线电影 | 精品无码人妻一区二区三区不卡 | 亚洲一区国产一区 | 国产男女无套在线播放 | 欧洲亚洲国产成人综合色婷婷 | 爱情岛论坛国产首页 | 日韩精品少妇一区二区在线看 | 在线免费观看中文字幕 | 日韩精品久久一区二区三区 | 亚洲 激情 小说 另类 欧美 | 蜜桃视频成人专区在线观看 | 欧美一区二区三区网站 | 无码人妻aⅴ一区二区三区玉蒲团 | 久久综合成人精品亚洲另类欧美 | 成年人av在线播放 | 极品主播的慰在线播放 | 午夜天堂网 | 国产麻豆剧果冻传媒星空视频 | 露出调教羞耻91九色 | 成人ww| 18禁毛片无遮挡嫩草视频 | 丰满少妇xbxb毛片日本视频 | 亚洲婷婷综合色香五月 | 日本三级手机在线播放线观看 | 精品人妻一区二区三区四区在线 | 婷婷五月俺也去人妻 | 主站蜘蛛池模板: 蛛词}| 国产精品自在线拍国产手机版 | 精品国产乱码久久久久久口爆 | 影音先锋国产精品 | 最新69成人精品视频免费 | 上原亚衣av一区二区三区 | 日韩精品短片 | 天天看片天天爽 | 99精品国产在热久久无毒不卡 | 久久久久久亚洲av毛片大全 | 美女视频黄又黄又免费 | 秋霞影院午夜伦a片欧美 | 强奷乱码欧妇女中文字幕熟女 | 日韩精品电影综合区亚洲 | 肉肉av福利一精品导航 | 久久精品人妻无码一区二区三区 | 91精品国产综合久久婷婷香蕉 | 高清性欧美暴力猛交 | 亚洲精品色视频 | 久久中文字幕无码a片不卡古代 | 97人人添人澡人人爽超碰动图 | 女生啪啪网站 | 欧美精品一区二 | 少妇免费毛片久久久久久久久 | 欧美日韩免费观看视频 | 玖玖热视频 | 国产传媒麻豆剧精品av国产 | 国产清纯白嫩初高生视频在线观看 | 亚洲精品久久一区二区三区四区 | 国产湖南美女精品毛片 | 性生交大片免费中文 | 手机av永久免费 | 欧美激情一区二区三区 | 午夜网站视频 | 日韩久久免费视频 | 夜夜爽夜夜操 | 欧美性性性性性色大片免费的 | 少妇精品偷拍高潮少妇小说 | 国产偷国产偷亚州清高app | 国产91亚洲| 青娱乐在线视频免费观看 | 国产高清小视频 | 亚洲丰满熟女一区二区v | 少妇厨房愉情理9伦片视频 91成人在线播放 | 国产v亚洲∨无码天堂 | 国产精品一区二区av麻豆 | 欧美色一级 | 国产一区二区四区在线观看 | 日本久久高清 | 色94色欧美sute亚洲线路一 | 成人久久毛片 | 日本一区二区专线 | 亚洲无遮挡 | 久久女人天堂精品av影院麻 | 美女裸体色黄污视频网站 | 91极品国产| 俺也来俺也去俺也射 | 日本一道人妻无码一区在线 | 射射综合网 | 欧美三级乱人伦电影 | 主站蜘蛛池模板: 蛛词}| 亚洲超碰97无码中文字幕 | 秋霞无码久久久精品交换 | 日韩av在线一区二区三区 | 男女同房做爰爽免费 | 亚色中文| 爽爽精品dvd蜜桃成熟时电影院 | 两人做人爱费视频午夜 | 丰满熟女高潮毛茸茸欧洲视频 | 成熟少妇xxxx性pp交 | 涩涩视频软件 | 九九九九九九九九 | 欧美精品一区二区三区免费播放 | 中文国产乱码在线人妻一区二区 | 伊人久久大香线蕉综合5g | 成人艳情一二三区 | 女人下边被添全过视频 | 国产成人毛毛毛片 | 国产精品香蕉在线的人 | 1024手机在线观看 | 午夜精品久久久久久久久久蜜桃 | 久久人人爽爽人人爽人人片av | 八个男人躁我一个视频免费 | 亚洲欧美日韩成人一区 | 一区二区 在线 | 中国 | 九九精品热 | 国产日韩一区在线精品 | 亚洲综合熟女久久久30p | 在线日韩国产 | 夜夜穞天天穞狠狠穞 | 免费成人一级片 | 欧美伦理在线观看 | 亚洲乱码日产精品bd在线看 | 日韩啪啪网站 | 亚洲欧洲视频在线观看 | 亚洲色老汉av无码专区最 | 91大奶| www.狠狠爱| 中文字幕在线亚洲二区 | 天堂网久久久 | 中文国产乱码在线人妻一区二区 | 国产一级片免费观看 | 久久亚洲国产精品五月天婷 | 欧美综合亚洲图片综合区 | 国产一级特黄aaa大片评分 | 九九在线中文字幕无码 | 国产亚洲人成a在线v网站 | 日韩中文字幕无砖 | 国产黄色免费 | 色吊丝永久性观看网站 | 神马午夜福利不卡片在线 | 中文在线字幕免费观看 | 国产精品久久久久久婷婷 | 国产原创视频 | 国产精品久久久久久久免费软件 | 国产普通话对白刺激 | 中文国产成人精品久久app | 亚洲精品无码mⅴ在线观看 亚洲国产剧情av | 亚洲精华国产精华精华液网站 | 免费无码又爽又刺激网站 | 主站蜘蛛池模板: 蛛词}| 中文字幕亚洲在线 | 亚洲色在线无码国产精品 | 亚洲成熟丰满熟妇高潮xxxxx | 欧美成人乱码一区二区三区 | 17c在线观看 | 欧洲理论片 | 成人av三级 | 激情av网址 | 成人内射国产免费观看 | 日本丰满少妇bbbbbb凹凸 | 国产欧美三级 | 成人深爱网 | 伊人久久精品欧洲综合网 | 亚洲 欧美 制服 另类 日韩 | 国产精品视频一区二区三区无码 | 国产精品欧美一区二区视频 | 福利片在线 | 亚洲www永久成人网站 | 无码啪啪熟妇人妻区 | 亚洲精品1234| 久久久久久久综合日本 | 亚洲精品国产品国语在线观看 | 在线中文字幕日韩 | 激情综合站 | 色网站免费观看 | 欧美精品观看 | 韩日美无码精品无码 | 毛多水多www偷窥小便 | 日本欧美亚洲中文在线观看 | 人妻熟妇乱又伦精品无码专区 | 天天摸夜夜摸爽爽狠狠婷婷97 | 精品第一国产综合精品蜜芽 | 免费福利影院 | 日韩欧美大片免费观看 | 亚洲国产老鸭窝一区二区三区 | 超黄av | 久色99| 欧洲av网址 | 色呦呦av | 久久国产成人免费网站 | 就爱啪啪网站 | 欧美色图亚洲激情 | 日日夜夜草 | 天海翼一区二区三区四区在线观看 | 国产精品99久久久久久武松影视 | 伊人久久精品亚洲午夜 | 国产精品久久久影院 | 国产69精品久久久久777糖心 | 在线一区二区视频 | 太深太粗太爽太猛了视频免费观看 | 国产男女猛烈无遮掩视频免费网站 | 欧美日韩国产在线观看 | 伊人五月天婷婷 | 欧美一区二区在线视频 | 亚洲国产制服丝袜高清在线 | 日日鲁鲁鲁夜夜爽爽狠狠 | 97香蕉久久夜色精品国产 | 亚洲欧美综合成人五月天网站 | 日日骚影院 |