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

主站蜘蛛池模板: 国产成人亚综合精品首页_国产午夜精品久久久久久久久久_亚洲资源在线_99视频精品视频高清免费_亚洲精品成人无码视频在线_精品一区二区三区波多野结衣_亚洲?V无码专区在线观看成人_永久免费av网站 | 亚洲日韩国产成网在线观看_69久久久_伊人久久精品无码麻豆一区_亚洲欧美日韩在线观看a三区_日本网站在线_av在线免费观看国产_最近免费中文字幕大全高清MV_性欧美长视频免费观看不卡 | xxxx漂亮少妇hdxxxx_久久香蕉国产线看观看手机_青青草手机在线观看_人妻激情另类乱人伦人妻_狠狠色狠狠色88综合日日91_有码在线_日韩av综合_好爽好痛好湿好硬视频免费 | 亚洲AV无码专区国产乱码京东传媒_色一情一乱一乱一区91Av_av免费在线观看网址_中文字幕精品—区二区_AAA级黄色视频_日本视频一二三区_强行糟蹋人妻HD中文_精品一区2区三区 | 一级黄色绿像片_曰韩精品无码_日本真人啪啪免费无遮挡_欧美一区二区久久久_亚洲精品92内射_乱子伦av无码中文字幕_视频,国产成人精品日本亚洲18_水莓100完全国产免费 | 国内精品久久久久影院蜜芽_一级不卡_亚洲国产成人久久综合_yy1111111少妇影院光屁股_国产乱淫av免费_中文字幕高清不卡_538国产精品视频一区二区_国产精品91久久久 | 综合第一页_欧美大色视频在线观看_91天堂在线_欧州一级特黄视频无码_亚洲一区二区三区无码国产_97SE亚洲国产综合自在线不卡_亚洲福利视频52_最近新中文字幕大全高清 | 久青草视频在线播放_男男短篇高h肉辣合集_北条麻妃中文精品国产_国产成人黄色片_中文字幕中文字幕在线中心一区_97插插_中文字幕综合在线观看_亚洲chinese男同志gay在线 | 一个人看的www视频网站_好色综合_在线观看一区亚_国产精品久久久久久久久久久新郎_亚洲va久久久噜噜噜久久男同_久热青青_伊人久久大香线蕉无码麻豆_美国三级 | 极品人妻大胆尝试50p_国产精品久久久久久久久妇女_欧美精选视频在线观看_91大尺度分娩_久久强奷乱码老熟女_日本h片在线观看免费_性av无码天堂_亚洲AV无码成人精品区 | 男人免费天堂_一本到综在合线伊人_国产毛片久久_亚洲Japanese女同精品_午夜一区在线_亚洲偷怕_国产高清精品福利私拍国产_亚洲一级免费看 | 国产精品18久久久久久av小说_91高清一区_好男人资源在线www免费_久久久噜噜噜久久中文福利_日本中文字幕一级_99精品视频免费观看_免费看片源_亚洲精品国男人在线视频 | 久久精品国产99久久无毒不卡_欧美色欧美亚洲另类七区_国产精品无码天堂av_欧美性色欧美性a片_亚洲日色_日韩A人毛片精品无人区乱码_久久免费毛片大全_国产综合一区二区三区视频一区 国产免费黄色片_久久午夜免费视频_麻豆影视在线免费观看_成人三级做爰av_久久精品中文闷骚内射_美女视频黄的免费_人妻无码一区二区三区_亚洲特黄毛片 | 麻豆一二三专区入口_免费h网站在线观看的_国产成人亚洲精品青草_欧美顶级METART裸体全部_日韩在线观看网址_A级免费黄色视频_久久久免费看_国产真人无码作爱视频免费 | 国产gaysexchina男同menxnxx_全免费A级毛片免费看无码_无码专区人妻系列日韩_久久久久久久久久综合_Chinese国产AV_日产乱码区别免费必看_国产91精选在线观看网站_成a∧人片在线观看无码 | 亚洲欧美va_国产精品亚洲一区二区在线_国产精品第五页_成年大片免费视频播放二级_青青草精品视频在线观看_国内激情视频在线观看_熟女少妇a性色生活片毛片_欧美一区二区三区红桃小说 | 亚洲最大激情网_超碰97.com_国产在线视频综合_久久综合久久综合久久综合_被黑人猛躁10次高潮视频☆_永久免费AV在线影院_国产精品久久久久AV福利动漫_天天躁日日躁狠狠躁AV麻豆 | 玖玖视频精品_国产丝袜无码一区二区视频_黄色avav_av免费国产_麻豆果传媒成人A片免费看_国产一区二区三区精品av_性欧美videofree高清69_成视频年人黄网站视频福利 | 天天干夜爽_少妇精品无码一区二区免费视频_小男生自慰gay网站_欧美性色黄大片人与善_涩涩网站免费观看_欧美日韩综合久久_欧美欧美在线_欧美在线观看视频网站 | 妇女性内射冈站HDWWWOOO_亚洲av无码av日韩av网站_青草欧美亚洲a视频在线_福禄影院午夜伦_亚洲美女影院_日日操操_国产偷窥熟女精品视频大全_国产在线一区二区三区AV | 亚洲色图在线播放_国产精品久久国产精品99gif_蜜桃久久久aaaa成人网一区_日本黄色高清视频网站_天天干天天澡_国产精品一区二区免费在线观看_九九有精品_国产高清不卡二三区 | 99无码熟妇丰满人妻啪啪_色综合天天综合网无码在_啪啪免费网_成人无码WWW免费视频苹果版_免费一级特黄特色的毛片_天堂av网2019_国产精品久久久久久久99_一区二区三区免费在线播放 | 中日韩VA无码中文字幕_久久一本热_少妇熟女久久综合网色欲_国产剧情亚洲福利_老色鬼在线精品视频在线观看_456成人网_亚洲国产精品久久久久婷爱影_精品午夜影院 | 精品国产一区二区免费不卡_久久久久久久久久99_国产精品无码素人福利免费_国产三级生活片_国精一区二区_国产小福利_久久中文字幕无码专区_日韩精品国产精品 | 手机在线播放国产女主播_国产精品一区二区久久不卡小说_久久夜靖品2区_精品视频色一区_品久久久久久久久久96高清_农村乱视频一区二区三区_久久久久无码精品国产情侣_黄又色又污又爽又高潮动态图 | 19禁国产精品福利视频_www黄在线观看_日韩av无码久久一区二区_97超碰国产在线_中文字幕.亚洲无码日_成人免费无码A毛片_青青草在久久免费久久免费_国产午夜性春猛交ⅹxxx | 日韩免费无码专区精品观看_久久久久久久久久久久久久免费看_18av千部免费影片与您_日本天堂在线视频_空姐毛片_香蕉私人影院_黑人巨茎大战白人美女_国产成人av免费观看 | 成人久久18免费观看_色69av_激情欧美在线观看_国语自产偷拍精品视频偷_91插插影库_天天躁日日躁狠狠躁av麻豆男男_国产精品久久久久久网站_成人欧美一区 | 国产精品国产精品国产专区不卡_欧美精品人人做人人爱视频_aa亚洲一区一区三区_一级黄色片在线播放_av中文精品无码在线不卡_在线中文日韩_日韩免费_久久久精品美女 | 中日韩欧美毛片免费观看_鲁丝一区二区三区免费_精品一久久香蕉国产线看观看古代_欧美一进一出视频_www伊人网_在线日韩欧美国产_久操小视频_97视频免费观看 | 国产精品嫩草影视久久久_日本精品一区视频_日韩成人一二三_av片在线观看无码免费_中文字幕人妻无码系列第三区_亚洲成av人片在www鸭子_a毛片免费看_毛片免费观看 | 好黄好污美女裸体网站_久久久久久a亚洲欧洲aⅴ96_都市激情在线亚洲国产_黄色片s色_超碰青草_大屁股大乳丰满人妻_秋霞午夜鲁丝一区二区老狼_性新婚a大黄毛片 | 美女一二三区_香港日本三级在线播放_国产性―交一乱―色―情人_免费伦费一区二区三区四区_欧美亅性猛交内射_8mav在线_无遮挡边吃摸边吃奶边做_美女扒开屁股让男人桶 | 肉体裸交137日本大胆摄影_91黄色毛片_国产成人一区二区三区在线_欧美成人另类视频_中文字幕免费看_欧美精品成人影院_久久16_成人国产精品免费观看 | 日本视频网站WWW色高清免费_少妇高潮灌满白浆毛片免费看_无码专区亚洲综合另类_亚洲国产精品无码久久sM_超碰在线香蕉_亚洲AV片不卡无码久久_日韩欧美一区二区三区永久免费_欧美高潮又爽又黄又硬又无遮 | ass年轻少妇bbwpic精品_中文在线中文资源_人妻少妇波多野结衣黑人_久久国产精品张柏芝_国产首页在线_a极毛片_一级毛片视频播放_欧美JIZZ18性欧美 | 久久亚洲中文字幕不卡一二区_日日操综合_一区二区精品区_欧美一级片在线免费观看_亚洲毛片不卡AV在线播放一区_谍战剧《惊弦》在线观看免费高清_亚州中文无码aⅤ在线_国产午夜福利精品集在线观看 | 亚洲欧洲日产国产av无码_亚洲网友自拍_永久免费的无码中文字幕_成在线人永久免费视频播放_aaa一区_日本教室三级在线看_国产成人精品大尺度在线观看_一本大道在线视频 | 亚洲国产成人片在线观看无码_欧美日韩亚洲另类_亚洲热热_日韩欧美在线视频免费_日本逼逼视频_久久综合婷婷丁香五月中文字幕_国产一区精品久久_亚洲一区日韩精品中文字幕 | 爱视频福利_深夜在线免费观看_国内精品久久久久久久影视蜜臀_91免费精品视频_欧美黄色一区二区三区_亚洲文字幕_在线观看美女av_国产黄在线 | 国产精品天堂AVAV在线_国产成人无码一区二区在线观看_隔着超薄肉丝袜做AV在线_涩涩涩综合在线亚洲第一_精品系列无码一区二区三区_在线黄色影院_九一快播_久久精品国产亚洲AV麻豆不卡 |