modbus4j使用(java)

java使用modbus4j示例如下岖食,特別注意:
如果想輪詢?nèi)プx數(shù)據(jù)扳缕,需要for循環(huán)調(diào)readHoldingRegistersTest(master,SLAVE_ADDRESS,0,100); 并且serialParameters.setStopBits(1); 修改為serialParameters.setStopBits(2);

package com.test.modbus;

import java.util.Arrays;

import com.serotonin.io.serial.SerialParameters;
import com.serotonin.modbus4j.ModbusFactory;
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.exception.ModbusInitException;
import com.serotonin.modbus4j.exception.ModbusTransportException;
import com.serotonin.modbus4j.msg.ReadDiscreteInputsRequest;
import com.serotonin.modbus4j.msg.ReadDiscreteInputsResponse;
import com.serotonin.modbus4j.msg.ReadHoldingRegistersRequest;
import com.serotonin.modbus4j.msg.ReadHoldingRegistersResponse;
import com.serotonin.modbus4j.msg.WriteRegistersRequest;
import com.serotonin.modbus4j.msg.WriteRegistersResponse;

/**
 * 通過串口解析MODBUS協(xié)議
 * @author cl2
 *
 */
public class TestModbusDemo {
    //設(shè)定MODBUS網(wǎng)絡(luò)上從站地址
    private final static int SLAVE_ADDRESS = 1;
    // 串行波特率
    private final static int BAUD_RATE = 9600;

    public static void main(String[] args) {
        SerialParameters serialParameters = new SerialParameters();
        // 設(shè)定MODBUS通訊的串行口
        serialParameters.setCommPortId("COM3");
        // 設(shè)定成無奇偶校驗(yàn)
        serialParameters.setParity(0);
        // 設(shè)定成數(shù)據(jù)位是8位
        serialParameters.setDataBits(8);
        // 設(shè)定為1個(gè)停止位
        serialParameters.setStopBits(1);
        // 設(shè)定端口名稱
        serialParameters.setPortOwnerName("Numb nuts");
        // 設(shè)定端口波特率
        serialParameters.setBaudRate(BAUD_RATE);

        // 創(chuàng)建ModbusFactory工廠實(shí)例
        ModbusFactory modbusFactory = new ModbusFactory();
        // 創(chuàng)建ModbusMaster實(shí)例
        ModbusMaster master = modbusFactory.createRtuMaster(serialParameters);

        // 初始化
        try {
            master.init();
            readHoldingRegistersTest(master,SLAVE_ADDRESS,0,100);

        } catch (ModbusInitException e) {
            e.printStackTrace();
        } finally {
            master.destroy();
        }
        
    }
    
    /**
    * 讀開關(guān)量型的輸入信號
    * @param master 主站
    * @param slaveId 從站地址
    * @param start 起始偏移量
    * @param len 待讀的開關(guān)量的個(gè)數(shù)
    */
    private static void readDiscreteInputTest(ModbusMaster master, int slaveId, int start, int len) {
    try {
        ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, start, len);
        ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request);
        if (response.isException())
            System.out.println("Exception response: message=" + response.getExceptionMessage());
        else
            System.out.println(Arrays.toString(response.getBooleanData()));
        }
        catch (ModbusTransportException e) {
            e.printStackTrace();
        }
    }

    
    
    /**
     * 讀保持寄存器上的內(nèi)容
     * @param master 主站
     * @param slaveId 從站地址
     * @param start 起始地址的偏移量
     * @param len 待讀寄存器的個(gè)數(shù)
     */
    private static void readHoldingRegistersTest(ModbusMaster master,
            int slaveId, int start, int len) {
        try {
            ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(
                    slaveId, start, len);
            ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master
                    .send(request);
            if (response.isException()) {
                System.out.println("Exception response: message="
                        + response.getExceptionMessage());
            } else {
                System.out.println(Arrays.toString(response.getShortData()));
                short[] list = response.getShortData();
                for(int i = 0; i < list.length; i++){
                    System.out.print(list[i] + " ");
                }
            }
        } catch (ModbusTransportException e) {
            e.printStackTrace();
        }
    }
    
    
    
     /**
     * 批量寫數(shù)據(jù)到保持寄存器
     * @param master 主站
     * @param slaveId 從站地址
     * @param start 起始地址的偏移量
     * @param values 待寫數(shù)據(jù)
     */
    public static void writeRegistersTest(ModbusMaster master, int slaveId, int start, short[] values) {
        try {
            WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);
            WriteRegistersResponse response = (WriteRegistersResponse) master.send(request);
            if (response.isException()){
                System.out.println("Exception response: message=" + response.getExceptionMessage());
            }
            else {
                System.out.println("Success");
            }
        }
        catch (ModbusTransportException e) {
            e.printStackTrace();
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末样勃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蓉驹,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揪利,死亡現(xiàn)場離奇詭異态兴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疟位,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門瞻润,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人甜刻,你說我怎么就攤上這事绍撞。” “怎么了得院?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵傻铣,是天一觀的道長。 經(jīng)常有香客問我祥绞,道長非洲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任蜕径,我火速辦了婚禮两踏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丧荐。我一直安慰自己缆瓣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布虹统。 她就那樣靜靜地躺著弓坞,像睡著了一般隧甚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渡冻,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天戚扳,我揣著相機(jī)與錄音,去河邊找鬼族吻。 笑死帽借,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的超歌。 我是一名探鬼主播砍艾,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巍举!你這毒婦竟也來了脆荷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤懊悯,失蹤者是張志新(化名)和其女友劉穎蜓谋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炭分,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桃焕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捧毛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片观堂。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖岖妄,靈堂內(nèi)的尸體忽然破棺而出型将,到底是詐尸還是另有隱情,我是刑警寧澤荐虐,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布七兜,位于F島的核電站,受9級特大地震影響福扬,放射性物質(zhì)發(fā)生泄漏腕铸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一铛碑、第九天 我趴在偏房一處隱蔽的房頂上張望狠裹。 院中可真熱鬧,春花似錦汽烦、人聲如沸涛菠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俗冻。三九已至礁叔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迄薄,已是汗流浹背琅关。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讥蔽,地道東北人涣易。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓寞奸,卻偏偏與公主長得像般渡,于是被迫代替她去往敵國和親凳鬓。 傳聞我的和親對象是個(gè)殘疾皇子嗤攻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)腺律,斷路器漏健,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評論 25 707
  • 1.1 資料 非凌,最好的入門小冊子金抡,可以先于一切文檔之前看,免費(fèi)腌且。 作者Antirez的博客梗肝,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,058評論 1 51
  • 1. 簡介 模塊是一個(gè)包含所有自定義的函數(shù)和變量的文件,其后綴名是.py 模塊可以被別的程序引入以使用該模塊中的函...
    Mr_ox閱讀 319評論 0 0
  • 直接的生活經(jīng)驗(yàn)是、 累積創(chuàng)作素材的最佳途徑 如何累積創(chuàng)作素材 最近常常聽到人們談?wù)撊绾卫鄯e創(chuàng)作素材精续。事實(shí)上這個(gè)問題...
    張維昌閱讀 773評論 1 3