# HJ212_Server
**Repository Path**: daemon811/HJ212_Server
## Basic Information
- **Project Name**: HJ212_Server
- **Description**: HJ212国标服务端协议
- **Primary Language**: C#
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-05-22
- **Last Updated**: 2025-05-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# HJ212国标服务端协议:
``` C#
IGB_Server gb = new GB_Server(new TcpServer("0.0.0.0", 2756));
gb.OnClientConnect += Gb_OnClientConnect;
gb.OnAskSetSystemTime += Gb_OnAskSetSystemTime;
async Task Gb_OnAskSetSystemTime(int clientId, (string PolId, HJ212_Server.Model.RspInfo RspInfo) objects)
{
await Task.CompletedTask;
}
await gb.StartAsync();
async Task Gb_OnClientConnect(int clientId)
{
try
{
#region c1
await gb.SetTimeoutAndRetryAsync(clientId, "1234567890123456", "123456", ST.大气环境污染源, 10, 3);
#endregion
}
catch (TimeoutException ex)
{
Console.WriteLine(ex.Message);
}
}
```
## 更多详见Test例子,例子中附带测试命令
# 实现HJ212-2017《污染源在线自动监控(监测)系统数据传输标准》中 附 录 C(资料性附录)通讯命令示例和拆分包及应答机制示例 中所有(表1-表50)详细接口如下,若有错误和建议请及时联系我改正:
``` C#
/// C1设置超时时间及重发次数
Task SetTimeoutAndRetryAsync(Guid clientId, string mn, string pw, ST st, int overTime, int reCount, int timeOut = 5000);
/// C2提取现场机时间
Task GetSystemTimeAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C3设置现场机时间
Task SetSystemTimeAsync(Guid clientId, string mn, string pw, ST st, string polId, DateTime systemTime, int timeOut = 5000);
/// C4现场机时间校准请求
event ActivelyPushDataServerEventHandler<(string PolId, RspInfo RspInfo)> OnAskSetSystemTime;
/// C5提取实时数据间隔
Task GetRealTimeDataIntervalAsync(Guid clientId, string mn, string pw, ST st, int timeOut = 5000);
/// C6设置实时数据间隔
Task SetRealTimeDataIntervalAsync(Guid clientId, string mn, string pw, ST st, int interval, int timeOut = 5000);
/// C7提取分钟数据间隔
Task GetMinuteDataIntervalAsync(Guid clientId, string mn, string pw, ST st, int timeOut = 5000);
/// C8设置分钟数据间隔
Task SetMinuteDataIntervalAsync(Guid clientId, string mn, string pw, ST st, int interval, int timeOut = 5000);
/// C9设置现场机访问密码
Task SetNewPWAsync(Guid clientId, string mn, string pw, ST st, string newPW, int timeOut = 5000);
/// C10取污染物实时数据
Task StartRealTimeDataAsync(Guid clientId, string mn, string pw, ST st, int timeOut = 5000);
/// C11停止察看污染物实时数据
Task StopRealTimeDataAsync(Guid clientId, string mn, string pw, ST st, int timeOut = 5000);
/// C12取设备运行状态数据
Task StartRunningStateDataAsync(Guid clientId, string mn, string pw, ST st, int timeOut = 5000);
/// C13停止察看设备运行状态
Task StopRunningStateDataAsync(Guid clientId, string mn, string pw, ST st, int timeOut = 5000);
///
/// C14上传污染物实时数据
/// (C25上传噪声声级实时数据 同)
/// (C29上传工况实时数据 同)
///
event ActivelyPushDataServerEventHandler<(DateTime DataTime, List Data, RspInfo RspInfo)> OnUploadRealTimeData;
/// C15上传设备运行状态数据
event ActivelyPushDataServerEventHandler<(DateTime DataTime, List Data, RspInfo RspInfo)> OnUploadRunningStateData;
///
/// C16上传污染物分钟数据
/// (C26上传噪声声级分钟数据 同)
///
event ActivelyPushDataServerEventHandler<(DateTime DataTime, List Data, RspInfo RspInfo)> OnUploadMinuteData;
///
/// C17上传污染物小时数据
/// (C27上传噪声声级小时数据 同)
///
event ActivelyPushDataServerEventHandler<(DateTime DataTime, List Data, RspInfo RspInfo)> OnUploadHourData;
///
/// C18上传污染物日历史数据
/// (C28上传噪声声级日历史数据 同)
///
event ActivelyPushDataServerEventHandler<(DateTime DataTime, List Data, RspInfo RspInfo)> OnUploadDayData;
/// C19上传设备运行时间日历史数据
event ActivelyPushDataServerEventHandler<(DateTime DataTime, List Data, RspInfo RspInfo)> OnUploadRunningTimeData;
///
/// C20取污染物分钟历史数据
/// 遵循C47-C50的规则
///
Task> GetMinuteDataAsync(Guid clientId, string mn, string pw, ST st, DateTime beginTime, DateTime endTime, int timeOut = 5000);
///
/// C21取污染物小时历史数据
/// 遵循C47-C50的规则
///
Task> GetHourDataAsync(Guid clientId, string mn, string pw, ST st, DateTime beginTime, DateTime endTime, int timeOut = 5000);
///
/// C22取污染物日历史数据
/// 遵循C47-C50的规则
///
Task> GetDayDataAsync(Guid clientId, string mn, string pw, ST st, DateTime beginTime, DateTime endTime, int timeOut = 5000);
///
/// C23取设备运行时间日历史数据
/// 遵循C47-C50的规则
///
Task> GetRunningTimeDataAsync(Guid clientId, string mn, string pw, ST st, DateTime beginTime, DateTime endTime, int timeOut = 5000);
/// C24上传数采仪开机时间
event ActivelyPushDataServerEventHandler<(DateTime DataTime, DateTime RestartTime, RspInfo RspInfo)> OnUploadAcquisitionDeviceRestartTime;
/// C30零点校准量程校准
Task CalibrateAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C31即时采样
Task RealTimeSamplingAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C32启动清洗/反吹
Task StartCleaningOrBlowbackAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C33比对采样
Task ComparisonSamplingAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C34超标留样
Task<(DateTime DataTime, string VaseNo)> OutOfStandardRetentionSampleAsync(Guid clientId, string mn, string pw, ST st, int timeOut = 5000);
/// C35设置采样时间周期(单位:小时)
Task SetSamplingPeriodAsync(Guid clientId, string mn, string pw, ST st, string polId, TimeOnly cstartTime, int ctime, int timeOut = 5000);
/// C36提取采样时间周期(单位:小时)
Task<(TimeOnly CstartTime, int CTime)> GetSamplingPeriodAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C37提取出样时间(单位:分钟)
Task GetSampleExtractionTimeAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C38提取设备唯一标识
Task GetSNAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C39上传设备唯一标识
event ActivelyPushDataServerEventHandler<(DateTime DataTime, string PolId, string SN, RspInfo RspInfo)> OnUploadSN;
/// C40上传现场机信息(日志)
event ActivelyPushDataServerEventHandler<(DateTime DataTime, string? PolId, string Log, RspInfo RspInfo)> OnUploadLog;
/// C41提取现场机信息(日志)
Task> GetLogInfosAsync(Guid clientId, string mn, string pw, ST st, string? polId, DateTime beginTime, DateTime endTime, int timeOut = 5000);
///
/// C42上传现场机信息(状态)
/// (C44上传现场机信息(参数) 同)
///
event ActivelyPushDataServerEventHandler<(DateTime DataTime, string PolId, List DeviceInfos, RspInfo RspInfo)> OnUploadInfo;
/// C43提取现场机信息(状态)
Task GetStateInfoAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C45提取现场机信息(参数)
Task GetArgumentInfoAsync(Guid clientId, string mn, string pw, ST st, string polId, int timeOut = 5000);
/// C46设置现场机参数
Task SetInfoAsync(Guid clientId, string mn, string pw, ST st, string polId, string infoId, string info, int timeOut = 5000);
```