亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4905 | 回復(fù): 3
打印 上一主題 下一主題

[驅(qū)動(dòng)] 精通modbus協(xié)議的高手請進(jìn) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-02-14 17:25 |只看該作者 |倒序?yàn)g覽
大家好!
我正在做一個(gè)嵌入式設(shè)備通過rs485硬件接口控制modbus設(shè)備的設(shè)計(jì),現(xiàn)在遇到一些問題,現(xiàn)在我詳細(xì)的描述一下:
1、我的原始設(shè)備(就是嵌入式設(shè)備)是一個(gè)數(shù)據(jù)集中器,上的是VxWork系統(tǒng),由于接口不是很夠,現(xiàn)在計(jì)劃通過外接一個(gè)ADAM 4055這么一個(gè)擴(kuò)展模塊,搭建一個(gè)modbus的網(wǎng)絡(luò)環(huán)境,其連接原理圖如附件所示。
2、現(xiàn)在主要的問題是通過C、C++編程,是嵌入式設(shè)備能夠與ADAM4055建立起控制關(guān)系,ADAM4055也有自己內(nèi)部的命令,我也仔細(xì)的查看了modbus rtu的命令格式描述及常見的功能碼等:
格式
從機(jī)地址 功能碼 寄存器地址 設(shè)置值 CRC 校驗(yàn)
功能碼(HEX)        名稱        作用
01        讀線圈狀態(tài)        讀離散輸出位
02        讀輸入狀態(tài)        讀離散輸入位
03        讀保持寄存器       
04        讀輸入寄存器        讀16位寄存器,常用于讀取整數(shù)或者浮點(diǎn)數(shù)
05        寫單個(gè)線圈        寫數(shù)據(jù)使線圈On/OFF
06        寫單個(gè)寄存器        16位格式寫數(shù)據(jù)
08        回路診斷        檢測通訊端口
15        寫多個(gè)線圈        寫數(shù)據(jù)使多個(gè)線圈ON/OFF
16        寫多個(gè)寄存器        16位格式寫數(shù)據(jù)


但是我始終沒有找到ADAM命令與這個(gè)協(xié)議通信格式的聯(lián)系方式,我的編程實(shí)現(xiàn)如下:
        printf("Routine is running InitADAMModule()...\n");
//        char chCommand[]={'%','0','A','0','A','4','0','0','6','0','4',0x0d};   這ADAM內(nèi)部的命令,以回傳結(jié)束
        fd_set Rs485Set;
        FD_ZERO(&Rs485Set);
        FD_SET(rs485Fd,&Rs485Set);
        struct timeval myTimeOut;
        myTimeOut.tv_sec=5;   //5s
        myTimeOut.tv_usec=0;
        char chCommand[]={'$','0','A','F',0x0d};
        int iTmp=0;
        printf("Read the return of command $AAF...\n");
        iTmp=rs485_write(rs485Fd,(Byte*)&chCommand,strlen(chCommand));
        printf("rs485_write return bytes :%d\n",iTmp);

        if((select(rs485Fd+1,&Rs485Set,NULL,NULL,&myTimeOut))!=0)
        {
                printf("Read the return of command $AAF...\n");
                char readbuf[50]={'0'};
                int iRead=rs485_read(rs485Fd,(Byte*)readbuf,50);
                printf("rs485_read return bytes :%d %s\n",iRead,readbuf);
        }
        else
                printf("outtime.\n");
        return 0;


但是,打印一直是outtime。請各位高手指導(dǎo)一下,我該怎么實(shí)現(xiàn)與這個(gè)擴(kuò)展設(shè)備的通信,以及怎么將這個(gè)擴(kuò)展設(shè)備的命令正確的送達(dá)!若能指導(dǎo),我將不勝感激。謝謝

ModBus連接圖.JPG (50.47 KB, 下載次數(shù): 111)

ModBus連接圖.JPG

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-02-15 08:38 |只看該作者
沒玩過Modbus,樓主可以先確認(rèn)好 “從機(jī)地址 功能碼 寄存器地址 設(shè)置值 CRC 校驗(yàn)”這些東西發(fā)送的正確否。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-02-27 11:25 |只看該作者
modbus 不是有個(gè) c語言的 庫的嗎?

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-05-06 16:09 |只看該作者
建議你先用modbus poll 和 modbus slave將你的設(shè)備調(diào)試好,然后看通訊的數(shù)據(jù)。我看你直接發(fā)送的chCommand是不符合modbus RTU協(xié)議的。其實(shí)modbus有開源的軟件,項(xiàng)目是freemodbus,你可以下載下來,參考一下。個(gè)人不建議直接發(fā)送數(shù)據(jù)給modbus設(shè)備,最好把modbus移植到自己的系統(tǒng)中。


專注智能數(shù)字傳感器,提供數(shù)據(jù)采集、無線傳輸、數(shù)據(jù)存儲(chǔ)
上海左岸芯慧電子科技有限公司
www.zaxh.com.cn
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP