# 螺丝自动锁付 **Repository Path**: Yubin1874/ScrewLock ## Basic Information - **Project Name**: 螺丝自动锁付 - **Description**: 项目描述:为深入理解工业自动化软件开发流程,自主设计并实现一套螺丝扭力自动检测上位机系统。 模拟 PLC(Modbus TCP)与螺丝机(串口)双设备联动,完成扭力数据实时采集、波形绘制、OK/NG 判定及数据存储,可作为工业上位机方案的 演示原型。 技术栈:C#、WinForm、.NET Framework、SerialPort 通信、Modbus TCP、MySQL、Navicat、单例模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2026-06-25 - **Last Updated**: 2026-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ScrewLock — 螺丝自动锁付系统上位机 > 基于 C# WinForms 的工业设备数据采集与监控程序,用于螺丝锁付过程中的扭力采集、实时曲线显示、结果判定与数据存储。 --- ## 技术栈 - **语言 / 框架**: C# .NET Framework 4.8 - **UI 技术**: Windows Forms + TableLayoutPanel 布局 - **通信协议**: Modbus TCP (PLC 控制)、Serial Port (扭力传感器) - **数据存储**: MySQL (历史数据)、CSV (本地文件)、JSON (参数配置) - **图表控件**: System.Windows.Forms.DataVisualization.Charting --- ## 功能模块 | 模块 | 说明 | |---|---| | **主监控界面** | 串口参数配置、PLC 连接状态、实时扭力曲线、锁付结果判定 (OK/NG) | | **自动测试** | 基于状态机的工作流:初始化 → 等待 PLC 开始信号 → 采集扭力 → 结束判定 → 更新 UI | | **参数设置** | PLC IP、端口、锁付起始/结束 Z 轴位置、扭力合格上限等 | | **历史查询** | 按时间范围查询 MySQL 中的扭力记录,并以曲线图展示 | | **数据存储** | 同时写入 CSV 文件与 MySQL 数据库,便于离线分析与长期归档 | | **日志系统** | 按日期生成文本日志,记录运行状态与异常信息 | --- ## 项目结构 ``` ScrewLock/ ├── ScrewLock.UI/ # WinForms 界面层 │ ├── MainForm.cs # 主监控窗体 │ ├── DataQueryForm.cs # 历史数据查询窗体 │ ├── ParamSetForm.cs # 参数设置窗体 │ └── Program.cs # 程序入口 ├── ScrewLock.BLL/ # 业务逻辑层 │ └── AutoTest.cs # 自动测试状态机 ├── ScrewLock.DAL/ # 数据访问层 │ └── MySqlHelper.cs # MySQL 数据库封装 ├── ScrewLock.Models/ # 数据模型 │ ├── Param.cs # 运行参数实体 │ ├── GlobalParam.cs # 单例参数管理 (JSON 持久化) │ ├── AutoTestParam.cs # 自动测试参数 │ └── GlobalDelegates.cs # 全局委托定义 ├── ScrewLock.ModbusModule/ # PLC 通信模块 │ ├── PlcCommunication.cs # Modbus TCP 读写封装 │ ├── PlcParam.cs # PLC 连接参数 │ ├── PlcAddress.cs # 寄存器地址映射 │ └── DisplayData.cs # Modbus 字节序转换 (ABCD / CDAB 等) ├── ScrewLock.Common/ # 通用工具 │ ├── CSVFileHelper.cs # CSV 文件写入 │ └── LogHelper.cs # 日志写入 ├── dlls/ # 外部依赖 DLL │ ├── ModbusProtocol.dll # Modbus TCP 通信库 │ ├── MySql.Data.dll # MySQL 驱动 │ └── Newtonsoft.Json.dll # JSON 序列化库 ├── Properties/ # 程序集信息 └── ScrewLock.sln # 解决方案文件 ``` --- ## 依赖说明 本项目依赖以下第三方库,已放置于 `dlls/` 目录: - **ModbusProtocol.dll** — Modbus TCP 客户端封装(用于 PLC 通信) - **MySql.Data.dll** — MySQL 数据库驱动 - **Newtonsoft.Json.dll** — JSON 序列化与反序列化 如需还原 NuGet 包,也可自行通过 `packages.config` 安装 Newtonsoft.Json;`ModbusProtocol.dll` 为自定义封装库,需随项目一起引用。 --- ## 数据库配置 在 `ScrewLock.DAL/MySqlHelper.cs` 中修改数据库连接字符串: ```csharp private static string connStr = @"Database='torque_test';Data Source='localhost';User Id='root';Password='YOUR_PASSWORD';charset='utf8';pooling=true;oldsyntax=true"; ``` 数据库表结构参考: ```sql CREATE DATABASE IF NOT EXISTS torque_test; USE torque_test; CREATE TABLE IF NOT EXISTS torque_info ( id INT AUTO_INCREMENT PRIMARY KEY, torque DOUBLE NOT NULL, test_time DATETIME NOT NULL ); ``` --- ## PLC 寄存器地址映射 | 寄存器地址 | 含义 | 读写 | |---|---|---| | 100 | 开始测试信号 | 读 / 写 | | 101 | 结束测试信号 | 读 / 写 | | 106 | 锁付起始 Z 轴位置 | 写 | | 108 | 锁付结束 Z 轴位置 | 写 | > 地址与数据格式可在 `ScrewLock.ModbusModule/PlcAddress.cs` 与 `PlcCommunication.cs` 中调整。 --- ## 运行环境 - Windows 7 / 10 / 11 - .NET Framework 4.8 - Visual Studio 2017+ 或 VS Code + MSBuild - MySQL 5.7+(可选,用于历史数据存储) - 支持串口的扭力传感器 + 支持 Modbus TCP 的 PLC --- ## 注意事项 1. **串口参数**:请在主界面手动选择正确的串口号、波特率、数据位、校验位与停止位,再点击“开始”连接传感器。 2. **PLC 参数**:请在“设置”菜单中配置正确的 PLC IP 与端口(默认 502)。 3. **参数持久化**:运行参数自动保存在程序运行目录下的 `setting.dat` 文件中。 4. **数据目录**:CSV 与日志文件分别输出到 `Data/` 与 `Log/` 目录,按日期自动生成。 --- ## 已知问题与改进方向 - 当前耦合度较高:UI 层直接持有 `PlcCommunication` 与 `SerialPort` 实例,后续可进一步拆分为服务层与接口层。 - 数据库连接字符串为硬编码,建议迁移到 `App.config`。 - 串口数据读取与状态机逻辑可进一步解耦,便于单元测试。 --- ## 开源协议 本项目仅用于学习与技术交流,代码按现状提供,不做任何担保。