C# easyModbusTCP断线重连和线圈读取

一、实例化一个TCP连接

TCP连接只需要IP地址和端口号。我用的是easymodbus这个通讯库

ModbusClient client = new ModbusClient(ip, port);
client.Connect();

二、线圈读取

这边我整理了一下easymodbus线圈用到的几个方法。

ReadCoils
功能码:0x01 (读线圈寄存器)
功能:读取输出线圈状态
发送数据 startIndex(开始位), endIndex(停止位)

WriteSingleCoil
功能码:0x05 (写单个线圈寄存器)
功能:写入单个输入线圈状态
发送数据类型 startIndex(开始位), value(布尔值 01)

ReadDiscreteInputs
功能码:0x02 (读离散输入寄存器)
功能:读取输入线圈状态
发送数据类型 startIndex(开始位), endIndex(停止位)

WriteMultipleCoils
功能码:0x0F (写多个线圈寄存器)
功能:写入多个输入线圈状态
发送数据类型 startIndex(开始位), bool[] value(布尔值 01)

下面是实际使用

bool[] coilss = client.ReadCoils(startIndex, endIndex);
client.WriteSingleCoil(startIndex, isOk);//void isOk  true/false
bool[] coils = client.ReadDiscreteInputs(startIndex, endIndex);
client.WriteMultipleCoils(startIndex, value);//void value - bool[] value

三、断线重连

实现方法

try
{
    if(oMelsecMcNetdoor.Connected)
    {
        statusssCur = oMelsecMcNetdoor.ReadDiscreteInputs(0, 6);
    }
    else
    {
        lst = oStationBll.GetDevInternetConfigByWorkSection();//这个是获取重连需要的参数  我是卸载数据库里面的,如果只有一个数量可以写死
        foreach (var config in lst)
        {
            if (config.DevStatus == 1 && config.ConfigName == "door")
            {
                oMelsecMcNetdoor.Disconnect();
                oMelsecMcNetdoor = new ModbusClient(config.IPAddress, Convert.ToInt16(config.IPPort));
                oMelsecMcNetdoor.Connect();
            }
        }
    }
}
catch( Exception ex)
{
    statusssCur = null; 
    lst = oStationBll.GetDevInternetConfigByWorkSection();
    foreach (var config in lst)
    {
        if (config.DevStatus == 1 && config.ConfigName == "door")
        {
            oMelsecMcNetdoor.Disconnect();
            oMelsecMcNetdoor = new ModbusClient(config.IPAddress, Convert.ToInt16(config.IPPort));
            oMelsecMcNetdoor.Connect();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mzzder

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值