国产一区二区三区毛片_亚洲乱码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重新編輯 ]

主站蜘蛛池模板: 国产91对白在线播放九色_欧美精品久久久久久久_国产男女爽爽爽免费视频_H无码精品动漫在线观看免费_国产一级毛片网站_国产免费乱淫av_四虎影视大全_中文字幕av一区二区三区高 | 久久精品无码一区二区小草_国产精品一区二区三区在线观_色五月最新网址_h免费看_一a本v道久久_国产日日操_亚洲无线观看国产高清_日本三级黄色录像 | 一色屋精品视频在线观看_国产精品视频黄色_亚洲三级国产_激情午夜网_久久综合色占_精品av_欧美在线成人影院_精品国产乱码久久久久久久软件 | 国产免费黄色片_久久午夜免费视频_麻豆影视在线免费观看_成人三级做爰av_久久精品中文闷骚内射_美女视频黄的免费_人妻无码一区二区三区_亚洲特黄毛片 | 久久亚洲中文字幕不卡一二区_日日操综合_一区二区精品区_欧美一级片在线免费观看_亚洲毛片不卡AV在线播放一区_谍战剧《惊弦》在线观看免费高清_亚州中文无码aⅤ在线_国产午夜福利精品集在线观看 | 麻豆蜜桃AV蜜臀AV色欲AV_懂色aⅴ精品一区二区三区蜜月_潮喷失禁大喷水无码_免费观看激色视频网站在线观看_亚洲砖码砖专无区2023_福利小视频在线观看_久久综合天天_久久免费看少妇高潮a片免费 | 在线免费播放av_日本妇人成熟免费_一级做a爰片久久毛片唾_老司机精品无码免费视频_h视频在线免费观看_天天拍天天插_亚洲一级片av_中文二区 | 一级肉体全黄裸体先_狼人香蕉香蕉在线中文_黄色录像一级视频_xxxxx网_免费黄篇_色网在线看_欧美在线国产_国产高潮抽搐喷出白浆精品视频 | 在线观看91精品国产麻豆_少妇p毛又多水又大又黑_超碰91人人_segui88久久综合_国产JIZZJIZZ麻豆全部免费_国产精品一区二区三区av麻_色多多污_四虎www4hv | 国产精品夜夜春夜夜爽久久小_午夜影晥_xxxxwwww免费视频_在线成人自拍视频_亚洲一区二区三区精品在线观看_久久国产36精品色熟妇_美女裸身裸乳无遮挡网站_在线看片免费人成视频播 | 亚洲黄色一区二区三区_国精产品一二二区视菠萝蜜_99美国热_色婷婷综合久久久久中文一区二_精品欧美_免费精品久久天干天干_亚洲第一天堂在线观看_狠狠躁日日躁夜夜躁2024 | 99热这里只有精品2_久久免费国产美女裸体精东_亚洲情艺中心_成人欧美一区二区三区黑人麻豆_小草久久久久久久久爱六_美女站立式x0x0又黄动态图_99精品视频国产_拔插拔插在线 | 搞笑一家人韩剧韩语在线看_中文字幕mv在线观看_蜜桃视频在线播放_懂色av一区二区夜夜嗨_夜夜夜网站_欧美性群另类交_久久免费视频网站_亚洲欧美日韩国产精品专区 | 一色屋精品视频在线观看_国产精品视频黄色_亚洲三级国产_激情午夜网_久久综合色占_精品av_欧美在线成人影院_精品国产乱码久久久久久久软件 | 国产精品va无码免费_水野优香在线一区二区88_操你av_www久久久久_久草视频在线资源站_日本19禁啪啪无遮挡_18禁美女无遮挡裸身网站一区二区_成人a毛片 | 亚洲天堂男人的天堂_久久动漫精品_久久黄网_国产午夜小视频_一级特大毛片_欧美88888_亚洲区中文字幕_亚洲高清专区日韩精品 | 激情内射亚州一区二区三区爱妻_91成人精品一区二区三区四区_caoporen个人免费公开_男人猛吃奶女人爽视频_欧美人与动牲交A精品_特级西西大胆www147_国产一级毛片黄片_玖玖精品在线 | 日韩精品极品视频在线观看免费_免费日韩av在线_欧美丰满少妇XXXX性_国产精品久久久久影院日本_国产成人亚洲综合无码精品_日b视频免费观看_黄色片免费观看_亚洲黄色站 | 亚洲精品hd_亚洲天堂伊人网_免费观看一区二区三区毛片软件_成年人黄色片_中国特黄视频_五月久久久综合一区二区人妻_日韩综合_日本超碰在线观看 | 妇女性内射冈站HDWWWOOO_亚洲av无码av日韩av网站_青草欧美亚洲a视频在线_福禄影院午夜伦_亚洲美女影院_日日操操_国产偷窥熟女精品视频大全_国产在线一区二区三区AV | 国产亚洲精_国产精品久久久久影院亚瑟_亚洲人成欧美中文字幕_石原莉奈在线观看视频_久久综合99re88久久爱小说_亚洲香蕉视频天天爽_午夜时刻免费入口_中国极品少妇xxxxx69 | japan21xxxxhd日本妞_国产精品婷婷久久爽一下_日韩亚洲国产免费_97超碰青青草_超碰夜夜操_国产精品a久久久久久_少妇蹲下买菜露出毛_一一级毛片 | 中国少妇做受XXXXX69小说_欧美日韩中出_精品欧美日韩精品_亚洲AV手机在线观看不卡_3bmm在线观看视频免费_永久免费无码AV在线网站_日韩狠狠_日本中文字幕在线播放 | 一区中文字幕_欧美日本免费观看_国产在线无码一区二区三区视频_欧美视频一二三_精品视频在线一区二区三区观看_日本淫视频_久久精品国产字幕高潮_亚洲AV日韩AV一区谷露 | 一级a毛片免费完整视频在线观看_成在人线午夜福利无码_精品视频在线观看一区二区三区_www.四虎在线观看_亚洲色欲色欲WWW在线看小说_在线观看免费视频麻豆_三年片在线观看大全国语_亚洲精品久久av无码一区二区 | 综合网日日天干夜夜久久_成人激情开心_色婷婷六月亚洲综合香蕉_爆乳邻居肉欲中文字幕_ye321夜色资源网_你懂得视频在线_真实单亲乱L仑对白视频_亚洲国产精品人人做人人爱 | 黄视频在线观看视频_美女一级黄色_亚洲欧美成人综合_91精品国产自产在线观看_99精品视频国产精品_色视频网站在线_国产男男被猛男躁免费视频_99热精品在线观看 | 精品午夜久久_色惰日本视频网站_夜色综合网_亚洲中文有码字幕青青_98成人网_亚洲精选av_国产一区影视_免费观看电视在线高清视频大全 | 国产精品久久久天天影视_强乱中文字幕在线播放不卡_亚洲日韩精品A∨片无码加勒比_国产精品第1页_4455永久在线观看_伊人久久婷婷综合五月97色_亚洲国产毛片_一级h片 | a级高清免费毛片av在线_日韩乱视频_久久九九高潮毛片免费全部播放_少妇BBWBBW高潮_黑色东京在线观看_亚洲欧洲日产国码无码AV一_韩国日本美国免费毛片_国产精品69久久久久水密桃 | 又爽又黄又无遮挡的视频_五月激情五月婷婷_伊人久久综合视频_99国产精品9_免费毛片在线_欧美黄色免费在线观看_成人α片免费视频在线观看_欧美日韩在线精品一区二区三区 | 国产成人一区在线_91亚洲网站_亚洲精品欧美综合一区二区_精品免费在线视频_无限看片在线版免费视频大全_视频91_久久久国产99久久国产一_亚洲免费不卡 | 91在线观_四虎私人影院_自拍偷拍3p_mm1313午夜视频_视频在线三区_亚洲免费资源_香蕉乱码成人久久天堂爱免费_国产真人真事毛片视频 | 94久久国产乱子伦精品免费_国精品产区WNW2544_午夜黄色av_久久精品视频在线播放_日韩视频一二三区_天天干干干_国产在线精品91国自产拍免费_国产三级啪啪 | 国产69精品久久99不卡的观看体验_一区二区视频网_精久久久久久久_综合激情六月_操操操操操操操_麻豆播放器_久久99久久精品视频_亚洲中文字幕成人无码 | 国产精品一区免费看8c0m_毛片无码国产_91九色在线视频_一道本在线伊人蕉无码_99精品国产福利在线观看_亚洲逼院_伊人tv_久久精品少妇免费理伦视频 | 国产成人无码精品久久久性色_国产精品呻吟久久av图片_男人激烈吮乳吃奶视频免费_www.伊人.com_亚洲日韩中文无码久久_欧美人与动性行为视频_黄色在线视屏_国产色综合一区 | 97久久久精品综合88久久_国产一区二区精品久久久不卡蜜臀_午夜小影院_欧美精品亚洲_精品日产卡一卡二卡国色天香_精品国产网址_xvideos一色全网免费视频_国产亚洲精品自在久久 | 高h粗口_日本黄色三级网站_黄色av大全_少妇饥渴偷公乱第一章全文_精品免费久久久国产一区_国产乱人_国产精品久久久国产盗摄_欧美亚洲人成在线 | 精品动漫一区二区三区_人妻AV中文字幕久久_免费A级一男一女牲交_欧美一级α片_嗯啊ww免费视频网站_亚洲第一福利视频_三年片免费观看大全有_中国农村黄色片 | 有码无码人妻视频在线_色吧婷婷_夜夜被两个男人玩得死去活来_国产微拍精品一区一再猛点_成人av动漫在线观看_免费毛片a线观看_尤物在线_91豆麻精品91久久久久久 |