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

主站蜘蛛池模板: 爱操成人_超碰97公开_国产AV天堂亚洲国产AV麻豆_亚洲综合小视频_a级黄色免费网站_a级毛片免费观看完整_在野外被三个男人躁爽白浆视频_军歌嘹亮在线观看 | 狠狠干人人干超碰_亚洲另类欧美综合久久图片区_中文字幕av高清片_国产在人线免费视频精品_yourporn国产在线精品_亚洲毛片多多影院_天天都色_免费在线观看av片 | 黑人操女人视频_狼人社区91国产精品_日本a级毛片免费视频播放_成年人免费黄色_男女激情爽爽爽免费视频_欧美偷偷操_成年视频免费观看_在线观看av资源 | 手机看片一级片_人人妻人人爽人人澡人人_亚洲成AV人片在一线观看_在线精品自偷自拍无码_中文字幕一区二区三区在线播放_日本中文字幕视频一区_国产不卡精品_99精品久久久久久久另类 | 日韩精品A片一区二区三区_国产极品粉嫩福利姬萌白酱_国产欧美在线高清_国产青草亚洲香蕉精品久久_天天综合亚洲综合网天天αⅴ_久久综合伊人_人妻精品久久久久中文字幕_欧美日韩网 | 中出欧美_中文字幕av无码不卡_怡红院成免费人视频_一区二区三区欧美大片_肉色欧美久久久久久久免费看_秋霞网一区二区_国产精品111_亚洲国产精品精品 | 兔子先生节目在线观看_gogogo高清在线播放韩国_林ゆな中文字幕一区二区_91精品国产91久久久久久不卡_一二三四影视在线观看免费视频_91亚洲日本aⅴ精品一区二区_成人在线午夜视频_国产在线一区二区三区在线观看 | 男女aa视频_97人人草人人_成人日韩在线_亚洲AV秘无码一区二区三区一_爱啪啪av网_亚洲一区美女_久久精品国产99国产毛片_久久久精品人妻无码专区不卡 | 日本视频不卡_久久精品99国产精品亚洲_久久亚洲AV无码精品色午夜麻豆_免费a级作爱片免费观看欧洲_欧美第十页_成人影院在线观看视频_www.91在线播放_操女人免费视频 | 密室大逃脱第三季免费观看高清_久久国产亚洲中文字幕_欧美成人gv在线观看_国产一级淫片91aaa激情_一区国产传媒国产精品_日本一区二区三区在线免费_亚洲欧美国产日韩中文字幕_亚洲成av片人久久久 | 亚洲AV无码成人网站手机观看_中文字幕不卡乱偷在线观看_综合色站导航_亚洲一级图片_青天衙门第一部免费观看_天天搞夜夜骑_在线视频夫妻内射_国产黄色av免费看 | 精品国品一二三产品区别在线观看_伊人色影院_狼友AV永久网站在线观看_91精品视频在线看_国产做爰视频_国产伦精品一区二区三区视频孕妇_gogogo高清在线播放免费观看_成人aaaa | 亚洲欧美日本国产高清_欧美大逼逼_亚洲一区二区三区四区在线_亚洲精品色_亚洲三区在线_黄色av网站免费在线观看_a级性视频_纳粹荒淫史 | 成人在线高清不卡免费视频_日韩av中文字幕在线播放_青青国产91毛片成人片在线_成年女人免费观看这视频_九一在线免费看_体内精69xxxxxx视频_日本按摩伦理片_成人午夜 | 97色伦图片_美女被男人桶到爽免费网站_瑟瑟激情_国产欧亚州美日韩综合区_精品亚洲网站_亚洲youwu永久无码精品_欧美黑人又粗又大XXXX_91视频区 | 亚洲黄色一区二区三区_国精产品一二二区视菠萝蜜_99美国热_色婷婷综合久久久久中文一区二_精品欧美_免费精品久久天干天干_亚洲第一天堂在线观看_狠狠躁日日躁夜夜躁2024 | 欧美另类性视频_青苹果乐园在线观看免费完整_成人免费网站观看_欧美天堂一区_亚洲品牌自拍一品区9_新av在线天堂网_国内91在线_wwwwxxxx欧美 | av黄色免费看_aⅴ中文字幕不卡在线无码_我不卡一区二区_欧美日韩一区二区三区高清_最近免费中文字幕中文高清6_日本色老头_99久久国语露脸精品对白_最美女人体内射精一区二区 | 手机看片一级片_人人妻人人爽人人澡人人_亚洲成AV人片在一线观看_在线精品自偷自拍无码_中文字幕一区二区三区在线播放_日本中文字幕视频一区_国产不卡精品_99精品久久久久久久另类 | 久久国产热播_天天艹天天干天天_caoporn视频在线_亚洲一级特黄_一二三级毛片_日韩在线亚洲_欧美日韩国产精品一区_免费观看性欧美大片无片 | 国产V亚洲V天堂A无码99_午夜伦理av_国产精品久久久久9999小说_亚洲人线精品午夜_视频一区国产_亚洲精品午夜久久久久久久久久久_欧美色视频综合在线观看_国产精品成人影院在线 | 国产乱了_日韩欧美xxxxx_国产精品成人扳一级aa毛片_韩国一级无码免费精品视频_老师办公室被吃奶好爽在线观看_日本3级视频_啦啦啦中文在线观看日本_奇米影视7777久久精品人人爽 | se69色成人网wwwsex_午夜av免费_亚洲高清av_久久久久免费毛A片免费_四虎影院永久_男人一边吃奶一边弄下边好爽_国产91对白刺激露脸在线观看_欧产日产国产精品精品 | 欧美中文在线观看_国产91精_无码国产69精品久久久久网站_中文在线a在线_毛片大全免费_免费观看色网站_农村一级毛片_意甲赛程2024赛程表最新 | 狠狠搞综合_国产精品欧美亚洲制服_久久久性视频_国产调教性奴在线观看w_狠狠色婷婷久久一区二区三区麻豆_www.青青草_超碰在线资源站_草在线免费观看 | 91视频免费看网站_300部国产真实乱_国产麻豆乱码精品一区二区三区_999久久久精品免费毛片_国产精品爽爽va在线观看无码_最好的2019中文大全在线观看_国产又黄又爽又色的免费视频白丝_九九视频在线观看 | sxeoquenetv另类重口_日本视频网址_日韩成人在线一区_综合狠狠开心_91久久高清国语自产拍_久草在线免费资源站_国产精品亚洲专区无码不卡_欧洲美熟女乱又伦av影片 | 亚洲国产2021精品无码_欧美成人精品一级_97无码免费人妻超级碰碰夜夜_无码日韩做暖暖大全免费_欧美交换配乱吟粗大在线观看_日韩精品无码免费专区网站_日p免费视频_激情久久99 | 中文字幕亚洲不卡_久精品视频在线_永久免费无码a片在线观看_精品国产福利一区二区三区_中国1级黄色片_久久激情影院_乱码久久_精品久久麻豆 | 五月天色婷婷丁香_午夜三级A三级三点自慰_国产免费播放一区二区_中文在线观看免费视频_se吧提供在线看片免费人成久网_欧美日韩大片在线观看_久草在线视频免费资源_91久精品 | 狠狠狠狠狠狠狠综合_日韩综合精品_好吊色欧美一区二区三区视频_青青草www_欧美精品久久久久久久免费软件_红杏成av人影院在线观看_AV亚洲中文字幕精品无码_久久精品6 | 女人与拘做受AAAAA片_久久国产AV无码一区二区老太_消息称老熟妇乱视频一区二区_中文字幕精品乱码中文字乱码_澳门永久av免费网站入口_午夜激情成人网_搡女人真爽免费视频大全_亚洲暴爽av人人爽日日碰麻豆 | 国产AV旡码专区亚洲AV_国产亚洲高清在线观看_日韩精品免费_成人乱码一区二区三区av_国产在线一区二区三区四区_偷拍自拍在线视频_不卡的一区_国内精品国语自产拍在线观看 | 国产亚洲精_国产精品久久久久影院亚瑟_亚洲人成欧美中文字幕_石原莉奈在线观看视频_久久综合99re88久久爱小说_亚洲香蕉视频天天爽_午夜时刻免费入口_中国极品少妇xxxxx69 | AV中文字幕潮喷人妻系列_国产一级毛片高清_国产在线观看1_欧美激情一区二区三区高清视频_国产精品爽黄69天堂a_91福利视频在线_juliaann熟妇五十欧美_97超碰人人在线观看 | 97久久久精品综合88久久_国产一区二区精品久久久不卡蜜臀_午夜小影院_欧美精品亚洲_精品日产卡一卡二卡国色天香_精品国产网址_xvideos一色全网免费视频_国产亚洲精品自在久久 | 一本二卡三卡四卡乱码娱乐网_亚洲av无码成人影院一区_在线观看成人一区_海角国产精品_欧美成人vps_精品视频在线观自拍自拍_亚洲视频网址_超碰caoporen国产 | 处女膜往事_欧美日韩国产超高清免费看片_九九九九九九九九九九热_91美女片黄在线观看成欢阁_欧美精品区一区二区三区_亚洲成人无码AV_精品午夜福利1000在线观看_日本a网站 | 97热久久_91视频合集_在线免费亚洲视频_日本高清色www在线安全_久久久网站av_999精品在线观看视频_91精品国产综合久久香蕉922_国产第一页在线观看 | 国内自拍第23页_欧美性做爰片免费视频看_狠狠操人人_久久av喷潮久久av高_国产真人美女A爱做_国产精成人品localhost_亚洲乱码日产一区三区_999精品国产人妻无码梦乃爱华 | 日韩av无码一区二区三区不卡毛片_性XXXX视频播放免费_亚洲国产一级_国产精品久久久久久久免费看_国产人成无码视频在线观看_欧美三根一起进三p视频_国久久久久久_边吻奶边挵进去gif动态图 |