C#winform 基于TCP连接基恩士PLC通讯,与扫码枪通信【完整项目】

C#winform 基于TCP连接基恩士PLC通讯,与扫码枪通信,扫码枪贴膜追溯系统,RD,RDS,WR,WRS读取等等

点我下载源项目

项目截图如下
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
部分通讯代码

///
/// 读取plc的单个数据
///
/// //指定tcp序号
/// 数据类型
/// 软元件类型
/// 软件编号,即地址
/// plc返回的数据
///
public string ReadSingle(TcpLink tcpLink, DataType type, SoftElementType soft, int nAddress)
{
try
{
string Cmd;
string CmdStart = “RD”;
Cmd = CmdStart + " " + soft.ToString() + nAddress.ToString() +
“.” + type.ToString();
tcpLink.WriteLine(Cmd);
string CmdRec = null;
tcpLink.ReadLine(out CmdRec);
if (CmdRec.Equals(“E0”))
{
MessageBox.Show(string.Format(“读取软元件{0}时,发生"软元件编号异常"错误”, soft.ToString()), “E0”);
return null;
}
else if (CmdRec.Equals(“E1”))
{
MessageBox.Show(string.Format(“读取软元件{0}时,发生"命令异常"错误”, soft.ToString()), “E1”);
return null;
}
return CmdRec;
}
catch
{
MessageBox.Show((string.Format((“单次读取{0}元件,{1}地址失败”), soft.ToString(), nAddress.ToString())), “提示”, MessageBoxButtons.OKCancel);
return null;
}
}
///
/// 读取单个单字
///
///
///
///
public int ReadSingleWord(TcpLink tcpLink, int nAddress)
{
string s = ReadSingle(tcpLink, DataType.S, SoftElementType.DM, nAddress);
// LogPLC(nAddress.ToString() + “” + s);
return int.Parse(s);
}
public Int16 ReadSingleHex(TcpLink tcpLink, int nAddress)
{
return Int16.Parse(ReadSingle(tcpLink, DataType.H, SoftElementType.DM, nAddress));
}
///
/// 读取多个字
///
///
///
///
///
///
public string[] ReadMulti(TcpLink tcpLink, DataType type, SoftElementType soft, int nAddress, int count)
{
try
{
if (!tcpLink.IsOpen())
{
MessageBox.Show(“网口打开失败!”, “警告”);
}
string Cmd;
string CmdStart = "RDS ";
Cmd = CmdStart + soft.ToString() + nAddress.ToString() +
“.” + type.ToString() + " " + count.ToString();
tcpLink.WriteLine(Cmd);
string CmdRec = null;
tcpLink.ReadLine(out CmdRec);
if (CmdRec.Equals(“E0”))
{
MessageBox.Show(string.Format(“读取软元件{0}时,发生"软元件编号异常"错误”, soft.ToString()), “E0”);
return null;
}
else if (CmdRec.Equals(“E1”))
{
MessageBox.Show(string.Format(“读取软元件{0}时,发生"命令异常"错误”, soft.ToString()), “E1”);
return null;
}

            return Regex.Split(CmdRec, @"\s+");


        }
        catch
        {
            MessageBox.Show((string.Format(("连续读取{0}元件,{1}地址失败"), soft.ToString(), nAddress.ToString())), "提示", MessageBoxButtons.OKCancel);
            return null;
        }
    }



    /// <summary>
    /// 向R单元读取位数据(0、1),可用于显示io状态
    /// </summary>
    /// <param name="tcpLink"></param>
    /// <param name="nAddress"></param>
    /// <returns></returns>
    public bool ReadRBit(TcpLink tcpLink, int nAddress)
    {
        string Cmd;
        Cmd = "RD" + " " + SoftElementType.MR.ToString() + nAddress.ToString();
        tcpLink.WriteLine(Cmd);
        string CmdRec = null;
        tcpLink.ReadLine(out CmdRec);
        if (CmdRec == "1")
        {
            return true;
        }
        else
        {
            return false;
        }
    }
     /// <summary>
    /// 读取plc的单个数据
    /// </summary>
    /// //<param name="index">指定tcp序号</param>
    /// <param name="type">数据类型</param>
    /// <param name="soft">软元件类型</param>
    /// <param name="nAddress">软件编号,即地址</param>
    /// <param name="PlcSingleData">plc返回的数据</param>
    /// <returns></returns>
    public string ReadSingle(TcpLink tcpLink, DataType type, SoftElementType soft, int nAddress)
    {
        try
        {
            string Cmd;
            string CmdStart = "RD";
            Cmd = CmdStart + " " + soft.ToString() + nAddress.ToString() +
             "." + type.ToString();
            tcpLink.WriteLine(Cmd);
            string CmdRec = null;
            tcpLink.ReadLine(out CmdRec);

            if (CmdRec.Equals("E0"))
            {
                MessageBox.Show(string.Format("读取软元件{0}时,发生\"软元件编号异常\"错误", soft.ToString()), "E0");
                return null;
            }
            else if (CmdRec.Equals("E1"))
            {
                MessageBox.Show(string.Format("读取软元件{0}时,发生\"命令异常\"错误", soft.ToString()), "E1");
                return null;
            }
            return CmdRec;
        }
        catch
        {
            MessageBox.Show((string.Format(("单次读取{0}元件,{1}地址失败"), soft.ToString(), nAddress.ToString())), "提示", MessageBoxButtons.OKCancel);
            return null;
        }
    }

    /// <summary>
    /// 读取单个单字
    /// </summary>
    /// <param name="tcpLink"></param>
    /// <param name="nAddress"></param>
    /// <returns></returns>
    public int ReadSingleWord(TcpLink tcpLink, int nAddress)
    {
        string s = ReadSingle(tcpLink, DataType.S, SoftElementType.DM, nAddress);
        // LogPLC(nAddress.ToString() + "" + s);
        return int.Parse(s);
    }
    public Int16 ReadSingleHex(TcpLink tcpLink, int nAddress)
    {
        return Int16.Parse(ReadSingle(tcpLink, DataType.H, SoftElementType.DM, nAddress));

    }

    /// <summary>
    /// 读取多个字
    /// </summary>
    /// <param name="type"></param>
    /// <param name="soft"></param>
    /// <param name="nAddress"></param>
    /// <param name="count"></param>
    /// <returns></returns>
    public string[] ReadMulti(TcpLink tcpLink, DataType type, SoftElementType soft, int nAddress, int count)
    {
        try
        {
            if (!tcpLink.IsOpen())
            {
                MessageBox.Show("网口打开失败!", "警告");
            }
            string Cmd;
            string CmdStart = "RDS ";
            Cmd = CmdStart + soft.ToString() + nAddress.ToString() +
            "." + type.ToString() + " " + count.ToString();
            tcpLink.WriteLine(Cmd);
            string CmdRec = null;
            tcpLink.ReadLine(out CmdRec);
            if (CmdRec.Equals("E0"))
            {
                MessageBox.Show(string.Format("读取软元件{0}时,发生\"软元件编号异常\"错误", soft.ToString()), "E0");
                return null;
            }
            else if (CmdRec.Equals("E1"))
            {
                MessageBox.Show(string.Format("读取软元件{0}时,发生\"命令异常\"错误", soft.ToString()), "E1");
                return null;
            }

            return Regex.Split(CmdRec, @"\s+");


        }
        catch
        {
            MessageBox.Show((string.Format(("连续读取{0}元件,{1}地址失败"), soft.ToString(), nAddress.ToString())), "提示", MessageBoxButtons.OKCancel);
            return null;
        }
    }



    /// <summary>
    /// 向R单元读取位数据(0、1),可用于显示io状态
    /// </summary>
    /// <param name="tcpLink"></param>
    /// <param name="nAddress"></param>
    /// <returns></returns>
    public bool ReadRBit(TcpLink tcpLink, int nAddress)
    {
        string Cmd;
        Cmd = "RD" + " " + SoftElementType.MR.ToString() + nAddress.ToString();
        tcpLink.WriteLine(Cmd);
        string CmdRec = null;
        tcpLink.ReadLine(out CmdRec);
        if (CmdRec == "1")
        {
            return true;
        }
        else
        {
            return false;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

薪薪代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值