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("写入成功");
}
}
}
原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。
原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。
原创真的不容易,走过路过不要错过,点赞关注收藏又圈粉,共同致富。