工业自动化控制通讯协议库:功能与更新全解析
工业自动化控制通讯协议库,工业自动软件必备的基本程序,该库基于以c#自主开发。 包括串口通信,TCP客户端,tcp服务器端,高并发物联网接收服务器端,udp通信,can总线通信,profinet,modbus tcp/rtu/dtu等,各大品牌plc通信,opc ua,opc da,http通信,mysql常规库,ef6+mysql,ef6+sqlite,firebird数据库,ini配置文件操作,excel表格操作(包括模版化导出),rabbitmq消息队列管理库,Rabiitmq消息队列操作库,常用的数据转换(高低字节排序,转换,取位设位,校验和等),功能可拆分。 update 2021.7.26----优化消息队列出队缓存,读取更快捷更稳定。 update 2021.7.26----新增加rabbitmq消息队列管理类,可以嵌入到用户界面中管理rabbitmq服务器 update 2021.8.3---新增应用于物联网及mes系统中远程读取modbus rtu协议。 update 2021.8.10---新增加ef6+mssql数据库功能,实现自动创建表,以及存储过程。 完善及提高了efmssql,efsqlite,efmysql等安全。 update 2021.08.19---根据行业设备通信现状需要,增加通过dcom组件与opc服务器通信功能,去除原来复杂的操作过程,使用接口式更方便稳定 update-2021-08-30-----新增加dtu服务器,pc做为服务器,远程4G Dtu模块作为客户端主动连接服务器,服务器根据模块注册信息下发modbus rtu指令至远端,终端回复数据服务器自动解析。 主要应用于物联网平台.mes系统 通知,Fax.net.Api已经更新至1.0.3.0。 。 。 。 Version 1.0.3.0 [2021-10-18]更新细节如下: 1、新增欧姆龙PLC Fins-Tcp通信。 2、优化WebApi通信,增加客户端验证功能,修复跨域问题。 4、完善Socket连接对象私有化后导致无法判断连接状态问题。

