资源简介
ModBus软件开发实战指南PDF , 清华大学出版社,杨更更。着重讲述了如何快速入门并精通ModBus软件开发技术, 适用于初学ModBus通信协议的读者。包含重点内容标记以及纯手打的RTU模式下的源码。
代码片段和文件信息
#include
#ifndef _MSC_VER
#include
#endif
#include
#include
#include
#include “modbus.h“ //引用libmodbus库
/*The goal of this program is to check all major functions of libmodbus:
-write_coil
-read_bits
-write_coils
-write_register
-read_register
-write_registers
-read_registers
All these functions are called with random values on a address range
defined by the following defines.
*/
#define LOOP 1
#define SERVER_ID 17
#define ADDRESS_START 0
#define ADDRESS_END 99
/* At each loop the program works in the range ADDRESS_START to *ADDRESS_END
then ADDRESS_START + 1 to ADDRESS_END and so on.
*/
int main(void)
{
modbus_t *ctx;
int rc;
int nb_fail;
int nb_loop;
int addr;
int nb;
uint8_t *tab_rq_bits; //用于保存发送或接收的数据(下同)
uint8_t *tab_rp_bits;
uint16_t *tab_rq_registers;
uint16_t *tab_rw_rq_registers;
uint16_t *tab_rp_registers;
/*RTU*/
ctx = modbus_new_rtu(“COM3“ 19200 ‘N‘ 8 1); //创建一个RTU类型的容器
modbus_set_slave(ctx SERVER_ID); //设置从端地址
modbus_set_debug(ctx TRUE); //设置debug模式
if(modbus_connect(ctx) == -1)
{
fprintf(stderr “Connection failed: %s\n“
modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
/*Allocate and initialize the different memory spaces*/
nb = ADDRESS_END - ADDRESS_START; //计算需测试的寄存器个数
//以下申请内存块用以保存和接收各数据
tab_rq_bits = (uint8_t *)malloc(nb * sizeof(uint8_t));
memset(tab_rq_bits 0 nb * sizeof(uint8_t));
tab_rp_bits = (uint8_t *)malloc(nb * sizeof(uint8_t));
memset(tab_rp_bits 0 nb * sizeof(uint8_t));
tab_rq_registers = (uint16_t *)malloc(nb * sizeof(uint16_t));
memset(tab_rq_registers 0 nb * sizeof(uint16_t));
tab_rp_registers = (uint16_t *)malloc(nb * sizeof(uint16_t));
memset(tab_rp_registers 0 nb * sizeof(uint16_t));
tab_rw_rq_registers = (uint16_t *)malloc(nb * sizeof(uint16_t));
memset(tab_rw_rq_registers 0 nb * sizeof(uint16_t));
nb_loop = nb_fail = 0;
while(nb_loop++ < LOOP)
{
//从起始地址开始顺序测试
for(addr = ADDRESS_START; addr < ADDRESS_END; addr++)
{
int i;
//生成随机数用于测试
for(i = 0; i < nb; i++)
{
tab_rq_registers[i] =
(uint16_t)(65535.0 * rand() / (RAND_MAX + 1.0));
tab_rw_rq_registers[i] = ~ tab_rq_registers[i];
tab_rq_bits[i] = tab_rq_registers[i] % 2;
}
nb = ADDRESS_END - addr;
/*测试线圈寄存器的单个读写*/
rc = modbus_write_bit(ctx addr tab_rq_bits[0]); //写线圈寄存器
if(rc != 1 )
{
printf(“ERROR modbus_write_bit (%d)\n“ rc);
printf(“Address =%d value =%d\n“ addr tab_rq_bits[0]);
nb_fail++;
}
else
{
//写入之后再读取比较
rc = modbus_read_bits(ctx addr 1 tab_rp_bits);
if(rc != 1 || tab_rq_bits[0] != tab_rp_bits[0])
{
printf(“ERROR modbus_read_bits single (%d)\n“ rc);
printf(“adress = %d\n“ addr);
nb_fai
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 97503924 2018-10-11 17:08 ModBus软件开发实战指南\ModBus软件开发实战指南.pdf
目录 0 2018-10-11 17:18 ModBus软件开发实战指南\RTU模式源码(纯手打)\
文件 7725 2018-10-11 16:35 ModBus软件开发实战指南\RTU模式源码(纯手打)\TestRtuMaster.c
文件 1549 2018-10-11 17:00 ModBus软件开发实战指南\RTU模式源码(纯手打)\TestRtuSlave.c
目录 0 2018-10-11 17:19 ModBus软件开发实战指南\
相关资源
- 基于Modbus通信协议的串口通信程序
- 基于Modbus协议的工业自动化网络规范
- modbus调试工具包括服务器端和客户端
- 西门子S7-1214C与机器人走Modbus Tcp通信
- NI Labview Modbus 函数模块
- FreeRTOS和FreeMODBUS移植到STM32F407傻瓜教
- Modbus 协议中文版完整版
- freemodbus1.5移植modbusRTU到stm32f429igt6
- intouch,Modbus协议驱动
- 单片机STM32 MODBUS RTU通讯 功能码很全
- ModScan32modbus调试工具使用说明
- MODBUS协议中文版.pdf
- libmodbusmodbuspoll以及modbusslave工具
- STM32F103移植FreeModbus同时实现ModbusRTU和
- modbus通用读取电表数据源码,使用的
- Intouch modbus驱动
- Modbus TCP 通信程序 源代码
- Modbus调试工具(20180810前最新)汉化版
- ModbusRTU与松下PLC完整
- Modbus Rtu Slave从机demo实现串口通信
- modbus串口通讯程序,源程序
- DSP modbus rtu
- MODBUS从站模拟器支持Modbus tcp及Rtu.ra
- Modbus TCP和TCP通信测试工具
- stc89c51通过modbus协议与上位机通信
- Modbus_RTU.rar
- 三菱、西门子、欧姆龙、松下PLC、单
- 西门子MAG8000电池流量计MODBUS RTU 通讯
- 自己做的modbus的调试工具
- delphi7实现的MODBUS RTU 标准协议 485 源码
评论
共有 条评论