1. 打开
char chDevCom[10] = “COM1”; // 串口号
int nBaudRate = 9600; // 波特率
char chParity = 'O'; // 校验码
int nDataBits = 8; // 数据位
int nStopBits = 1; // 停止位
modbus_t * pCtx = modbus_new_rtu(devCom, nBaudRate, chParity, nDataBits, nStopBits); // 新建连接对象
int nSlaveId = 1;
modbus_set_slave(pCtx , nSlaveId); // 设置从机号
int nRet = modbus_connect(pCtx ); // 连接
2.读取寄存器内容
/**********************************************/
// 功能: 读取寄存器内容
// 返回值: 读取到的字符个数
// 参数: destCh, destSh 读取到的结果
// addr 读取的寄存器地址
// funcCode 功能码
// size 读取的寄存器个数
/*********************************************/
int Read(unsigned char* destCh, unsigned short* destSh, int addr, int funcCode,int size)
{
int nRet = -1;
switch(funcCode)
{
case 0x01:
// 0x01:读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)?
// Reads the boolean status of bits and sets the array elements in the destination to TRUE or FALSE (single bits).
nRet = modbus_read_bits(m_ctx, addr, size, destCh);
break;
case 0x02:
// 0x02:读取输入状态 取得一组开关输入的当前状态(ON/OFF)
nRet = modbus_read_input_bits(m_ctx, addr, size, destCh);
break;
case 0x03:
// 0x03:读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值
nRet = modbus_read_registers(m_ctx, addr, size, destSh);
break;
case 0x04:
// 0x04:读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值
nRet = modbus_read_input_registers(m_ctx, addr, size, destSh);
break;
}
return nRet;
}
3.保存到寄存器
/**********************************************/
// 功能: 写寄存器内容
// 返回值: 保存到的字符个数
// 参数: destCh, destSh,value 保存的结果
// addr 保存的寄存器地址
// funcCode 功能码
// size 保存的寄存器个数
/*********************************************/
int Write(unsigned char* destCh, unsigned short* destSh, int value,int addr,int funcCode,int size)
{
int nRet = -1;
switch(funcCode)
{
case 5:
//0x05:强置单线圈 强置一个逻辑线圈的通断状态
nRet = modbus_write_bit(m_ctx, addr, value);
break;
case 6:
//0x06:预置单寄存器 把具体二进值装入一个保持寄存器
nRet = modbus_write_register(m_ctx, addr, value);
break;
case 15:
// 0x0F:强置多线圈 强置一串连续逻辑线圈的通断
// Write the bits of the array in the remote device
nRet = modbus_write_bits(m_ctx, addr, size, destCh);
break;
case 16:
// 0x10:控询(只用于484) 可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
// Write the values from the array to the registers of the remote device
nRet = modbus_write_registers(m_ctx, addr, size, destSh);
break;
}
return nRet;
}
4.释放资源
modbus_close(pCtx );
modbus_free(pCtx );