最近在研究工业自动化控制通讯协议库,发现它真是工业自动软件必备的神器啊!这个库是基于C#自主开发的,包含了超多实用的功能。
一、丰富的通信协议支持
- 串口通信
csharp
// 简单示例代码,打开串口
SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort.Open();
串口通信在很多工业设备中都很常用,通过这个库可以方便地实现与各种支持串口通信的设备进行数据交互。这里创建了一个SerialPort对象,设置好端口号、波特率等参数后就可以打开串口进行通信了。 - TCP客户端和服务器端
csharp
// TCP客户端示例
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(IPAddress.Parse("192.168.1.100"), 8080);
NetworkStream stream = tcpClient.GetStream();csharp
// TCP服务器端示例
TcpListener tcpListener = new TcpListener(IPAddress.Any, 8080);
tcpListener.Start();
TcpClient client = tcpListener.AcceptTcpClient();
NetworkStream stream = client.GetStream();
TCP通信在工业网络中非常重要,通过这个库可以轻松创建TCP客户端和服务器端。客户端通过Connect方法连接到指定的IP和端口,服务器端则通过TcpListener监听指定端口,当有客户端连接时,通过AcceptTcpClient方法接受连接,然后就可以通过NetworkStream进行数据传输了。 - 高并发物联网接收服务器端
这个功能对于物联网应用来说太关键了!它能够高效地处理大量来自物联网设备的连接和数据接收。想象一下,在一个大型的物联网项目中,会有众多的传感器等设备不断发送数据,有了这个高并发接收服务器端,就能稳定地接收和处理这些数据。
- UDP通信
csharp
UdpClient udpClient = new UdpClient(8888);
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
byte[] receiveBytes = udpClient.Receive(ref remoteEP);
UDP通信适合一些对实时性要求较高但对数据准确性要求相对没那么严格的场景。通过UdpClient创建对象并绑定端口,然后通过Receive方法接收数据,ref remoteEP用于获取发送方的IP和端口信息。 - CAN总线通信
CAN总线在工业控制中应用广泛,用于汽车电子、工业自动化等领域。这个库实现了CAN总线通信功能,方便与支持CAN总线的设备进行通信,不过这里就不贴具体代码了,因为CAN总线通信涉及到一些特定的硬件和协议细节,代码相对复杂一些。
- Profinet
Profinet是一种工业以太网标准,对于自动化控制系统来说非常重要。通过这个库支持Profinet通信,能够方便地与符合Profinet标准的设备进行数据交互,促进工业设备之间的互联互通。
- Modbus TCP/RTU/DTU等
csharp
// Modbus TCP示例
ModbusClient modbusClient = new ModbusClient("192.168.1.100", 502);
modbusClient.Connect();
int[] registerValues = modbusClient.ReadHoldingRegisters(0, 10);
Modbus是工业领域常用的通信协议,支持TCP、RTU、DTU等多种模式。这里以Modbus TCP为例,创建ModbusClient对象并连接到指定设备,然后通过ReadHoldingRegisters方法读取寄存器的值。不同模式下的代码实现会根据具体的协议规范有所不同,但核心功能都是实现与支持Modbus协议的设备进行通信。 - 各大品牌PLC通信
这个库还支持与各大品牌的PLC通信,比如西门子、施耐德、欧姆龙等。这对于不同工业场景中使用不同品牌PLC的用户来说太方便了,无需针对每个品牌单独开发通信代码,一个库就能搞定。
- OPC UA和OPC DA
csharp
// OPC UA示例
var opcUAClient = new OpcUaClient();
opcUAClient.Connect("opc.tcp://localhost:4840");
var nodes = opcUAClient.BrowseNodes();
OPC UA和OPC DA是工业自动化中用于数据访问和交互的标准。通过这个库实现对它们的支持,方便与各种OPC服务器进行通信。这里以OPC UA为例,创建OpcUaClient对象并连接到指定的OPC UA服务器,然后通过BrowseNodes方法浏览服务器中的节点信息。 - HTTP通信
csharp
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("https://example.com/api/data");
string content = await response.Content.ReadAsStringAsync();
HTTP通信在工业互联网中也很常见,用于与各种Web服务进行交互。通过HttpClient创建对象,使用GetAsync方法发送HTTP GET请求,然后通过ReadAsStringAsync方法获取响应内容。
二、数据库相关功能
- MySQL常规库
csharp
// 连接MySQL示例
string connectionString = "server=localhost;database=testdb;user=root;password=password";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
string query = "SELECT * FROM users";
using (MySqlCommand command = new MySqlCommand(query, connection))
{
using (MySqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
}
}
}
这个库提供了对MySQL常规库的支持,通过MySqlConnection连接到MySQL数据库,使用MySqlCommand执行SQL查询,然后通过MySqlDataReader读取查询结果。 - EF6 + MySQL
csharp
// 使用EF6与MySQL示例
public class MyDbContext : DbContext
{
public DbSet Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql("server=localhost;database=testdb;user=root;password=password", new MySqlServerVersion(new Version(8, 0, 22)));
}
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
// 使用示例
using (var context = new MyDbContext())
{
var user = new User { Name = "John" };
context.Users.Add(user);
context.SaveChanges();
}
EF6 + MySQL的组合让数据操作更加方便。通过定义DbContext类,配置连接字符串,然后就可以方便地进行数据库的增删改查操作了。这里创建了一个User类,并将其添加到数据库中。 - EF6 + SQLite
csharp
// 使用EF6与SQLite示例
public class MySqliteDbContext : DbContext
{
public DbSet Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=test.db");
}
}
// 使用示例与上面类似
同样的,EF6与SQLite结合也很实用,适合一些对数据库体积要求较小或者需要嵌入式部署的场景。配置好连接字符串后,就可以像操作其他数据库一样进行数据处理了。 - Firebird数据库
这个库也支持Firebird数据库,为使用Firebird的工业项目提供了通信和数据处理的支持,不过具体的使用代码和操作方式会根据Firebird的特性有所不同,这里就不详细展开了。
三、其他功能
- INI配置文件操作
csharp
IniFile iniFile = new IniFile("config.ini");
string value = iniFile.Read("Section1", "Key1");
iniFile.Write("Section1", "Key2", "Value2");
通过IniFile类可以方便地读取和写入INI配置文件。读取时指定section和key就能获取对应的值,写入时指定section、key和value即可。 - Excel表格操作(包括模版化导出)
csharp
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (ExcelPackage package = new ExcelPackage(new FileInfo("template.xlsx")))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
worksheet.Cells["A1"].Value = "Data";
package.SaveAs(new FileInfo("output.xlsx"));
}
对于工业项目中的数据记录和报表生成,Excel表格操作很重要。这里通过ExcelPackage类实现了对Excel表格的基本操作,包括读取模板文件并填充数据,最后保存为新的文件。 - RabbitMQ消息队列管理库
csharp
// 创建RabbitMQ连接示例
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "",
routingKey: "hello",
basicProperties: null,
body: body);
}
RabbitMQ消息队列管理库为工业系统中的异步通信和数据处理提供了支持。通过创建连接、声明队列、发布消息等操作,可以实现不同模块之间的高效消息传递。这里简单示例了创建连接并向队列中发送一条消息。 - 常用的数据转换
csharp
// 高低字节排序示例
byte[] data = new byte[] { 0x12, 0x34 };
Array.Reverse(data);
int value = BitConverter.ToInt16(data, 0);
常用的数据转换功能,如高低字节排序、数据转换、取位设位、校验和等,在工业通信中非常实用。这里通过Array.Reverse方法实现了高低字节排序,然后通过BitConverter.ToInt16方法将字节数组转换为短整型。
四、更新日志
这个库一直在不断更新和优化。
- 2021.7.26进行了两次更新。一是优化消息队列出队缓存,读取更快捷更稳定;二是新增加rabbitmq消息队列管理类,可以嵌入到用户界面中管理rabbitmq服务器。
- 2021.8.3新增应用于物联网及mes系统中远程读取modbus rtu协议。
- 2021.8.10新增加ef6 + mssql数据库功能,实现自动创建表,以及存储过程,同时完善及提高了efmssql,efsqlite,efmysql等安全。
- 2021.08.19根据行业设备通信现状需要,增加通过dcom组件与opc服务器通信功能,去除原来复杂的操作过程,使用接口式更方便稳定。
- 2021 - 08 - 30新增加dtu服务器,pc做为服务器,远程4G Dtu模块作为客户端主动连接服务器,服务器根据模块注册信息下发modbus rtu指令至远端,终端回复数据服务器自动解析,主要应用于物联网平台.mes系统。
- 2021 - 10 - 18更新至1.0.3.0版本,新增欧姆龙PLC Fins - Tcp通信;优化WebApi通信,增加客户端验证功能,修复跨域问题;完善Socket连接对象私有化后导致无法判断连接状态问题。
总之,这个工业自动化控制通讯协议库功能强大且不断更新完善,为工业自动软件的开发提供了全面而便捷的支持,无论是通信协议的实现还是数据库操作、消息队列管理等方面,都表现出色,值得工业领域的开发者们关注和使用。

