GSModbus 是一个通用的、配置驱动的 C# Windows Forms 应用程序,用于实现 PLC 与 MES 系统之间的 Modbus TCP 通信。系统通过 JSON 配置文件实现动态配置,无需修改代码即可适配不同的 PLC 设备和地址映射。
双击 GSModbus.exe 或使用以下命令启动:bash dotnet run
应用程序启动后,您需要选择适合的配置文件:
config 文件夹.json 文件)系统提供两个预配置文件:
config/production_config.jsonconfig/modbus_config.json配置文件加载成功后,如果启用了数据库功能,系统会自动显示数据库连接状态:
系统支持自动创建必需的数据库表:
- PRODUCTION_DATA:存储从PLC读取的生产数据
- COMMUNICATION_LOG:记录通信事件和状态
- ERROR_LOG:记录系统错误和异常
- STATISTICS:保存通信统计信息
注意:Oracle 11g数据库采用原生SQL方式创建表,确保最佳兼容性
数据库连接确认无误后(如果启用了数据库功能):
1. 检查界面上的配置文件状态显示为绿色
2. 确认数据库状态显示为绿色(如果启用)
3. 点击 "连接PLC" 按钮
4. 等待连接状态变为"已连接"(绿色)
5. 开始接收 PLC 数据并自动保存到数据库(如果启用)
配置文件采用 JSON 格式,主要包含以下部分:
{
"ConfigVersion": "1.0",
"ProjectName": "项目名称",
"Connection": {
"IpAddress": "192.168.3.250",
"Port": 502
},
"InputAddresses": {
"ControlSignals": { ... },
"ProductData": { ... },
"MeasurementData": { ... }
},
"Database": { ... }
}
{
"Connection": {
"IpAddress": "192.168.3.250", // PLC IP地址
"Port": 502, // Modbus TCP端口
"ConnectionTimeoutMs": 5000, // 连接超时时间
"OperationTimeoutMs": 3000 // 操作超时时间
}
}
系统支持三种数据类别:
production_config.json)IpAddress: PLC的IP地址Port: Modbus TCP端口(通常为502)ProjectName: 项目名称Address 值{
"ConfigVersion": "1.0",
"ProjectName": "我的项目",
"Connection": {
"IpAddress": "192.168.1.100",
"Port": 502
},
"InputAddresses": {
"ProductData": {
"ProductModel": {
"Address": 6004,
"DataType": "String",
"Length": 10,
"DisplayName": "产品型号"
}
}
}
}
.json 配置文件系统日志按类别显示接收的数据:
📊 [数据 #1] 14:30:25.123
控制信号:
• PLC心跳: 1
• 数据就绪: 数据就绪
产品数据:
• 产品型号: ABC123
• 测试结果: 合格
测量数据:
• 工作电压: 24.50 V
• 工作电流: 1.25 A
--------------------------------------------------
系统支持多种数据库:
- Oracle 11g(推荐用于生产环境)
- SQL Server
- MySQL
- SQLite
在配置文件中设置数据库参数:json { "Database": { "Enabled": true, "Type": "Oracle", "ConnectionString": "Data Source=localhost:1521/XE;User Id=PRODUCTION_MES;Password=your_password;", "AutoCreateTables": true, "DataRetentionDays": 90, "Tables": { "ModbusDataTable": "PRODUCTION_DATA", "CommunicationLogTable": "COMMUNICATION_LOG", "ErrorLogTable": "ERROR_LOG", "StatisticsTable": "STATISTICS" } } }
系统自动创建以下表:
注意:Oracle 11g表创建采用原生SQL语句,与SqlSugar ORM分离以确保兼容性
现象: 点击连接后显示"连接PLC失败"
解决方法:
- 检查PLC IP地址是否正确
- 确认网络连接是否正常
- 验证PLC Modbus TCP服务是否启用
- 检查防火墙设置
现象: 配置文件状态显示为红色
解决方法:
- 检查JSON格式是否正确
- 验证必填字段是否完整
- 确认文件路径是否存在
现象: 连接成功但无数据或数据错误
解决方法:
- 检查地址映射是否正确
- 验证数据类型配置
- 确认PLC寄存器数据是否有效
现象: 数据库状态显示为红色,或点击"测试数据库"按钮后显示连接失败
解决方法:
- 检查连接字符串:确认数据库IP、端口、用户名、密码正确
- 验证数据库服务:确认Oracle/SQL Server等数据库服务正在运行
- 检查网络连接:确保应用程序能访问数据库服务器
- 验证用户权限:确认数据库用户有创建表和读写数据的权限
- Oracle特殊问题:如果是Oracle数据库,确保已安装Oracle Client或使用Oracle.ManagedDataAccess
现象: 提示"ORA-00936: 缺失表达式"或其他Oracle语法错误
解决方法:
- 系统已针对Oracle 11g进行优化,使用原生SQL方式创建表
- 确保Oracle连接字符串格式正确:Data Source=IP:PORT/SERVICE_NAME;User Id=USERNAME;Password=PASSWORD;
- 检查Oracle服务名称和监听器配置
- 如需手动创建表,参考DatabaseManager.cs中的Oracle建表脚本
现象: 数据库连接成功但表创建失败
解决方法:
- 检查数据库用户是否有CREATE TABLE权限
- 对于Oracle,确保用户有足够的表空间配额
- 检查表名是否与现有对象冲突
- 查看应用程序日志获取详细错误信息
- 如果需要,可以手动执行建表脚本
# 运行演示模式
dotnet run -- demo
# 指定配置文件
dotnet run -- --config "path/to/config.json"
系统在加载配置文件时会自动验证:
- 连接配置:IP地址格式、端口号范围、超时设置
- 地址映射:地址完整性、数据类型有效性、字段长度
- 数据库配置:连接字符串格式、数据库类型支持
- 表配置:表名有效性、命名规范
系统提供实时数据库连接测试功能:
- 自动检测:配置加载后自动检测数据库连接状态
- 手动测试:点击"测试数据库"按钮进行连接验证
- 状态显示:实时显示连接状态(绿色=成功,红色=失败)
- 错误诊断:显示详细的连接失败原因
数据库表自动创建和管理功能:
- 智能检测:自动检测表是否存在,避免重复创建
- 兼容处理:Oracle使用原生SQL,其他数据库使用SqlSugar ORM
- 错误容错:表已存在时不会报错,继续正常运行
- 日志记录:详细记录表创建过程和结果
系统支持自动重连功能:
- 连接断开时自动尝试重连
- 可配置重连间隔和最大重试次数
- 重连状态实时显示
config/ 目录下生产线A_config.json、测试环境_config.json)参考 config/ 目录下的示例配置文件:
- production_config.json - 生产环境配置
- modbus_config.json - 基础配置模板
config/Oracle使用指南.md - Oracle 11g数据库配置指南docu/需求.txt - 原始需求文档和PLC地址映射CLAUDE.md - 开发者指南和项目架构说明docu/MES地址.xlsx - 详细的PLC地址映射表Database/DatabaseManager.cs - 数据库管理核心代码Database/DatabaseEntities.cs - 数据库实体定义config/production_config.json - 包含数据库配置的生产环境配置GSModbus.csproj - 项目文件,包含数据库驱动包引用更新日期: 2024年12月
主要更新:
- ✅ 新增数据库连接测试按钮和状态显示
- ✅ 增强Oracle 11g兼容性,使用原生SQL建表
- ✅ 自动表创建功能,支持多种数据库类型
- ✅ 改进数据库配置管理,支持自定义表名
- ✅ 优化错误处理和日志记录
- ✅ 添加数据库性能优化和安全增强
更新日期: 2024年
功能: GSModbus基础通信系统
适用于: GSModbus通用Modbus通信系统
数据库支持: Oracle 11g, SQL Server, MySQL, SQLite
开发框架: .NET 8.0 Windows Forms