C#上位机与三菱PLC的通信07--使用第3方通讯库读写数据

1、通讯库介绍

mcprotocol 是一个基于 Node.js 的三菱 PLC MC 协议通信库,具有以下特点:

支持多种三菱 PLC MC 协议的设备,如 FX3U、Q03UDECPU、QJ71E71 等。

支持多种功能码和数据类型,如读取线圈(M)、读取寄存器(D)、写入寄存器(D)、读取扩展寄存器(D*)、读取位寄存器(X/Y)、读取字寄存器(W)等。

支持多种通信方式,如 TCP、UDP、串口等。

代码结构清晰,易于扩展和二次开发。支持 Promise、async/await 等语法糖,提高开发效率。

mcprotocol 的主要功能是实现与三菱 PLC MC 协议设备之间的数据交互,例如读取设备上的某个寄存器的值,并将其传递给 Node.js 应用程序。在使用该库进行开发时,需要先连接到 PLC 设备,然后使用库提供的接口进行数据读写操作。 

通讯协议库是一种软件开发工具,用于实现PLC与其他设备之间的通讯功能。三菱PLC通讯协议库是一款专门为三菱PLC开发的通讯协议库,可以实现PLC与上位机、HMI、SCADA系统等设备之间的数据交换和通讯。

三菱PLC通讯协议库具有以下主要功能:

(1)数据读写功能:可以实现对PLC内部数据的读写操作,包括读取PLC内部寄存器的值、写入数据到PLC内部寄存器等。

(2)报警处理功能:可以实时监测PLC的报警信息,并将报警信息传输给上位机或其他设备进行处理。

(3)远程监控功能:可以实现对PLC的远程监控和控制,可以通过上位机或HMI实时查看和操作PLC的运行状态。

(4)数据传输功能:可以实现PLC与其他设备之间的数据传输,包括实时数据传输、历史数据传输等。

2、开干

这节继续使用上节的VS2022的项目,增加一个方法 MCProtocolLibTest(),具体怎么创建项目,见上节的过程。C#上位机与三菱PLC的通信04--MC协议之A-1E报文测试

1、引入通讯库

2、连接PLC

3、启动服务器

4、读写数据

1、读取D100地址开始的2个int16类型数据

2、 读取D102地址开始的1个float类型数据 

3、写入D200地址开始的2个int16类型数据,写入D202地址开始的1个int16类型数据

 4、写入D206地址开始的1个float类型数据

 5、完整代码

/// <summary>
/// 第3方通讯库测试
/// </summary>
/// <exception cref="NotImplementedException"></exception>
private static async void MCProtocolLibTest()
{ 
     McProtocolTcp mcProtocolTcp = new  McProtocolTcp("192.168.1.7", 6000,  McFrame.MC3E);
    await mcProtocolTcp.Open();
    if (mcProtocolTcp.Connected)
    {
        Console.WriteLine("连接成功!");

        //Console.WriteLine("读取D100地址开始的2个int16类型数据");
        //var result1 = await mcProtocolTcp.ReadDeviceBlock(PlcDeviceType.D, 100, 2);
        //for (int i = 0; i < result1.Length; i++)
        //{
        //    //每2个字节一组
        //    byte[] temp = new byte[2];
        //    temp[0] = result1[i];
        //    temp[1] = result1[++i];
        //    Console.WriteLine(BitConverter.ToInt16(temp, 0));//字节数组转换成int16数据
        //} 


        //Console.WriteLine("读取D102地址开始的1个float类型数据");
        //var result2 = await mcProtocolTcp.ReadDeviceBlock(PlcDeviceType.D, 102, 2);
        //for (int i = 0; i < result2.Length; i++)
        //{
        //    //每4个字节一组
        //    byte[] temp = new byte[4];
        //    temp[0] = result2[i];
        //    temp[1] = result2[++i];
        //    temp[2] = result2[++i];
        //    temp[3] = result2[++i];
        //    Console.WriteLine(BitConverter.ToSingle(temp, 0));//字节数组转换成float数据
        //}

        //Console.WriteLine("写入D200地址开始的2个int32类型数据");
        //int[] data1 = new int[2] { 15, -33 };
        //var result4 = await mcProtocolTcp.WriteDeviceBlock(PlcDeviceType.D, 200, 2, data1);//按数据写入
        //if (result4.ToString() == "0")
        //{
        //    Console.WriteLine("写入成功");
        //}
        //Console.WriteLine("写入D202地址开始的1个int32类型数据");
        //var result5 = await mcProtocolTcp.WriteDeviceBlock(PlcDeviceType.D, 202, 1, BitConverter.GetBytes(669));//按字节写入
        //if (result5.ToString() == "0")
        //{
        //    Console.WriteLine("写入成功");
        //}


        Console.WriteLine("写入D206地址开始的1个float类型数据");
        float value = 13.29f;
        //float类型的数据占2个寄存器长度
        var result6 = await mcProtocolTcp.WriteDeviceBlock(PlcDeviceType.D, 206,2, BitConverter.GetBytes(value));
        if (result6.ToString() == "0")
        {
            Console.WriteLine("写入成功");
        }
    }
} 

原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。

以下是一个使用C#编写的基于Modbus TCP协议的上位机三菱PLC通信程序的示例: ```csharp using System; using System.Net; using System.Net.Sockets; namespace ModbusTCP { class Program { static void Main(string[] args) { IPAddress ipAddress = IPAddress.Parse("192.168.1.1"); // PLC的IP地址 int port = 502; // Modbus TCP协议的默认端口号 TcpClient client = new TcpClient(); client.Connect(ipAddress, port); NetworkStream stream = client.GetStream(); byte[] txData = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x64, 0x00, 0x02 }; // 读取地址为0x64的2个寄存器的指令 stream.Write(txData, 0, txData.Length); byte[] rxData = new byte[1024]; int bytesRead = stream.Read(rxData, 0, rxData.Length); ushort[] data = new ushort[2]; for (int i = 0; i < 2; i++) { data[i] = (ushort)(rxData[9 + i * 2] << 8 | rxData[10 + i * 2]); } Console.WriteLine("读取到的数据为:" + string.Join(",", data)); stream.Close(); client.Close(); } } } ``` 在上面的示例中,我们使用了TcpClient类来建立PLC的连接,并通过NetworkStream类发送和接收数据。我们发送了一个读取地址为0x64的2个寄存器的指令,然后从接收到的数据中提取了这两个寄存器的值,并将其打印到控制台上。 当然,实际应用中还需要考虑异常处理、数据类型转换、多个寄存器的读写等情况。但是,这个示例应该可以帮助你了解如何使用C#编写基于Modbus TCP协议的上位机三菱PLC通信程序。
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hqwest

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

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

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

打赏作者

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

抵扣说明:

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

余额充值