年纪大了,有些东西做过了就忘了,记点笔记
一、 准备工作
- Visual Studio 2019
- 台达DVP PLC
- 232下载线
- ISP编辑软件
需要使用要的类库
Modbus.dll
二、编程
1、实例化一个读取对象对象
public static IModbusSerialMaster master
2.创建连接方法
/// <summary>
/// 传入串口,建立连接
/// </summary>
/// <param name="serialPort"></param>
public bool ConnDeltaPLC(SerialPort serialPort)
{
try
{
//modbusFactory = new ModbusFactory();
master = ModbusSerialMaster.CreateAscii(serialPort);
master.Transport.ReadTimeout = 1000;
master.Transport.WriteTimeout = 1000;
master.Transport.Retries = 3;
master.Transport.WaitToRetryMilliseconds = 200;
master.Transport.Retries = 0;
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return false;
}
}
3、写操作PLC地址的方法
读取输入点X
/// <summary>
/// 读取X
/// </summary>
/// <param name="x"></param>
/// <param name="len"></param>
/// <returns></returns>
public bool[] ReadX(ushort x, ushort len)
{
ushort i = (ushort)(1025 + x);
//bool[] coilStatus = master.ReadCoils(1, 1026, 1);
bool[] coilStatus = master.ReadInputs(1, i, len);
return coilStatus;
}
读取输出点Y
/// <summary>
/// 读取Y
/// </summary>
/// <param name="y"></param>
/// <param name="len"></param>
/// <returns></returns>
public bool[] ReadY(ushort y, ushort len)
{
ushort i = (ushort)(1280 + y);
bool[] coilStatus = master.ReadCoils(1, i, len);
return coilStatus;
}
读取继电器M点
/// <summary>
/// 读取M
/// </summary>
/// <param name="m"></param>
/// <param name="len"></param>
/// <returns></returns>
public bool[] ReadM(ushort m, ushort len)
{
ushort i = (ushort)(2048 + m);
bool[] coilStatus = master.ReadCoils(1, i, len);
return coilStatus;
}
读取寄存器 D
/// <summary>
/// 读取D
/// </summary>
/// <param name="d"></param>
/// <param name="len"></param>
/// <returns></returns>
public ushort[] ReadD(ushort d, ushort len)
{
ushort i = (ushort)(4097 + d);
ushort[] hold = master.ReadHoldingRegisters(1, i, len);
return hold;
}
操作PLC的数据
public void SetY(ushort y)
{
ushort i = (ushort)(1280 + y);
master.WriteSingleCoil(1, i, true);
}
public void ResetY(ushort y)
{
ushort i = (ushort)(1280 + y);
master.WriteSingleCoil(1, i, false);
}
public void SetM(ushort m)
{
ushort i = (ushort)(2048 + m);
master.WriteSingleCoil(1, i, true);
}
public void ResetM(ushort m)
{
ushort i = (ushort)(2048 + m);
master.WriteSingleCoil(1, i, false);
}
public void WriteD(ushort d,ushort data)
{
ushort i = (ushort)(4097 + d);
master.WriteSingleRegister(1, i, data);
}
这个是用 232 口读取的台达PLC,后续会更新用485口读取