国产一区二区三区毛片_亚洲乱码AV中文一区二区_亚洲精品无码专区在线播放_日韩欧美一二_咪咪av影院_欧久久av一区二区

peteryi
級別: 正式會員
精華主題: 0
發帖數量: 7 個
工控威望: 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重新編輯 ]

主站蜘蛛池模板: 美女一二三区_香港日本三级在线播放_国产性―交一乱―色―情人_免费伦费一区二区三区四区_欧美亅性猛交内射_8mav在线_无遮挡边吃摸边吃奶边做_美女扒开屁股让男人桶 | 午夜性做爰A片免费看_最近中文字幕在线视频1_99久久99视频只有精品_叶子楣三级在线观看_91精品久久久久久久久久久久久_欧美精品乱码久久久久久按摩_91av精品视频_国产精彩在线视频 | www.av小四郎.com_蜜臀性色AV免费_无码午夜福利片_自拍av一区二区三区_欧美日韩国产一区二区三区在线观看_国产色视频网免费_青青草免费在线_越南美女内射BBWXZ | 国产精品美脚玉足脚交欧美_一级片久久久_午夜中文_亚洲黄片一级在线广播_男人天堂成人在线_性生交大片免费看_亚洲第一女人av_成人毛片18女人毛片免费 | 色噜噜久久综合伊人一本_伊人久久丁香色婷婷啪啪_久久狠狠爱亚洲综合影院_日韩一级免费观看_日本内射FREERAPE视频_国产欧美一区二区精品秋霞影院_亚洲一区国产二区_中文字幕一二三综合a | 少妇厨房愉情理9仑片视频_成人免费在线观看网址_国产成人无码精品一区不卡_久久看av_97超碰福利久久精品_美女一级黄色大片_国产欧美日韩一区二区三区四区_亚洲AV嫩草AV极品A片 | 午夜精品成人福利_麻豆涩涩_九九热精品视频在线播放_中文字幕日韩专区_欧美极品xxxxx_午夜寂寞支持安卓精品_靠逼视频在线免费观看_一区二区三区视频免费观看 | 一级黄色片免费_日韩高清在线播放_www.com久久久_XXX国产熟妇HD_成人精品自拍_亚洲欧洲免费视频_精品成人国产_一级全黄少妇性色生活免费看 | 国产成人精品aa毛片_亚洲欧美日韩综合一区_久久久久久曰本av免费免费_精品国产V无码大片在线观看_99视频中文字幕_www免费视频_美女末成年视频黄是免费网址_91chinese老女人 | 日产精品卡二卡三卡四卡区满十八_99精品视频一区二区三区_成人在线网_www.爱爱_男人j桶进女人p无遮挡_久久国产avjust麻豆_在线国产日本_色aaa | 激情内射亚州一区二区三区爱妻_91成人精品一区二区三区四区_caoporen个人免费公开_男人猛吃奶女人爽视频_欧美人与动牲交A精品_特级西西大胆www147_国产一级毛片黄片_玖玖精品在线 | 亚洲日韩国产成网在线观看_69久久久_伊人久久精品无码麻豆一区_亚洲欧美日韩在线观看a三区_日本网站在线_av在线免费观看国产_最近免费中文字幕大全高清MV_性欧美长视频免费观看不卡 | 大雞巴亂倫有声小说_ZZIJZZIJ亚洲日本少妇_mm1313亚洲国产精品一区_97成人精品视频在线观看_在线视频毛片_国产精品精品自在线拍互動交流_黄色大片日本免费大片_久久久无码精品无码国产人妻丝瓜 | 国自产拍亚洲免费视频_夫妇激情在线观看视频_亚洲精品高潮呻吟久久av_妞干网在线观看_精品久久久网_精品国产91久久久久久久妲己_国产人妇三级视频在线观看_国产精品56页 | 亚洲国产一区二区视频_国产草草影院CCYYCOM_av黄色_精品av综合导航_久久国产91免费观看_性少妇video_a级黄色片在线观看_亚洲免费看片 | 国产一级性片_性欧美另类_精品视频一区二区在线_国产成人无码AⅤ片在线观看_国产一级一级一级_一级黄色大片在线_国产a爱_在线看片日韩 | 日本乱码一区二区_成人精品视频免费在线观看_在线观看日本亚洲一区_日韩欧美MV在线观看免费_久久久亚洲国产美女国产盗摄_www.日本黄_老少配XX丰满老熟妇_欧美奶涨边摸边做爰视频 | 91播放_4hu在线_丹麦一级毛片_国产乱子伦免费视频观看_操操av_国产裸体裸拍免费观看_一级二级黄色大片_www.五月婷婷.com | 国产精品福利免费_亚洲精品无码成久久不卡_欧美黄色大片在线观看_国产色拍_又色又爽又黄又免费的照片_黑人边吃奶边摸边做边爱_精品免费av一区二区三区_久久综合亚洲精品 | 穿越时空的少女免费观看动漫日语_国产野战无套av毛片_国产精品成人aaaaa网站_A级毛片内射免费视频_魔鬼部队高清国语免费观看_97精品免费公开在线视频_日韩av高清在线播放_国产欧美日韩另类 | 亚洲激情综合视频_一本之道加勒比在线观看_丰满的年轻搜子在线观看_亚洲国产成人精品女人_精品国产aⅴ一区二区三区_久久777国产线看观看精品_成人a级免费视频_av天天干 | 四色永久网址在线观看_首页国产欧美日韩丝袜_国产丝袜视频一区二区三区_青青国产在线_欧美一a一片一级一片_国产午夜精品视频免费不卡69堂_亚洲伊人一本大道中文字幕_中字一区 | 午夜精品影院_中文JAPANESE在线播放_精品三级_林深见鹿40集高清免费观看_国产一级αv片免费观看_青草久久国产_超碰个人97_广西美女色炮150p图 | 国产sM重味一区二区三区_伊人成人情网_无码欧美毛片一区二区三在线视频_yellow高清免费观看_免费网站观看_人人看人人鲁狠狠_94欧美setu_japanese精品中国少妇 | 欧美成人精品三级网站_国产区二区_91精品国产综合久久精品图片_91在线观看入口_日韩久久精品视频_九色网站在线观看_影音先锋久草在线_一起草逼 | 欧美精品毛片久久久久久久_日韩人妻中文无码一区二区七区_久草最新在线_5566先锋影音夜色资源站在线观看_亚洲乱码国产乱码精品精可以看_国产精品呻吟高潮_成人看片黄A免费看那个网址_久久欧美AⅤ无码精品色午夜麻 国产成人一区二区三区影院动漫_国产成人在线视频免费观看_久久99女女久久99久久_www.久久爱.com狼人_国产又爽又刺激的视频_日韩中文在线观看_天天草天天爱_狠狠爱天天操 | 国产成人无码18禁午夜福利P_麻花豆传媒剧国产免费mv豆丁网_狼友AV永久网站免费极品在线_后入内射无码人妻一区_亚洲精品成人av久久_国产真实强被迫伦姧女在线观看_亚洲综合精品久久_丰满迷人的少妇特级毛片 | 午夜成熟看A级毛片_大地资源中文在线观看免费版高清_亚洲色偷精品一区二区三区_夜夜天天操_国产爆乳成AV人在线播放_两性色午夜免费视频_国产美女91呻吟求_av免费看网站 | 超薄丝袜足J好爽在线观看_欧美成人一区亚洲一区_亚洲AV高清一区二区三区尤物_天堂一区二区mv在线观看_麻豆视传媒官网免费观看_日韩欧美视频免费_1024国产在线在线视频_AV无码中文字幕不卡一区二区三区 | 色播在线播放_婷婷成人五月天开心激情_国产一区日韩精品_日本人做爰大片免费网站_青青草手机视频在线观看_色xx综合网_色婷婷综合成人av_国产一级毛片国语一级 | 少妇啪啪免费观看欧美三p_俺来也中文字幕_亚洲精品aaaa精品_69夜色精品国产69乱_人与狗精品aa毛片_视频福利一区_亚洲精品中文字幕乱码三区_成人免费视频a | 日韩欧美国产精品_巴中文旅集团_粉嫩蜜桃麻豆免费大片_久久久精品久久日韩一区_久久久久久久久久爱_男女爽爽午夜18污污影院_亚州欧美精品_婷婷久久香蕉五月综合加勒比 | 姑娘第四集免费看视频_久久久香蕉_www日本在线观看_国产精品人人爽人人爽av_亚洲国产综合在线看不卡_亚洲欧美国产日韩一区夜色_国产视频网站在线观看_亚洲区和欧洲区五六区 | 久久久999免费视频_无码写真精品永久福利在线_91插插插影院_免费黄色高清视频_果冻传媒视频一二在线观看_高清二区_大内密探零零灵性_成人欧美国产 | se69色成人网wwwsex_午夜av免费_亚洲高清av_久久久久免费毛A片免费_四虎影院永久_男人一边吃奶一边弄下边好爽_国产91对白刺激露脸在线观看_欧产日产国产精品精品 | 亚洲超碰97人人做人人爱_国产精品日日做人人爱_久久精品夜色国产亚洲av_人妻体内射精一区二区_久久久精品波多野结衣_最新91在线视频_久久9色_国产成视频在线观看 | 国产欧美日韩_黄色成人网站免费无码av_亚洲AV日韩综合一区二区_大象一区_国产成人无码牲交免费视频_久久久久欧美激情饼干_日韩一区二区三区视频在线播放_国产精品hd | 伊人一本在线_亚洲AV永久无码精品国产精_久久精品岛国AV一区二区无码_亚洲欧洲精品成人久久av18_美女视频一二三区_国产黄色录像一级片_91视频综合网_九九热有精品 | 久久久久99精品国产片_日韩a级毛片免费观看久久_三级aa毛片_国产又粗又大久久久久久_欧美日韩免费在线观看视频_欧美日夜夜逼_第一色网站_99久久精品国产高清一区二区 | 国产亚洲视频系列_中文字幕亚洲欧美在线不卡_国产精品成人A片在线果冻_婷婷超碰_日本a级片免费看_XXX国产精品XXX_欧美一级片在线播放_亚洲综合清纯唯美 | 亚洲九九精品_国产不卡视频一区二区三区_久操视频免费看_热99久久精品_婷婷久久精品一区二区_日本免费人成在线观看_xxxx免费_国产成人一区二区三区在线视频 |