PLC和Modbus协议

由于工作的原因,一直在研究和PLC通讯的事情。我们采购的是三菱5u的PLC,内置网口,最开始用的是三菱的SLMP协议的,但是我真的是太懒了,感觉自己解析报文协议太麻烦,各种转换都太浪费精力了。偶然的一次机会,和安川PLC通讯,走了一回Modbus TCP协议,然后就欲罢不能,简直是太方便了。

我用的是开源libmodbus库,自己编译了一下,生成动态库之后调用起来毫无压力。

我也找了一些C#版本的,easyModbus,看起来也还不错。

可以参考参考别人的翻译啥的。

// 初始化Modbus
// 1.Modbus TCP方式
modbus_t * _ctx = modbus_new_tcp("192.168.0.1", 8000);
modbus_set_slave(_ctx, SERVER_ID);
if (modbus_connect(_ctx) == -1)
{
    fprintf(stderr, "Unable to create the libmodbus context\n");
    modbus_free(_ctx);
}

// 2.Modbus RTU串口方式
_ctx= modbus_new_rtu("\\\\.\\COM8", 115200, 'N', 8, 1);
if (ctx == NULL)
{
    fprintf(stderr, "Unable to create the libmodbus context\n");
    return -1;
}

// 读取一个寄存器的值
uint16_t * tab_reg = NULL;
tab_reg = (uint16_t *)malloc(MODBUS_REGISTER * sizeof(uint16_t));
memset(tab_reg, 0, MODBUS_REGISTER * sizeof(uint16_t));
int rc = modbus_read_registers(m_ctx, nRegisterID, MODBUS_REGISTER, tab_reg);
if (rc == -1)
{
    free(tab_reg);
    m_strErr = CString(modbus_strerror(errno));
    return false;
}
nValue = int(*tab_reg);
free(tab_reg);

我把自己编译好的Modbus库放在 https://gitee.com/luutry/resource.git,有兴趣的可以下载看看。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值