Modbus Master如何读取从站的数据

发布网友

我来回答

2个回答

懂视网

一、公共功能码定义

 技术分享图片

二、能读取的数据类型

1.bit类型,比如01功能码,读到的就是位的状态,是ON 还是OFF,也就是对应着0或1。

2.byte类型,比如03功能码。

3.short类型,比如03功能码。

4.int32类型。也还是比如03功能码。

 

三、整数型和小数型的转换等

1.Modbus协议进行通信的时候,所有的数据都是以整数表示,因此,实际的数据,和接收到的数据,还有有一定的差异的,需要乘以一定的比例系数。

2.在接收到的数据进行转换的时候,因为产家的不同,因此会有小数点后面的精度也不一样,因此还需要做一定的精度转换。

 

四、界面设计

技术分享图片

 

五、通信测试

1.打开Modbus Slave,设置通信方式为Modbus RTU over tcp/ip,端口设置为502,配置功能码为0x03.设置相应寄存器的数据。

技术分享图片

设置寄存器的值

技术分享图片

设置需要读取数据的IP信息

技术分享图片

 四、工具下载链接

链接:http://download.csdn.net/download/dwx1005526886/10135013

 

Modbus通用数据读取工具设计及使用

标签:还需要   方式   csdn   端口   blog   界面设计   协议   nbsp   下载   

热心网友

其实没有必要这么繁琐的,C#添加Modbus引用之后,可以使用Modbus.Utility命名空间里面有一个ReadHoldingRegister的方法,使用这个方法可以直接读取设备寄存器地址里面的数据,再把数据对应的高低位、百位组合一下就可以显示出下位机屏幕上的数据,但前提是你要有你的设备的寄存器地址详细说明,至于Modbus引用之类的,去网上搜一下NModbus Sample可以下载到Modbus协议在编程里面的详细使用方法,祝你好运!追问我试验了用ReadHoldingRegister的方法,但是没成功。
public Form1()
{
InitializeComponent();
iSlaveHandle = axMbSlaveV71.ConnectTCP(502);
}
我用下面的语句来读取的。对方说给我的数据从地址800开始。
short slaveNodeAddress=1;
short data=0;
axMbSlaveV71.ReadModbusRegister(slaveNodeAddress, 3, 800 + i, ref data);

追答不是你写的这样的,是:
ModbusSerialMaster tt = ModbusSerialMaster.CreateRtu(this.SP_COM);
ushort[] read1 = tt.ReadHoldingRegisters(deviceID1, startAddress1, addressLength1);
string Data_1 += ModbusUtility.GetSingle(read1[23], read1[22]).ToString() ;
textBox1.Text=Data_1;
我这样就可已读到数据了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com