⑴ 求助 给个modbus rtu协议的完整代码 最好附有详细解释 初学者 谢
ModBus常用功能码 (功能码为10进制) 01 READ COIL STATUS 读线圈寄存器 02 READ INPUT STATUS 读状态寄存器03 READ HOLDING REGISTER 读保持寄存器04 READ INPUT REGISTER 读输入寄存器 05 WRITE SINGLE COIL 写单线圈寄存器 06 WRITE SINGLE REGISTER 写单保持寄存器15 WRITE MULTIPLE COIL 写多线圈寄存器16 WRITE MULTIPLE REGISTER 写多保持寄存器
移植的可能性很小,要写mos的从站程序,
要有modbus通信协议才能编程序??
⑶ 工程上用到了MODBUS tcp 通讯,原来用过MODBUS RTU的协议,不知道他们的主要区别,或者谁有相应的源代码
Modbus rtu和Modbus tcp两个协议的本质都是MODBUS协议,都是靠MODBUS寄存器地址来交换数据;
但所用的硬件接口不一样,Modbus
RTU一般采用串口RS232C或RS485/422,而Modbus TCP一般采用以太网口。
现在市场上有很多协议转换器,可以轻松的将这些不同的协议相互转换 如:Intesisbox可以把modbus rtu转换成Modbus
tcp实际上Modbus协议包括ASCII、RTU、TCP。
标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式。
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验.
ModbusTCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
TCP和RTU协议非常类似,只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。
⑷ vs2008实现modbus rtu通讯,代码如下,报错如图所示:
1、RTU模式时地址(03,十六进制)长度是1个字节,ASCII模式时地址长度是2个字节(30、33,ASCII码)。设备即使支持ASCII、RTU两种方式,但在设备调试时必须选定一种模式,这样设备就根据选定的模式,区分是RTU数据帧还是ASCII数据帧而相应地处理。
2、RTU模式要求帧消息的间隔时间大于等于3.5字符时间,这是在应用层上处理的,物理层上的电平变化只是根据应用层的动作随之变化。我们知道,串口通讯的核心是通用异步接收/发送装置(UART),它需要发/收双方指定相同的波特率/数据位/校验位/停止位等通讯参数,才可以正确解调出一个字节数据。若一个RTU数据帧有很多个字节,UART就是一个一个字节地连续解调并存到缓冲区中。若发送方发送2个数据帧的间隔很短,接收方的UART就可能无法判断而当成一个数据帧,所以要求间隔时间不小于3.5字符时间。
⑸ 求 基于java的Modbus/TCP协议 源代码
public static void TestModbus() throws Exception{
IpParameters params = new IpParameters();
params.setHost("localhost");//地址
params.setPort(502);//端口
ModbusFactory factory = new ModbusFactory();
ModbusMaster master = factory.createTcpMaster(params, true);
// 初始化
try {
master.init();
readHoldingRegistersTest(master,1,0,3);
} catch (ModbusInitException e) {
e.printStackTrace();
} finally {
master.destroy();
}
}
public static void main(String[] args) {
try {
TestModbus();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private static void readHoldingRegistersTest(ModbusMaster master,
int slaveId, int start, int len) {
try {
// ReadInputRegistersRequest request = new ReadInputRegistersRequest(
// slaveId, start, len);
// ReadInputRegistersResponse response = (ReadInputRegistersResponse) master
// .send(request);
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 {
ByteQueue byteQueue= new ByteQueue(12);
response.write(byteQueue);
System.out.println(byteQueue);
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();
}
}
⑹ C#的modbus的代码怎么写
先要做就是SOCKET客户端与设备建立连接,认为有一台服务器,开了SOCKET服务在哪里。所以如下代码就水到渠成了。
设备连上以后,下一步当然就是读取数据。Modbus的基本原理就是程序向设备请求,需要读取哪个数据,设备就会返回相应的数据。
⑺ 求c语言编程的Modbus TCP源代码
从机的可以用freemodbus,我用过RTU的,很好用。
TCP的没用过,但freemodbus的代码格式很清晰,移植起来很简单。
http://www.modbus.org/tech.php
另外可以去MODBUS的网站上找找,看有没有合适的库可以用。
⑻ 一套modbus通信代码可以卖多少钱
应该有几种可能:1、电能表本身具有通讯功能,那么通讯功能在表出厂的时候已经写入程序里,那么用户通过电表的通讯接口,就可以读取电表内数据,上位机软件通讯协议必须与电表通讯协相同;2、电能本身无通讯功能,用户提出电表需要带通讯功能,那么根据用户是否对通讯协议和接口有要求,若无要求,可自行采用何种通讯协议,例如:MODBUS、103、CDT等标准协议,也可自行开发协议,那么在出厂前也要通讯功能写入电表程序;3、还有一种情况就是上位机厂家提出具体通讯协议,那么电表厂家就需要根据上位机厂家提现出的协议进行通讯功能开发;总之,带通讯功能的电表其通讯功能在出厂前都写入电表程序里,同时电表内部还需要增加通讯芯片等元件,通讯接口有RS232或RS485接口。
⑼ 哪位朋友有modbus通讯协议编写成C++代码,指导一下
发送报文的数组当然是byte数组,至于如何组织数据,首先要定义好需要支持的命令;
其次,用通用的通信测试软件,验证你的命令,像格西烽火之类的软件,自定义功能比较强,花在测试验证的时间少一点;
再次,就是把验证好的命令填入代码。
⑽ 求vb写的modbus rtu测试程序源码
用VB编写的MODBUS_RTU通讯协议源程序_图文_网络文库
VB编写的Modbus RTU协议通讯源程序-系统集成代码类资源-CSDN下载