无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

首頁(yè) 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
中華工控網(wǎng)首頁(yè)
  P L C | 變頻器與傳動(dòng) | 傳感器 | 現(xiàn)場(chǎng)檢測(cè)儀表 | 工控軟件 | 人機(jī)界面 | 運(yùn)動(dòng)控制
  D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場(chǎng)總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測(cè)控 | 工業(yè)安全
  電 源 | 嵌入式系統(tǒng) | PC based | 機(jī)柜箱體殼體 | 低壓電器 | 機(jī)器視覺
如何用威綸通觸摸屏的腳本語(yǔ)言編寫CRC-16/XMODEM校驗(yàn)函數(shù)
MOTIONTEK
收藏本文     查看收藏

版權(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

        筆者最近手上有個(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)單了,在遇到問題的時(shí)候,可能無(wú)法從指令的說(shuō)明手冊(cè)上找到答案,更多的是自己摸索。比如
自己寫子函數(shù)時(shí)就遇到狗血的問題
       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í)根本問題,是如何將一串?dāng)?shù)據(jù)傳給子函數(shù),子函數(shù)將傳過來(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中的問題,數(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ù)的問題。操作如下。
        定義  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)于這方面的資料很少,幾乎沒有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],則通過下面循環(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ì)算


 

狀 態(tài): 離線

會(huì)員簡(jiǎn)介

會(huì)員代號(hào): semonping
聯(lián) 系 人: 施勇
電  話: 020-62840410
傳  真:
地  址: 簡(jiǎn)上工業(yè)區(qū)
郵  編: 510515
主  頁(yè):
 
 
 
立即發(fā)送詢問信息在線聯(lián)系該技術(shù)文摘廠商:
用戶名: 密碼: 免費(fèi)注冊(cè)為中華工控網(wǎng)會(huì)員
請(qǐng)留下您的有效聯(lián)系方式,以方便我們及時(shí)與您聯(lián)絡(luò)

關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報(bào)
工控網(wǎng)客服熱線:0755-86369299
版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved

无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
91精品日本| 久久中文欧美| 在线视频亚洲欧美中文| 午夜日韩影院| 日韩在线精品| 国产精品一区二区三区美女| 私拍精品福利视频在线一区| 欧美综合社区国产| 日韩中文字幕一区二区三区| 免费看av不卡| 美女国产一区二区三区| 亚洲一区国产一区| 精品免费av在线| 成人国产精品久久| 国产精品伊人| 日韩三级久久| 免费观看日韩电影| 蜜桃tv一区二区三区| 国产精品色在线网站| 免费高清在线一区| 欧美精品黄色| 欧美成人久久| 97精品国产| 国产精品主播| 国产精品久一| 97se亚洲| 国产videos久久| 亚洲高清影视| 国产福利亚洲| 国产情侣久久| 欧美黄页在线免费观看| 日韩精品社区| 自拍自偷一区二区三区| 午夜欧美理论片| 精品日韩毛片| 欧美日韩日本国产亚洲在线 | 久久国产麻豆精品| 亚洲一区区二区| 亚洲一区二区三区高清| 久久亚洲影院| 亚洲不卡视频| 国产亚洲精品美女久久| 国产精品毛片久久久| 日韩专区视频网站| 青青国产精品| 精品72久久久久中文字幕| 丰满少妇一区| 日本а中文在线天堂| 999精品一区| 久久高清国产| 国产日韩1区| 麻豆精品在线播放| 国产精品mv在线观看| 免费在线亚洲欧美| 国产资源在线观看入口av| 色综合狠狠操| 国产综合精品| 欧美一区二区三区久久| 国产成人调教视频在线观看| 欧美三级精品| 亚洲一区二区动漫| 久久av日韩| 久久亚洲国产精品尤物| 精品久久网站| 亚洲精品va| 亚洲久久在线| 精品国产亚洲一区二区在线观看| a日韩av网址| av一区二区高清| 亚洲天堂日韩在线| 久久精品伊人| 国产亚洲毛片| 国产精品久久久久久模特| 精品美女在线视频| 9久re热视频在线精品| 麻豆久久一区二区| 欧美日韩国产高清| 清纯唯美亚洲综合一区| 久久人人97超碰国产公开结果| 久久午夜精品一区二区| 精品久久不卡| 日韩激情中文字幕| 99久久精品费精品国产| 欧美日韩调教| 亚洲神马久久| 日韩久久视频| 日本va欧美va精品| av亚洲在线观看| 中文字幕高清在线播放| 日韩欧美中文字幕一区二区三区| 国产一区二区亚洲| 国产一级成人av| 不卡一区2区| 久久精品国产在热久久| 亚洲最新av| 激情欧美国产欧美| 精品视频久久| 日韩av网站免费在线| 激情久久婷婷| 日韩综合在线| 精品资源在线| 国产精品宾馆| 日本久久一区| 亚洲在线国产日韩欧美| 久久婷婷丁香| 免费看av不卡| 日韩精品永久网址| 欧美日本三区| 国产欧美日韩免费观看| 视频一区视频二区中文| 给我免费播放日韩视频| 久久国内精品视频| 亚洲美女久久| 国产精品日韩| 国产视频一区在线观看一区免费| 日韩欧美少妇| 久久香蕉国产| 久久国产亚洲精品| 午夜免费一区| 亚洲一本视频| 欧美91福利在线观看| 伊人久久高清| 成人免费网站www网站高清 | 一区久久精品| 国产一区久久| 亚洲精品1区2区| 香蕉成人久久| 亚洲一区有码| 欧美日韩伊人| 欧美www视频在线观看| 麻豆网站免费在线观看| 99精品视频精品精品视频| 婷婷精品视频| 日韩视频一区| 自拍自偷一区二区三区| 日韩精品福利一区二区三区| 亚洲乱亚洲高清| 青青草91视频| 久久精品国产免费| 久久九九精品| 欧美综合国产| 蜜桃久久久久| 国产综合视频| 亚洲欧美在线专区| 国产精品一区二区美女视频免费看| 国产精品久久亚洲不卡| 久久久久蜜桃| 91久久中文| 欧美一区精品| 国产成人免费av一区二区午夜| 国产一区二区三区日韩精品| 韩国久久久久久| 国产精品毛片| 国产福利一区二区精品秒拍 | 国产精品久久乐| 亚洲欧洲高清| 欧美一级专区| 国产精品久久观看| 中文在线不卡| 高清一区二区三区av| 在线亚洲精品| 久久精品欧洲| 亚洲日韩中文字幕一区| 欧美韩日一区| 亚洲乱码一区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产91在线播放精品| 欧美午夜不卡影院在线观看完整版免费| 日韩在线播放一区二区| 福利精品在线| 亚洲免费毛片| 99pao成人国产永久免费视频| 久久精品国产99| 日本国产欧美| 国产精品视区| 欧美日韩精品在线一区| 欧美国产专区| 日韩精品亚洲专区在线观看| 日韩av免费| 精品国产一区二| 日本一区二区中文字幕| 国产精品伦理久久久久久| 免费久久99精品国产| 国产 日韩 欧美 综合 一区| 亚洲午夜免费| 国产中文一区| 国产精品免费精品自在线观看| 美女网站一区| 秋霞国产精品| 欧美一区91| 日韩精品亚洲一区二区三区免费| 欧美亚洲国产日韩| 99热精品在线| 亚洲午夜av| 九九九精品视频| 久久精品国产久精国产爱| 99国产精品99久久久久久粉嫩| 91精品蜜臀一区二区三区在线| 日韩精品亚洲专区在线观看| 亚洲午夜av|