在串口接收很多数据且速度很快时,用Invoke后,关闭串口会导致界面卡死,如果改用BeginInvoke则关闭串口时,可以关闭串口且界面不会卡死。
this.Invoke((EventHandler)(delegate
this.BeginInvoke((EventHandler)(delegate
要使用C#连接PLC S7-200串口通信PPI协议,需要使用一个称为S7.Net的库。以下是基本步骤:
1. 安装S7.Net库:在Visual Studio中,通过NuGet包管理器搜索和安装S7.Net库。
2. 配置串口:使用System.IO.Ports命名空间中的SerialPort类来配置串口。设置波特率、数据位、奇偶校验和停止位等参数。
3. 连接PLC:使用S7.Net库中的Plc类来连接PLC。指定PLC的IP地址和Rack/Slot号码。
4. 读取数据:使用Plc类中的ReadBytes方法来读取PLC中的数据。指定数据块地址和字节长度。
5. 写入数据:使用Plc类中的WriteBytes方法来向PLC中写入数据。指定数据块地址和数据。
下面是一个简单的示例代码:
using System;
using System.IO.Ports;
using S7.Net;
namespace PLCSerialCommunication
class Program
static void Main(string[] args)
// Configure serial port
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort.Open();
// Connect to PLC
Plc plc = new Plc(CpuType.S7200, "10.0.0.1", 0, 1);
plc.Open();
// Read data from PLC
byte[] data = plc.ReadBytes(DataType.DataBlock, 1, 0, 10);
// Write data to PLC
byte[] newData = new byte[] { 0x01, 0x02, 0x03 };
plc.WriteBytes(DataType.DataBlock, 1, 0, newData);
// Close connection to PLC and serial port
plc.Close();
serialPort.Close();
请注意,此示例代码仅用于演示目的,实际使用时可能需要进行更多的错误处理和异常处理。