成人精品一区二区久久久 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的生成方式不同。威綸通的腳本語(yǔ)言庫(kù)中有CRC校驗(yàn)函數(shù),但是這個(gè)校驗(yàn)
函數(shù)是CRC-16/MODBUS版本的,不能為我所用,所以我計(jì)劃自己設(shè)計(jì)一個(gè)CRC16/XMODEM的函數(shù),然后將這個(gè)函數(shù)保存到函數(shù)庫(kù)里,以備他用
。由于第一次使用這個(gè)屏幕,經(jīng)驗(yàn)不做,遇到一些困難,但也努力解決了。
        首先不得不吐槽下,威綸通的宏指令說(shuō)明書寫的太簡(jiǎn)單了,在遇到問(wèn)題的時(shí)候,可能無(wú)法從指令的說(shuō)明手冊(cè)上找到答案,更多的是自己摸索。比如
自己寫子函數(shù)時(shí)就遇到狗血的問(wèn)題
       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í)根本問(wèn)題,是如何將一串?dāng)?shù)據(jù)傳給子函數(shù),子函數(shù)將傳過(guò)來(lái)的數(shù)據(jù)根據(jù)特定算法,運(yùn)算出計(jì)算結(jié)果,關(guān)于CRC算法,本文不做論述,只提供代碼。
我首先想到的是這樣的思路:定義 這樣一個(gè)函數(shù) short CRC16(short dat[],short len),用來(lái)計(jì)算CRC。
但是卻遇到了上面1中的問(wèn)題,數(shù)組參數(shù)無(wú)法作為函數(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ì)算。
如此可解決無(wú)法傳遞數(shù)組參數(shù)的問(wèn)題。操作如下。
        定義  sub short CRC_16(short dataddr, short len)
       參數(shù)說(shuō)明 short dataddr,dataddr是位于LW暫存區(qū)的起始地址,short len len 數(shù)據(jù)長(zhǎng)度。
         下面紅色區(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)一定長(zhǎng)度的數(shù)組來(lái)保存要進(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ì)算的,這里不做研究。下面來(lái)講講紅色部分。紅色部分就是申請(qǐng)數(shù)組空間,然后,將LW,暫存空間的數(shù)據(jù),轉(zhuǎn)移到所申請(qǐng)的數(shù)組中,交給下面計(jì)算。
  這里的疑惑是為何要申請(qǐng)數(shù)組,然后在拷貝數(shù)據(jù),這么麻煩,而不是用下面的方式進(jìn)行,下面的算法是每次循環(huán)開始先讀取暫存空間數(shù)據(jù),先不說(shuō)犧牲時(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ǔ)方式
先來(lái)說(shuō)說(shuō)LW中的數(shù)據(jù)存儲(chǔ) (吐槽:為何網(wǎng)上關(guān)于這方面的資料很少,幾乎沒(méi)有LW存儲(chǔ)空間的詳細(xì)說(shuō)明)
目前 筆者使用 軟件 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 來(lái)寫LW中的數(shù)據(jù)的時(shí)候,會(huì)根據(jù)第一個(gè)參數(shù)的類型來(lái)指導(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],則通過(guò)下面循環(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重新編輯 ]