工业自动化控制通讯协议库,工业自动软件必备的基本程序,该库基于以c#自主开发。 包括串口通信,TCP客户端,tcp服务器端,高并发物联网接收服务器端,udp通信,can总线通信,profinet,modbus tcp/rtu/dtu等,各大品牌plc通信,opc ua,opc da,http通信,mysql常规库,ef6+mysql,ef6+sqlite,firebird数据库,ini配置文件操作,excel表格操作(包括模版化导出),rabbitmq消息队列管理库,Rabiitmq消息队列操作库,常用的数据转换(高低字节排序,转换,取位设位,校验和等),功能可拆分。 update 2021.7.26----优化消息队列出队缓存,读取更快捷更稳定。 update 2021.7.26----新增加rabbitmq消息队列管理类,可以嵌入到用户界面中管理rabbitmq服务器 update 2021.8.3---新增应用于物联网及mes系统中远程读取modbus rtu协议。 update 2021.8.10---新增加ef6+mssql数据库功能,实现自动创建表,以及存储过程。 完善及提高了efmssql,efsqlite,efmysql等安全。 update 2021.08.19---根据行业设备通信现状需要,增加通过dcom组件与opc服务器通信功能,去除原来复杂的操作过程,使用接口式更方便稳定 update-2021-08-30-----新增加dtu服务器,pc做为服务器,远程4G Dtu模块作为客户端主动连接服务器,服务器根据模块注册信息下发modbus rtu指令至远端,终端回复数据服务器自动解析。 主要应用于物联网平台.mes系统 通知,Fax.net.Api已经更新至1.0.3.0。 。 。 。 Version 1.0.3.0 [2021-10-18]更新细节如下: 1、新增欧姆龙PLC Fins-Tcp通信。 2、优化WebApi通信,增加客户端验证功能,修复跨域问题。 4、完善Socket连接对象私有化后导致无法判断连接状态问题。




更多推荐



所有评论(0)