| 注冊(cè)| 產(chǎn)品展廳| 收藏該商鋪

行業(yè)產(chǎn)品

當(dāng)前位置:
湖南嶸晟時(shí)代自動(dòng)化科技有限公司>>技術(shù)文章>>GP擴(kuò)展SIO口通訊編程范例

GP擴(kuò)展SIO口通訊編程范例

閱讀:1233        發(fā)布時(shí)間:2021-1-12

             GP擴(kuò)展SIO口通訊編程范例

 Pro-face的GP2000系列(除GP2301,2501,2401H和2301H)觸摸屏有一個(gè)擴(kuò)展串行接口(COM2) ,這個(gè)擴(kuò)展串口通過(guò)D腳本程序的編寫(xiě)可以方便的實(shí)現(xiàn)GP與一些特殊設(shè)備間的通訊(RS232) 。
    下面是一個(gè)擴(kuò)展串口通訊的實(shí)例。這里我們進(jìn)行通訊的設(shè)備是GP-2500S與CHK-8D型電池巡檢儀(以下簡(jiǎn)稱巡檢儀)。
    1.通訊要求
    我們的目的是通過(guò)觸摸屏讀出巡檢儀檢測(cè)到的電池電壓信息。
    2.通訊設(shè)置
    巡檢儀有一個(gè)RS-485口,支持多種波特率。它的通訊格式為:異步,一位起始碼,八位數(shù)據(jù)位,一位停止位,無(wú)校驗(yàn),半雙工方式。
    首先,我們?cè)贕P的擴(kuò)展SIO設(shè)置中選擇和巡檢儀的通訊設(shè)置一樣的參數(shù)。設(shè)置方法如下:同時(shí)按住GP的任意三個(gè)角,進(jìn)入OFFLINE狀態(tài),依次進(jìn)入INITIALIZE,SETUP I/O,SETUP SIO,這里有GP的通訊設(shè)置,把它們?cè)O(shè)置成與巡檢儀相應(yīng)的格式即可。
    3.報(bào)文交換格式(代碼各項(xiàng)均為1字節(jié)HEX碼)
    上位機(jī)下發(fā)命令:
    EB 90 EB 90 巡檢儀機(jī)號(hào) 上位機(jī)號(hào) 03 00 C1 00 00 90 EB
    巡檢儀回復(fù):
    EB 90 EB 90 上位機(jī)號(hào) 巡檢儀機(jī)號(hào) 報(bào)文長(zhǎng)度(L)報(bào)文長(zhǎng)度(H) C2
    電池組電壓(1)電池組電壓(2)1#電池電壓(1) 1#電池電壓(2)
    2#電池電壓(1)2#電池電壓(2) …………N#電池電壓(1)
    N#電池電壓(2)代碼和(L) 代碼和(H) 90 EB
    巡檢儀機(jī)號(hào): 即機(jī)器的地址編號(hào),在CHK-8D型巡檢儀上設(shè)定,我們這里把它設(shè)為1號(hào)
    電池的節(jié)數(shù)N: 根據(jù)實(shí)際的電池節(jié)數(shù),在CHK-8D型巡檢儀上設(shè)定,我們這里設(shè)為103節(jié)
    4.D腳本語(yǔ)句說(shuō)明
    4.1 接收功能
    下面的命令被用于讀從擴(kuò)展口接收到的數(shù)據(jù)
    格式 IO_READ([p:EXT_SIO], LS Storage Address, Transer Byte)
    例子 IO_READ([p:EXT_SIO],[w:LS0100], 10)
    [p:EXT_SIO]表示接收數(shù)據(jù)
    [w:LS0100]這是存放接收數(shù)據(jù)的起始地址,接收數(shù)據(jù)的大小存放在LS0100,接收的數(shù)據(jù)從LS0101開(kāi)始存,10表示有10個(gè)字節(jié)存放在LS區(qū)(大傳送字節(jié)是6095)。
    4.2 發(fā)送功能
    下面的命令表示把要發(fā)送的數(shù)據(jù)寫(xiě)到擴(kuò)展口
    格式 IO_WRITE_EX([p:EXT_SIO], LS Storage Address, Transer Byte)
    例子 IO_WRITE_EX([p:EXT_SIO], [w:LS0100], 10)
    [w:LS0100]是要發(fā)送的數(shù)據(jù)開(kāi)始地址,10表示要發(fā)送10個(gè)數(shù)據(jù)。
    *注意:每一個(gè)傳送的是字節(jié),也就是說(shuō)傳送的是每一個(gè)字的低八位,同樣接收的數(shù)據(jù)也是一樣的。
    4.3 控制
    增加控制變量去清除發(fā)送和接收緩存器以及錯(cuò)誤狀態(tài),這個(gè)變量的屬性是只能寫(xiě)的。
    格式
    位 [c:EXT_SIO_CTRL**] **:00到15
    字 [c:EXT_SIO_CTRL]
    例如:控制字的內(nèi)容
    位 [c:EXT_SIO_CTRL00]=1
    字 [c:EXT_SIO_CTRL]=0x0007
    當(dāng)控制字的內(nèi)容被確定以后,它的處理過(guò)程按照這樣的次序來(lái)完成的,先清除錯(cuò)誤狀態(tài),然后清除接收緩存,再清除發(fā)送緩存。
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
   
   
   
    位 內(nèi)容
    04-15 保留
    03 1:清除接受延時(shí)
    02 1:清除錯(cuò)誤狀態(tài)
    01 1:清除接收緩存
    00 1:清除發(fā)送緩存
   
   
    4.4 狀態(tài)
    增加[EXT_eSIO_ISTAT]作為狀態(tài)變量,這個(gè)變量的屬性是只讀的。
    格式
    位 [s:EXT_SIO_STAT**] **:00到15
    字 [s:EXT_SIO_STAT]
    例如
    位 if([s:EXT_SIO_STAT00]==1)
    字 if(([s:EXT_SIO_STAT]&0x0000)<>0)
    字的內(nèi)容描述如下
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
   
   
   
   
    位 內(nèi)容
    15 0:沒(méi)有常規(guī)SIO協(xié)議
    1:有常規(guī)SIO協(xié)議
    14 0:沒(méi)有擴(kuò)展SIO協(xié)議
    1:有擴(kuò)展SIO協(xié)議
    04-13 保留
    03 0:正常
    1:接收錯(cuò)誤
    02 0:沒(méi)有接收到數(shù)據(jù)
    1:接收到數(shù)據(jù)
    01 0:正常
    1:發(fā)送錯(cuò)誤
    00 0:發(fā)送緩存有數(shù)據(jù)
    1:發(fā)送緩存沒(méi)有數(shù)據(jù)
   
   
    4.5 接收數(shù)據(jù)的大小
    這個(gè)屬性也是只讀的。
    格式 [r:EXT_SIO_RECV]
    例如 if([r:EXT_SIO_RECV]>=10)
    5.通訊實(shí)現(xiàn)
    5.1 硬件連接
    由于巡檢儀的通訊口是RS485,這里我們需要一個(gè)485/232的轉(zhuǎn)換器。9針的COM2口的管腳定義如下:
    針號(hào) 信號(hào)名
    1 CD 載波檢測(cè)
    2 RD 接收數(shù)據(jù)
    3 SD 發(fā)送數(shù)據(jù)
    4 ER 允許接收
    5 SG 信號(hào)地
    6 DR 數(shù)據(jù)準(zhǔn)備好
    7 RS 請(qǐng)求發(fā)送
    8 CS 清除發(fā)送
    9 RI/VCC 響鈴指示,+5V+5%,0.25A
   
    5.2 軟件設(shè)計(jì)
    首先,新建一個(gè)PRO/PB工程,PLC類型選擇Memory Link SIO type, 協(xié)議選擇Extend SIO Script,如下圖所示
    然后新建一個(gè)畫(huà)面,放置一些鍵盤(pán)輸入顯示,地址設(shè)為收到的電池電壓的地址。我們計(jì)算了總接受報(bào)文長(zhǎng)度為221個(gè)字節(jié),準(zhǔn)備放置到7000到7220的地址中。GP發(fā)送報(bào)文總長(zhǎng)度為13個(gè)字節(jié),準(zhǔn)備放置在6000到6012的地址中 。
    這些準(zhǔn)備完成后,下面就可以開(kāi)始D腳本編程了。如下所示:
    一個(gè)程序:每30秒發(fā)送一次報(bào)文給巡檢儀
   
    第二個(gè)程序:初始化
    其中[s:EXT_SIO_STAT14]為擴(kuò)展SIO狀態(tài)字的第14位,當(dāng)其值為1時(shí)表示擴(kuò)展SIO協(xié)議準(zhǔn)備好了。[c:EXT_SIO_CTRL]為擴(kuò)展SIO控制字,它的00,01,02位為1時(shí)分別清發(fā)送緩存,接收緩存,錯(cuò)誤信息。
    [b:020000]到[b:020004]為通訊步驟,當(dāng)初始化完成觸發(fā)[b:020001],執(zhí)行下一步。
    第三個(gè)程序:發(fā)送準(zhǔn)備
    這一步主要是把發(fā)送到巡檢儀的報(bào)文儲(chǔ)存到6000開(kāi)始的13個(gè)連續(xù)地址中去。完成后[b:020001]清零,[b:020002]置1,執(zhí)行下一步。
    第四個(gè)程序:發(fā)送子程序
    _ldcopy(databuf0, [w:6000], 13)是把6000開(kāi)始的13個(gè)地址中的數(shù)據(jù)放到databuf0這個(gè)串中。
    [s:EXT_SIO_STAT00]等于1表示發(fā)送緩存區(qū)為空。
    IO_WRITE_EX([p:EXT_SIO], databuf0, 13)為把databuf0的開(kāi)始13個(gè)數(shù)據(jù)通過(guò)擴(kuò)展口發(fā)送。
    第五個(gè)程序:接收子程序
    [s:EXT_SIO_STAT02]等于1表示接收數(shù)據(jù)準(zhǔn)備完畢。
    [r:EXT_SIO_RECV ]為接收數(shù)據(jù)長(zhǎng)度,為了保證完整接收巡檢儀傳過(guò)來(lái)的報(bào)文,我們首先判斷接收數(shù)據(jù)的長(zhǎng)度是否大于221。
    IO READ ( [p:EXT_SIO ], databuf1, 221)表示接收221個(gè)字節(jié)的數(shù)據(jù)放到databuf1中。
    _dlcopy ([w:7000], databuf1, 0, 221)是將databuf1中0位開(kāi)始的221個(gè)字節(jié)數(shù)據(jù)存放到[w:7000]開(kāi)始的地址中去。
    第六個(gè)程序:主程序
    [b:020002]等于1時(shí)開(kāi)始發(fā)送報(bào)文,發(fā)送完畢[b:020003]置1開(kāi)始接收數(shù)據(jù)。接收完判斷數(shù)據(jù)是否正確,正確的話[b:020004]置1,一次通訊完成。不正確的話[b:020003]重新置1,再收。
    這樣一個(gè)擴(kuò)展串口通訊程序就完成了,此后再對(duì)接收的數(shù)據(jù)進(jìn)行一些處理,即可得到我們所需的數(shù)據(jù)了。這是擴(kuò)展口通訊的一個(gè)實(shí)際應(yīng)用,大家可以參照此中的參數(shù)設(shè)置和思路,編寫(xiě)自己的擴(kuò)展口通訊程序。

收藏該商鋪

請(qǐng) 登錄 后再收藏

提示

您的留言已提交成功!我們將在第一時(shí)間回復(fù)您~
二維碼 意見(jiàn)反饋
在線留言