主站蜘蛛池模板: 红杏亚洲影院一区二区三区 | 国产成人精品高清在线电影 | 亚洲无线看 | 蜜桃视频黄色 | 国产gv在线观看受被做哭 | 国自产偷精品不卡在线 | 国产免费一区二区三区vr | 特级欧美插插插插插bbbbb | 亚洲一区国产精品 | 国产精品456在线播放 | 国产一区国产二区在线精品 | 欧美日韩亚洲一 | 国产黄色片在线 | 中文字幕丰满人伦在线 | 可以免费观看的av毛片下载 | 国产无套粉嫩白浆在线观看 | 新91视频网| 亚洲成人精选 | 欧美另类videossexo高潮 | 黄色国产在线 | 四虎影库在线播放 | 国产福利第一视频在线播放 | 天干夜天天夜天干天在线观看 | 日本久久久网站 | 日本道色综合久久影院 | 亚洲成色www久久网站瘦与人 | 国内精品乱码卡一卡2卡三卡新区 | 日韩放荡少妇无码视频 | 亚洲女人久久久 | 欧美性开放情侣网站 | 国产网站在线免费观看 | 国产在线在线 | a一区二区三区乱码在线 | 欧洲 | 天码av无码一区二区三区四区 | 久久人体| 亚洲成av人片在www鸭子 | 国产乱人伦av在线a麻豆 | 中国华裔少妇黑人内谢 | 国产亚洲精品无码成人 | 天天躁日日躁狠狠 | 天天摸天天爽日韩欧美大片 | 国产精品美女久久久9999 | 色偷偷一区二区无码视频 | 在线天堂www在线 | 久久久久婷| 亚洲精品人成无码中文毛片 | 国产98在线 | 看免费真人视频网站 | 欧美激情69 | 国产乱淫片视频 | 亚洲国产成人a精品不卡在线 | 精品国产va久久久久久久 | 四虎免费大片aⅴ入口 | 91毛片网 | 国产有奶水哺乳期无码avav | 四虎永久在线精品国产馆v视影院 | 国产精品对白清晰受不了 | 久久人人做人人妻人人玩精品hd | 久久嫩草av| 主站蜘蛛池模板: 蛛词}| 黑人巨茎大战俄罗斯美女 | 亚洲国产精品视频一区 | 久久久久久网 | 无码日韩人妻av一区二区三区 | 思思九九| 楼下的房客 在线 | 激情综合五月网 | 国产成人av网站 | 久久久免费看 | 潮喷失禁大喷水aⅴ无码 | 狠狠色成人综合网 | 久久久精品综合 | 国产成人亚洲综合色婷婷秒播 | 亚洲 丝袜 另类 校园 欧美 | 国产第一福利影院 | 亚洲人天堂 | 九个美女露脸撒尿嘘嘘视频 | 91重口味 | 人人爽人人干 | 国产人与禽zoz0性伦 | 国产麻花豆剧传媒精品mv在线 | 国产激情欧美 | 亚洲一区你懂的 | 91网站免费在线观看 | 老熟妇乱子交视频一区 | 99爱国产精品免费高清在线 | 水蜜桃av无码一区二区 | 中文字幕精 | 激性欧美激情在线 | 青草久久久国产线免观 | 国产精品青草久久久久婷婷 | 深夜国产精品 | 91久久久一线二线三线品牌 | 在线观看午夜视频 | 欧美日韩精品无码一本二本三本色 | 久久亚洲影视 | 日韩av在线播 | 夜夜骚视频 | 欧美日韩国内 | 噜噜色av | av午夜天堂| 九九re6热在线视频精品66 | 久久66热人妻偷产精品 | 蜜桃网av | 又粗又紧又湿又爽的视频 | www.好莱污.com | 日本精品毛片一区视频播 | 美女视频免费在线 | 少妇被又大又粗猛烈进出视频 | 亚洲一区二区三区国产精华液 | 性av+色av| 亚洲国产欧美日韩另类 | 国产亚洲精品久久久久四川人 | 最新国产久免费视频在线观看 | 麻豆人妻少妇精品无码专区 | 免费观看欧美猛交视频黑人 | 国产亚洲精品久久久久久青梅 | 欧美日韩中文在线 | 柠檬福利第一导航在线 | 主站蜘蛛池模板: 蛛词}| 日韩 在线 中文 制服一区 | 精品服丝袜无码视频一区 | 四虎影视在线 | 国产日韩a | 成年人免费视频网站 | 国产绿帽刺激高潮对白 | 欧美亚洲另类色图 | 欧美日韩在线视频首页 | 91欧美一区二区三区 | 偷窥少妇久久久久久久久 | 91视频在线网站 | 国产高清日韩 | 亚洲aⅴ精品一区二区三区91 | 在线日产精品一区 | 一本一久本久a久久精品综合 | 天堂视频在线观看免费 | 精品人人人 | 六月婷婷久久 | 天天摸天天做天天爽水多 | 日本午夜免a费看大片中文4 | 国产又色又爽又黄又免费软件 | 亚洲精品综合欧美一区二区三区 | 国产真实生活伦对白 | 激情欧美成人久久综合 | 国产成人精品亚洲777 | 一女多男np慎入h有声小说 | 天天操天天做 | 国产偷国产偷亚洲高清人乐享 | 欧美人与动牲交a免费观看 伊人999 | 男女一边摸一边做爽爽 | 午夜国产精品国产自线拍免费人妖 | 国产乱码精品一区二区三区蜜臀 | 香蕉视频在线免费 | 亚洲这里只有久热精品伊人 | 国产人妻人伦精品1国产盗摄 | 亚洲精品屋v一区二区 | 国产各种高潮合集在线观看 | 国产精品怡红院在线观看 | 色婷婷狠狠 | 亚洲国产精品成人综合久久久 | 丁香激情综合 | 国产亚洲日韩网曝欧美台湾 | 91天天干 | 日本成熟丰满老妇xxxx1 | 国产资源网站 | 成人欧美一区二区三区视频xxx | 少妇特黄v一区二区三区图片 | 国产 日韩 另类 视频一区 | 黄网在线免费看 | 天堂久久久久va久久久久 | 欧美一级视频免费观看 | 成 人 综合 亚洲另类 | 亚州综合网 | 91情侣在线 | 啪视频在线观看 | 狂野欧美激情性xxxx在线观看 | 国产97色在线 | 国 | 国产激情无码一区二区 | 亚洲欧美国产国产一区二区三区 | 主站蜘蛛池模板: 蛛词}| 国产免费黄色小视频 | 蜜桃精品视频在线观看 | 97视频久久久 | 久9re热视频这里只有精品 | 国产成人无码牲交免费视频 | 亚洲午夜国产精品无码 | 青青草视频在线观看 | 亚洲精品乱码久久久久久按摩 | 91亚洲精品丁香在线观看 | 亚洲成熟女人毛毛耸耸多 | 欧美日韩久久中文字幕 | 久久精品国产99久久无毒不卡 | 穿情趣内衣c到高潮av片 | 欧美亚洲另类色图 | 国产亚洲精品久久久999 | 日日天堂 | 中文字幕高清一区 | 开心六月婷婷 | 亚洲天堂爱爱 | 国产毛片久久久久久国产毛片 | 国产91精品看黄网站在线观看动漫 | 四虎影视国产精品永久地址 | 精品熟女少妇av久久免费 | 色偷偷av老熟女 | 日韩av在线影院 | 欧美人与性动交g欧美精器 www,操 | 天天干天天爱天天操 | 欧美黑人一级视频 | 成人精品免费 | 北条麻妃一二三区 | 国产精品久久久天天影视 | 日日夜夜免费视频 | 青草草在线视频免费观看 | 99爱免费视频 | 久久精品这里热有精品 | 欧美性猛交视频 | 日日av色欲香天天综合网 | 久久超碰色中文字幕超清 | 成人欧美一区二区三区小说 | avtt中文字幕 | 奇米影视888狠狠狠777不卡 | 波多野结衣乳巨码无在线 | 久久久久久99av无码免费网站 | 狠狠干免费| 亚洲人成日韩中文字幕无卡 | 亚洲人禽杂交av片久久 | 人妻丰满熟妇aⅴ无码区 | 精国产品一区二区三区a片 日日操网 | 免费看少妇作爱视频 | 性少妇中国内射xxxx狠干 | 成人免费在线观看 | 日本熟妇色一本在线观看 | 看色片网站 | 天天干天天摸天天操 | 99国产欧美另娄久久久精品 | 欧美日本视频在线观看 | 日亚韩在线无码一区二区三区 | 狠狠躁日日躁夜夜躁老司机 | 亚洲一区二区三区波多野结衣 | 主站蜘蛛池模板: 蛛词}| 91桃色网站| 天堂中文资源库官网 | 成年美女黄网站色大片免费看 | 国产日本在线观看 | 国产日韩欧美在线观看视频 | 久久天天躁夜夜躁狠狠i女人 | 人妻丰满熟妇av无码区免 | 日韩精品无码一区二区三区不卡 | 老熟妇乱子交视频一区 | 亚洲国产精品肉丝袜久久 | 超碰cao草棚gao进入蜜桃 | 无码人妻精品一二三区免费 | 国产成人精品.视频 | 成人久久大片91含羞草 | 一本色道久久东京热 | 1024手机在线播放 | 青青草国产成人久久电影 | 国产精品国语对白 | 午夜色网| 亚洲日本韩国欧美云霸高清 | 欧美精品xx | 久久亚洲人成网站 | 国产内射999视频一区 | 一区二区中文字幕在线 | 一二三四在线观看免费视频 | 欧美精品爱爱 | 北条麻妃久久 | 国产精品1234 | 亚洲一区二区欧美 | 国产91av视频在线观看 | 无码av大香线蕉 | 高潮添下面视频免费看 | 香港aa三级久久三级 | 伊人福利网 | 成av人在线 | 玖草影院 | 亚洲一级影院 | 国产成人精品国内自产拍免费看 | 99久久国产亚洲高清观看 | 99热99热| 后进极品美女白嫩翘臀 | 日本在线一区二区 | 日产精品中文一区二区三区 | 精品服丝袜无码视频一区 | 国产av激情久久无码天堂 | www.狠狠撸.com| 成人啪啪18免费网站看 | 亚洲精品一卡2卡三卡4卡乱码天 | 扒开双腿猛进入喷水高潮叫声 | 久久精品久久国产 | 亚洲一区二区三区中文字幕在线 | 欧美四虎| 国产精品无套 | 正在播放凉森玲梦88av | 可播放的亚洲男同网站 | 日本高清色www网站色噜噜噜 | 2023国产精品 | 国产精品偷伦在线观看 | 亚洲在线观看免费视频 |