diff --git a/HighWayIot.Plc/PlcConnect.cs b/HighWayIot.Plc/PlcConnect.cs index 52fc8ef..ce57b0c 100644 --- a/HighWayIot.Plc/PlcConnect.cs +++ b/HighWayIot.Plc/PlcConnect.cs @@ -336,7 +336,5 @@ namespace HighWayIot.Plc } return result.Content; } - - } } \ No newline at end of file diff --git a/HighWayIot.Repository/HighWayIot.Repository.csproj b/HighWayIot.Repository/HighWayIot.Repository.csproj index 3caeffd..42a4b15 100644 --- a/HighWayIot.Repository/HighWayIot.Repository.csproj +++ b/HighWayIot.Repository/HighWayIot.Repository.csproj @@ -58,6 +58,7 @@ + @@ -68,6 +69,7 @@ + diff --git a/HighWayIot.Repository/domain/ZxCarParaEntity.cs b/HighWayIot.Repository/domain/ZxCarParaEntity.cs new file mode 100644 index 0000000..f9a494e --- /dev/null +++ b/HighWayIot.Repository/domain/ZxCarParaEntity.cs @@ -0,0 +1,256 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HighWayIot.Repository.domain +{ + /// + /// 小车参数 + /// + [SugarTable("zx_car_para")] + internal class ZxCarParaEntity + { + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + /// + /// 备 注: + /// 默认值: 设备编号 + /// + [SugarColumn(ColumnName = "device_no")] + public int Device_no { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p01")] + public bool? P01 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p02")] + public bool? P02 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p03")] + public bool? P03 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p04")] + public bool? P04 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p05")] + public bool? P05 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p06")] + public bool? P06 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p07")] + public bool? P07 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p08")] + public bool? P08 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p09")] + public bool? P09 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p10")] + public bool? P10 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p11")] + public bool? P11 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p12")] + public bool? P12 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p13")] + public bool? P13 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p14")] + public bool? P14 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p15")] + public bool? P15 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p16")] + public bool? P16 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p17")] + public bool? P17 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p18")] + public bool? P18 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p19")] + public bool? P19 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p20")] + public bool? P20 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p21")] + public bool? P21 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p22")] + public bool? P22 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p23")] + public bool? P23 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p24")] + public bool? P24 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p25")] + public bool? P25 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p26")] + public bool? P26 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p27")] + public bool? P27 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p28")] + public bool? P28 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p29")] + public bool? P29 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p30")] + public bool? P30 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p31")] + public bool? P31 { get; set; } + + /// + /// 备 注: + /// 默认值: + /// + [SugarColumn(ColumnName = "p32")] + public bool? P32 { get; set; } + + + } +} diff --git a/HighWayIot.Repository/service/ZxCarParaService.cs b/HighWayIot.Repository/service/ZxCarParaService.cs new file mode 100644 index 0000000..d5f90b8 --- /dev/null +++ b/HighWayIot.Repository/service/ZxCarParaService.cs @@ -0,0 +1,63 @@ +using HighWayIot.Log4net; +using HighWayIot.Repository.domain; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HighWayIot.Repository.service +{ + internal class ZxCarParaService + { + private static readonly Lazy lazy = new Lazy(() => new ZxCarParaService()); + + public static ZxCarParaService Instance + { + get + { + return lazy.Value; + } + } + + private LogHelper log = LogHelper.Instance; + Repository _repository => new Repository("sqlserver"); + + /// + /// 查询所有小车参数信息 + /// + /// + public List GetCarParaInfos() + { + try + { + List entity = _repository.GetList(); + return entity; + } + catch (Exception ex) + { + log.Error("用户信息获取异常", ex); + return null; + } + } + + /// + /// 更新小车参数信息 + /// + /// + public bool UpDateCarParaInfos(ZxCarParaEntity entity) + { + try + { + return _repository.Update(entity); + } + catch (Exception ex) + { + log.Error("用户信息获取异常", ex); + return false; + } + } + + + } +} diff --git a/HighWayIot.Rfid/HighWayIot.Rfid.csproj b/HighWayIot.Rfid/HighWayIot.Rfid.csproj index a81eff9..efeb9f3 100644 --- a/HighWayIot.Rfid/HighWayIot.Rfid.csproj +++ b/HighWayIot.Rfid/HighWayIot.Rfid.csproj @@ -46,11 +46,11 @@ + + + + - - - - @@ -62,13 +62,5 @@ HighWayIot.Log4net - - - 3.0.6 - - - - - \ No newline at end of file diff --git a/HighWayIot.Rfid/ICommunicateService.cs b/HighWayIot.Rfid/ICommunicateService.cs index 0c9c915..cfb995b 100644 --- a/HighWayIot.Rfid/ICommunicateService.cs +++ b/HighWayIot.Rfid/ICommunicateService.cs @@ -10,9 +10,13 @@ namespace HighWayIot.Rfid public interface ICommunicateService { void Init(string strIp, int iPort, object objetcter); + bool SendMessage(MessagePack pMessagePack); + bool Connect(); + bool GetState(); + bool DisConnect(); } } diff --git a/HighWayIot.Rfid/Impl/BgTcpClient.cs b/HighWayIot.Rfid/Impl/BgTcpClient.cs index 10beee7..9ae91bc 100644 --- a/HighWayIot.Rfid/Impl/BgTcpClient.cs +++ b/HighWayIot.Rfid/Impl/BgTcpClient.cs @@ -60,7 +60,11 @@ namespace HighWayIot.Rfid.Impl private Semaphore m_Fsem = new Semaphore(0, 100000); private ManualResetEvent Exitevent = new ManualResetEvent(false); - //接收线程 + /// + /// 接收线程 + /// + /// + /// private void bgwReceive_DoWork(object sender, DoWorkEventArgs e) { //LogService.Instance.Debug("RFly-I160 进入 bgwReceive_DoWork 线程函数:"); @@ -129,7 +133,11 @@ namespace HighWayIot.Rfid.Impl } } - //发送线程(包括接收后的处理) + /// + /// 发送线程(包括接收后的处理) + /// + /// + /// private void bgwDeal_DoWork(object sender, DoWorkEventArgs e) { log.RfidLog("RFly-I160 进入 bgwDeal_DoWork 线程:"); @@ -174,7 +182,11 @@ namespace HighWayIot.Rfid.Impl } } - //发送函数 + /// + /// 发送函数 + /// + /// + /// public bool SendMessage(MessagePack pMessagePack) { UInt16 iPos = 0; @@ -780,6 +792,7 @@ namespace HighWayIot.Rfid.Impl } } //CRC异或校验 + public byte CalculateVerify(byte[] pMessage, int iLength) { UInt16 i; @@ -792,6 +805,7 @@ namespace HighWayIot.Rfid.Impl } return iVerify; } + private byte[] Swap16Bytes(byte[] OldU16) { byte[] ReturnBytes = new byte[2]; diff --git a/HighWayIot.Rfid/Impl/RFLY_I160ADAPTER.CS b/HighWayIot.Rfid/Impl/RFLY_I160ADAPTER.CS index feb5bf3..2e9f0d6 100644 --- a/HighWayIot.Rfid/Impl/RFLY_I160ADAPTER.CS +++ b/HighWayIot.Rfid/Impl/RFLY_I160ADAPTER.CS @@ -9,7 +9,6 @@ using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using System.Threading; -using TagInfo = HighWayIot.Rfid.TagInfo; namespace MaterialTraceability.Rfid.Impl { @@ -343,6 +342,7 @@ namespace MaterialTraceability.Rfid.Impl } return iResult; } + public ushort Device_GetReportData(ref byte[] pReadData, Byte Antenna, UInt32 Timedout) { byte[] pTemp = null; @@ -639,6 +639,7 @@ namespace MaterialTraceability.Rfid.Impl } return iResult; } + /// /// 返回读写器获取的条码中最好的一条 1:按照读取次数最多返回条码;2:按照功率最大返回条码 /// @@ -851,7 +852,6 @@ namespace MaterialTraceability.Rfid.Impl } - #region 处理自动上传的函数 private Mutex mutauto = new Mutex(); @@ -1158,7 +1158,6 @@ namespace MaterialTraceability.Rfid.Impl } #endregion - #region 该函数不实现了 public bool Device_SetRf(int iDbi, byte Antenna, WriteOrRead RorW) { diff --git a/HighWayIot.Rfid/RecvState.cs b/HighWayIot.Rfid/RecvState.cs deleted file mode 100644 index 80de38d..0000000 --- a/HighWayIot.Rfid/RecvState.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace HighWayIot.Rfid -{ - public enum RecvState - { - //RFly-I160 返回数据 BB DD 00 01 40 41 0D - WaitingBeginChar1_State = 1, //等待接收帧同步字符1 0xBB - WaitingBeginChar2_State = 2, //等待接收帧同步字符2 0xDD - WaitingForBarcodeLength_State = 3, //等待条码长度不固定 - WaitingForCode_State = 4, //等待指令编号Code 0x02 - WaitingForStus_State = 5, //等待接受状态码 0x00 - WaitingForTagCount_State = 6, //等待接受标签组数不固定 - WaitingForCount_State = 7, //等待接收第一组标签读取次数 0x01 - WaitingForRSSI_State = 8, //等待接收读取信号强度 0xCB - WaitingForAnt_State = 9, //等待接收天线端口 0x01 - WaitingForPC1_State = 10, //等待接收EPC区域 0x00 - WaitingForPC2_State = 11, //等待接收EPC区域 0x00 - WaitingForData_State = 12, //等待接收数据字符 - WaitingForXor_State = 13, //等待比对校验位 - WaitingForEndChar_State = 14, //等待接收尾字符 0x0D - } -} \ No newline at end of file diff --git a/HighWayIot.Rfid/RfidAbsractFactory.cs b/HighWayIot.Rfid/RfidAbsractFactory.cs deleted file mode 100644 index 61580ef..0000000 --- a/HighWayIot.Rfid/RfidAbsractFactory.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections.Generic; - -namespace HighWayIot.Rfid -{ - /// - /// RFID抽象工厂 - /// - public abstract class RfidAbsractFactory - { - - public string ConfigKey { get; set; } - - /// - /// 建立连接 - /// - /// - /// - /// - public abstract bool Connect(string ip, int port); - - /// - /// 按时间段盘点 - /// - /// - /// - public abstract List TimePeriodRead(int timeout = 5000); - } -} \ No newline at end of file diff --git a/HighWayIot.Rfid/RflyFactory.cs b/HighWayIot.Rfid/RflyFactory.cs deleted file mode 100644 index 7c611ad..0000000 --- a/HighWayIot.Rfid/RflyFactory.cs +++ /dev/null @@ -1,459 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.Threading; -using HighWayIot.Common; -using HighWayIot.Log4net; -using HighWayIot.Rfid.Dto; -using TouchSocket.Core; -using TouchSocket.Sockets; - - -namespace HighWayIot.Rfid -{ - public class RflyFactory:RfidAbsractFactory - { - private LogHelper log = LogHelper.Instance; - private readonly TcpClient _tcpClient = new TcpClient(); - private readonly StringChange _stringChange; - - public RflyFactory(StringChange stringChange) - { - - _stringChange = stringChange; - } - - /// - /// 建立连接 - /// - /// - /// - /// - /// - public override bool Connect(string ip, int port) - { - try - { - - _tcpClient.Connect(ip,port); - return true; - } - catch (Exception e) - { - throw new InvalidOperationException($"设备连接异常:{e.Message}"); - } - } - - /// - /// 按时间段盘点 - /// - /// - /// - /// - public override List TimePeriodRead(int timeout = 5000) - { - byte[] u16byte = new byte[2]; - byte[] bCRC = new byte[4]; - try - { - #region 指令封装 - MessagePack pMessagePack = new MessagePack(); - pMessagePack.m_pData = new byte[8]; - pMessagePack.m_pData[0] = 0xAA; - pMessagePack.m_pData[1] = 0x55; - pMessagePack.m_pData[2] = 0x02; - pMessagePack.m_pData[3] = 0x02; - u16byte = BitConverter.GetBytes(timeout); //超时时间 - u16byte = _stringChange.Swap16Bytes(u16byte); //协议里为大端在前 - Array.Copy(u16byte, 0, pMessagePack.m_pData, 4, 2); - Array.Copy(pMessagePack.m_pData, 2, bCRC, 0, 4); - pMessagePack.m_pData[6] = _stringChange.CalculateVerify(bCRC, bCRC.Length); - pMessagePack.m_pData[7] = 0x0D; - #endregion - - var waitClient = _tcpClient.CreateWaitingClient(new WaitingOptions() - { - FilterFunc = response => - { - return true; - } - }); - - byte[] reciveBuffer = waitClient.SendThenReturn(pMessagePack.m_pData, timeout); - - log.Info($"接收原始报文:{_stringChange.bytesToHexStr(reciveBuffer,reciveBuffer.Length)}"); - - byte[] resultBuffer = PareReceiveBufferData(reciveBuffer,reciveBuffer.Length); - - List tagInfoList = Device_DealTagInfoList(resultBuffer); - - return tagInfoList; - } - catch (Exception e) - { - throw new InvalidOperationException($"按时间段盘点异常:{e.Message}"); - } - } - - #region 标签解析 - - /// - /// 状态机函数 - /// - /// - /// - /// - /// - private byte[] PareReceiveBufferData(byte[] buffer, int iLen) - { - RecvState enumRecvState = RecvState.WaitingBeginChar1_State; - int m_iPosition = 0; - UInt16 m_iFullMessageLength = 0; - int iBarcodeLength = 0;//条码长度 - ArrayList m_FrecvData = new ArrayList(); - byte m_iVerify = 0; - try - { - var bufferStr = _stringChange.bytesToHexStr(buffer, iLen); - byte[] m_szFullMessage = new byte[iLen]; - for (int i = 0; i < iLen; i++) - { - switch (enumRecvState) - { - case RecvState.WaitingBeginChar1_State: //开始接受数据帧1 0xBB - Array.Clear(m_szFullMessage, 0, iLen);//清空为0 - if (buffer[i] == 0xBB) - { - m_szFullMessage[m_iPosition] = buffer[i]; - m_iPosition++; - enumRecvState = RecvState.WaitingBeginChar2_State; - } - else - { - m_iFullMessageLength = 0; - m_iPosition = 0; - enumRecvState = RecvState.WaitingBeginChar1_State; - } - break; - case RecvState.WaitingBeginChar2_State: //开始接受数据帧1 0xDD - if (buffer[i] == 0xDD) - { - m_szFullMessage[m_iPosition] = buffer[i]; - m_iPosition++; - enumRecvState = RecvState.WaitingForBarcodeLength_State; - } - else - { - m_iFullMessageLength = 0; - m_iPosition = 0; - enumRecvState = RecvState.WaitingBeginChar1_State; - } - break; - case RecvState.WaitingForBarcodeLength_State: //开始接受数据长度(TagCount - EPC) - m_szFullMessage[m_iPosition] = buffer[i]; - iBarcodeLength = buffer[i]; //单组标签:18;两组标签:35 - m_iPosition++; - enumRecvState = RecvState.WaitingForCode_State; - break; - - case RecvState.WaitingForCode_State: //开始接受指令编号 - if (buffer[i] == 0x02) - { - m_szFullMessage[m_iPosition] = buffer[i]; - m_iPosition++; - enumRecvState = RecvState.WaitingForStus_State; - } - else if (buffer[i] == 0x90) // 如果是心跳BB DD 01 90 00 1F 8E 0D - { - m_szFullMessage[m_iPosition] = buffer[i]; - m_iPosition++; - enumRecvState = RecvState.WaitingForEndChar_State; - } - else if (buffer[i] == 0xBF) // 如果是心跳BB DD 04 BF 00 00 00 F9 0B 49 0D - { - m_szFullMessage[m_iPosition] = buffer[i]; - m_iPosition++; - enumRecvState = RecvState.WaitingForEndChar_State; - } - else - { - m_iFullMessageLength = 0; - m_iPosition = 0; - enumRecvState = RecvState.WaitingBeginChar1_State; - } - break; - case RecvState.WaitingForStus_State: //开始接受状态码 - if (buffer[i] == 0x00) - { - m_szFullMessage[m_iPosition] = buffer[i]; - m_iPosition++; - enumRecvState = RecvState.WaitingForTagCount_State; - } - else if (buffer[i] == 0x40) - { - m_szFullMessage[m_iPosition] = buffer[i]; - //LogService.Instance.Debug("RFU620等待接受WaitingForEndChar_State:Noread"); - lock (m_FrecvData) - { - m_FrecvData.Add(m_szFullMessage); - } - m_iPosition = 0; - i = iLen; - enumRecvState = RecvState.WaitingBeginChar1_State; - //LogService.Instance.Debug("RFly-I160状态机结束。"); - } - break; - case RecvState.WaitingForTagCount_State: //开始接受标签组数 - Array.Copy(buffer, i, m_szFullMessage, m_iPosition, iBarcodeLength);//m_iPosition = 5 - byte[] tempData = new byte[iBarcodeLength]; - Array.Clear(tempData, 0, iBarcodeLength); - Array.Copy(buffer, i, tempData, 0, iBarcodeLength); - m_iPosition = m_iPosition + iBarcodeLength; //m_iPosition = 39 - i = i + iBarcodeLength - 1; //i = 39 - enumRecvState = RecvState.WaitingForXor_State; - break; - case RecvState.WaitingForXor_State: //开始比对校验位 Rfly160 - byte[] m_CRCVerify = new byte[1024]; //此数组用于校验位计算 - Array.Clear(m_CRCVerify, 0, m_CRCVerify.Length); - Array.Copy(m_szFullMessage, 2, m_CRCVerify, 0, iBarcodeLength + 3); //校验位计算是从Length - EPC 结束 - m_szFullMessage[m_iPosition] = buffer[i]; - m_iVerify = m_szFullMessage[m_iPosition]; - if (m_iVerify == _stringChange.CalculateVerify(m_CRCVerify, m_CRCVerify.Length)) - { - m_iPosition++; - enumRecvState = RecvState.WaitingForEndChar_State; - } - else //如果校验不成功 - { - m_iFullMessageLength = 0; - m_iPosition = 0; - enumRecvState = RecvState.WaitingBeginChar1_State; - } - break; - case RecvState.WaitingForEndChar_State: - if (buffer[0] == 0xBB && buffer[1] == 0xDD && buffer[2] == 0x00 && buffer[3] != 0x90) //此处为Noread数据显示 - { - m_szFullMessage[0] = 0xBB; - m_szFullMessage[1] = 0xDD; - m_szFullMessage[2] = 0x00; - lock (m_FrecvData) - { - m_FrecvData.Add(m_szFullMessage); - } - m_iPosition = 0; - i = iLen; - enumRecvState = RecvState.WaitingBeginChar1_State; - } - else if (buffer[0] == 0xBB && buffer[1] == 0xDD && buffer[2] == 0x04 && buffer[3] == 0xBF) - { - Array.Copy(buffer, 0, m_szFullMessage, 0, 11); - i = 11; - lock (m_FrecvData) - { - m_FrecvData.Add(m_szFullMessage); - } - i = iLen; - } - else if (buffer[i] == 0x00) //获取温度 - { - Array.Copy(buffer, 0, m_szFullMessage, 0, 8); - i = 8; - lock (m_FrecvData) - { - m_FrecvData.Add(m_szFullMessage); - } - i = iLen; - } - else if (buffer[i] == 0x11) - { - Array.Copy(buffer, 0, m_szFullMessage, 0, 7); - i = 7; - lock (m_FrecvData) - { - m_FrecvData.Add(m_szFullMessage); - } - } - else if (buffer[i] == 0x01) - { - Array.Copy(buffer, 0, m_szFullMessage, 0, 8); - i = 8; - lock (m_FrecvData) - { - m_FrecvData.Add(m_szFullMessage); - } - } - else - { - m_szFullMessage[m_iPosition] = buffer[i]; - m_iPosition++; - if (buffer[i] == 0x0D) - { - lock (m_FrecvData) - { - m_FrecvData.Add(m_szFullMessage); - } - } - } - m_iPosition = 0; - enumRecvState = RecvState.WaitingBeginChar1_State; - break; - } - } - - return m_szFullMessage; - } - catch (Exception e) - { - throw new InvalidOperationException($"状态机逻辑处理异常:{e.Message}"); - } - } - - private Mutex mutauto = new Mutex(); - /// - /// 解析函数 - /// - /// - /// - /// - public List Device_DealTagInfoList(byte[] AutoDealReportData) - { - List tagInfoList = new List(); - byte[] bResultEPC_Data = new byte[14]; - byte[] m_AutoReadEPC = null; - int m_readEPCDataLen = 0; - try - { - mutauto.WaitOne(); - int iFirstCountPos = 6; //第一次读取标签次数位置 - int iFirstRSSIPos = 7; //第一次读取标签强度位置 - int iFirstAnt = 8; - int iFirstPC = 9; //第一次读取标签天线位置 - int iFirstLeftBarcketPos = 11;//EPC数据起始位置 - UInt16 tempDataCount = 0; - int tempDataRSSI = 0; - UInt16 tempDataANT = 0; - int iBarcodeGroupCount = Convert.ToInt32(AutoDealReportData[5].ToString()); //标签组数 - int iBarcodeLength = 16; //标签长度 - int iCommonSecondFlag = 0; - for (int j = 0; j < iBarcodeGroupCount; j++) - { - TagInfo tag = new TagInfo(); - byte[] tempPCByte = new byte[2]; //取出PC - Array.Clear(tempPCByte, 0, 2); - Array.Copy(AutoDealReportData, iFirstPC, tempPCByte, 0, 2); - - int pc = Convert.ToInt32(tempPCByte[0].ToString("X")); - int epcLength = EPCLengthByPC(pc); - iBarcodeLength = epcLength; - - byte[] tempDataByte = new byte[epcLength]; - Array.Clear(tempDataByte, 0, iBarcodeLength); - Array.Copy(AutoDealReportData, iFirstLeftBarcketPos, tempDataByte, 0, iBarcodeLength); - - byte[] tempCountByte = new byte[1]; //取出标签次数 - Array.Clear(tempCountByte, 0, 1); - Array.Copy(AutoDealReportData, iFirstCountPos, tempCountByte, 0, 1); - tempDataCount = tempCountByte[0]; - - byte[] tempRSSIByte = new byte[1]; //取出标签强度 - Array.Clear(tempRSSIByte, 0, 1); - Array.Copy(AutoDealReportData, iFirstRSSIPos, tempRSSIByte, 0, 1); - - tempDataRSSI = _stringChange.HexStringToNegative(_stringChange.bytesToHexStr(tempRSSIByte, 1)); - - #region add by wenjy 20220829 取出天线号 - byte[] tempAntByte = new byte[1]; //取出天线号 - Array.Clear(tempAntByte, 0, 1); - Array.Copy(AutoDealReportData, iFirstAnt, tempAntByte, 0, 1); - tempDataANT = tempAntByte[0]; - #endregion - - tag.Count = tempDataCount; - tag.RSSI = tempDataRSSI; - tag.EPC = tempDataByte; - - if (pc == 24) - { - tag.EPCstring = _stringChange.bytesToHexStr(tempDataByte, tempDataByte.Length).Substring(0, 7); - } - else - { - tag.EPCstring = Encoding.ASCII.GetString(tempDataByte); - } - - tag.PC = tempPCByte; - tag.Antana = tempDataANT; - tagInfoList.Add(tag); - int iBarcodeListLen = tagInfoList.Count; //特别注意,必须这样,要不然会多一条数据 - - iFirstCountPos = iFirstCountPos + iBarcodeLength + 5; //次数 - iFirstRSSIPos = iFirstCountPos + 1; //强度 - iFirstAnt = iFirstRSSIPos + 1; //天线 - iFirstPC = iFirstAnt + 1; - iFirstLeftBarcketPos = iFirstLeftBarcketPos + iBarcodeLength + 5; - - log.Info("----函数调用:Device_DealTagInfoList 第[" + (iCommonSecondFlag + 1) + "]次数据解析为:" + tag.EPCstring + ",读取标签次数:[" + tempDataCount + "],标签信号强度:[" + tempDataRSSI + "],天线号:[" + tempDataANT + "]"); - iCommonSecondFlag++; - if (iCommonSecondFlag == iBarcodeGroupCount) - { - mutauto.ReleaseMutex(); - log.Info("《《《返回标签数据!"); - return tagInfoList; - } - } - return tagInfoList; - } - catch (Exception ex) - { - mutauto.ReleaseMutex(); - throw new InvalidOperationException($"Device_AutoDealContent 自动处理函数异常:{ex.Message}"); - } - } - - /// - /// 根据PC获取EPC长度 - /// - /// - /// - private int EPCLengthByPC(int pcValue) - { - int epcLength = 0; - if (pcValue >= 10 && pcValue < 20) - { - epcLength = 4; - } - else if (pcValue >= 20 && pcValue < 30) - { - epcLength = 8; - } - else if (pcValue >= 30 && pcValue < 40) - { - epcLength = 12; - } - else if (pcValue >= 40 && pcValue < 50) - { - epcLength = 16; - } - else if (pcValue >= 50 && pcValue < 60) - { - epcLength = 20; - } - else if (pcValue >= 60 && pcValue < 70) - { - epcLength = 24; - } - else if (pcValue >= 70 && pcValue < 80) - { - epcLength = 28; - } - else if (pcValue >= 80 && pcValue < 90) - { - epcLength = 30; - } - return epcLength; - } - - #endregion - } -} \ No newline at end of file diff --git a/HighWayIot.Rfid/TagInfo.cs b/HighWayIot.Rfid/TagInfo.cs deleted file mode 100644 index 4a06ce4..0000000 --- a/HighWayIot.Rfid/TagInfo.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace HighWayIot.Rfid -{ - public class TagInfo - { - public byte[] PC = new byte[2]; - public int Count { get; set; } - public int RSSI{ get; set; } - public int Antana{ get; set; } - public byte[] EPC{ get; set; } - public byte[] Data{ get; set; } - public string PCstring = (string) null; - public string EPCstring = (string) null; - public DateTime Time{ get; set; } - } -} \ No newline at end of file diff --git a/HighWayIot.TouchSocket/HighWayIot.TouchSocket.csproj b/HighWayIot.TouchSocket/HighWayIot.TouchSocket.csproj new file mode 100644 index 0000000..d52e9f2 --- /dev/null +++ b/HighWayIot.TouchSocket/HighWayIot.TouchSocket.csproj @@ -0,0 +1,80 @@ + + + + + Debug + AnyCPU + {DD18A634-1F9C-409A-8C32-C3C81B1B55B5} + Library + Properties + HighWayIot.TouchSocket + HighWayIot.TouchSocket + v4.8 + 512 + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + + + + + + + ..\packages\TouchSocket.3.0.9\lib\net472\TouchSocket.dll + + + ..\packages\TouchSocket.Core.3.0.9\lib\net472\TouchSocket.Core.dll + + + + + + + + + + + + + + \ No newline at end of file diff --git a/HighWayIot.TouchSocket/Properties/AssemblyInfo.cs b/HighWayIot.TouchSocket/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b32fba1 --- /dev/null +++ b/HighWayIot.TouchSocket/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("HighWayIot.TouchSocket")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("HighWayIot.TouchSocket")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("dd18a634-1f9c-409a-8c32-c3c81b1b55b5")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/HighWayIot.TouchSocket/TouchSocketTcpServer.cs b/HighWayIot.TouchSocket/TouchSocketTcpServer.cs new file mode 100644 index 0000000..7c0d3b2 --- /dev/null +++ b/HighWayIot.TouchSocket/TouchSocketTcpServer.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TouchSocket.Core; +using TouchSocket.Sockets; + +namespace HighWayIot.TouchSocket +{ + public class TouchSocketTcpServer + { + private static readonly Lazy lazy = new Lazy(() => new TouchSocketTcpServer()); + + public static TouchSocketTcpServer Instance => lazy.Value; + + TcpService service = new TcpService(); + + public async void TcpServer() + { + service.Connecting = (client, e) => + { + return EasyTask.CompletedTask; + };//有客户端正在连接 + service.Connected = (client, e) => + { + return EasyTask.CompletedTask; + };//有客户端成功连接 + service.Closing = (client, e) => + { + return EasyTask.CompletedTask; + };//有客户端正在断开连接,只有当主动断开时才有效。 + service.Closed = (client, e) => + { + return EasyTask.CompletedTask; + };//有客户端断开连接 + service.Received = async (client, e) => + { + //从客户端收到信息 + var mes = e.ByteBlock.Span.ToString(Encoding.UTF8); + client.Logger.Info($"已从{client.Id}接收到信息:{mes}"); + }; + + await service.SetupAsync(new TouchSocketConfig()//载入配置 + .SetListenIPHosts("tcp://127.0.0.1:7789", 7790)//可以同时监听两个地址 + .ConfigureContainer(a =>//容器的配置顺序应该在最前面 + { + a.AddConsoleLogger();//添加一个控制台日志注入(注意:在maui中控制台日志不可用) + }) + .ConfigurePlugins(a => + { + //a.Add();//此处可以添加插件 + })); + + await service.StartAsync();//启动 + } + } +} diff --git a/HighWayIot.TouchSocket/packages.config b/HighWayIot.TouchSocket/packages.config new file mode 100644 index 0000000..e080f8b --- /dev/null +++ b/HighWayIot.TouchSocket/packages.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/HighWayIot.Winform/HighWayIot.Winform.csproj b/HighWayIot.Winform/HighWayIot.Winform.csproj index dc40204..b6a2634 100644 --- a/HighWayIot.Winform/HighWayIot.Winform.csproj +++ b/HighWayIot.Winform/HighWayIot.Winform.csproj @@ -70,6 +70,12 @@ + + UserControl + + + DeviceDataManage.cs + UserControl @@ -212,6 +218,9 @@ Resources.resx True + + DeviceDataManage.cs + AlarmLogPage.cs @@ -304,10 +313,6 @@ {D0DC3CFB-6748-4D5E-B56A-76FDC72AB4B3} HighWayIot.Repository - - {29813574-49c0-4979-a5a6-47eb7c4288a0} - HighWayIot.Rfid - diff --git a/HighWayIot.Winform/MainForm/BaseForm.Designer.cs b/HighWayIot.Winform/MainForm/BaseForm.Designer.cs index 1cd51df..8e6f54a 100644 --- a/HighWayIot.Winform/MainForm/BaseForm.Designer.cs +++ b/HighWayIot.Winform/MainForm/BaseForm.Designer.cs @@ -64,6 +64,7 @@ namespace HighWayIot.Winform.MainForm this.StripLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); this.TimeStripLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.TimeDisplayTimer = new System.Windows.Forms.Timer(this.components); + this.DeviceDataManageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.statusStrip1.SuspendLayout(); this.SuspendLayout(); @@ -78,7 +79,8 @@ namespace HighWayIot.Winform.MainForm this.MaterialMenuStripItem, this.RecipeConfigStripItem, this.EquipMaterialBindingStripItem, - this.TestMenuItem}); + this.TestMenuItem, + this.DeviceDataManageToolStripMenuItem}); this.MainMenu.Location = new System.Drawing.Point(0, 0); this.MainMenu.Name = "MainMenu"; this.MainMenu.Padding = new System.Windows.Forms.Padding(5, 1, 0, 1); @@ -101,35 +103,35 @@ namespace HighWayIot.Winform.MainForm // UserStripMenuItem // this.UserStripMenuItem.Name = "UserStripMenuItem"; - this.UserStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.UserStripMenuItem.Size = new System.Drawing.Size(136, 22); this.UserStripMenuItem.Text = "用户管理"; this.UserStripMenuItem.Click += new System.EventHandler(this.StripMenuItemClick); // // RoleStripMenuItem // this.RoleStripMenuItem.Name = "RoleStripMenuItem"; - this.RoleStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.RoleStripMenuItem.Size = new System.Drawing.Size(136, 22); this.RoleStripMenuItem.Text = "角色管理"; this.RoleStripMenuItem.Click += new System.EventHandler(this.StripMenuItemClick); // // ShiftTimeConfigStripItem // this.ShiftTimeConfigStripItem.Name = "ShiftTimeConfigStripItem"; - this.ShiftTimeConfigStripItem.Size = new System.Drawing.Size(180, 22); + this.ShiftTimeConfigStripItem.Size = new System.Drawing.Size(136, 22); this.ShiftTimeConfigStripItem.Text = "班时间维护"; this.ShiftTimeConfigStripItem.Click += new System.EventHandler(this.StripMenuItemClick); // // LogoutStripMenuItem // this.LogoutStripMenuItem.Name = "LogoutStripMenuItem"; - this.LogoutStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.LogoutStripMenuItem.Size = new System.Drawing.Size(136, 22); this.LogoutStripMenuItem.Text = "注销"; this.LogoutStripMenuItem.Click += new System.EventHandler(this.LogoutStripMenuItem_Click); // // SysQuitStripMenuItem // this.SysQuitStripMenuItem.Name = "SysQuitStripMenuItem"; - this.SysQuitStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.SysQuitStripMenuItem.Size = new System.Drawing.Size(136, 22); this.SysQuitStripMenuItem.Text = "退出系统"; this.SysQuitStripMenuItem.Click += new System.EventHandler(this.SysQuitStripMenuItem_Click); // @@ -146,21 +148,21 @@ namespace HighWayIot.Winform.MainForm // DaliyReportStripItem // this.DaliyReportStripItem.Name = "DaliyReportStripItem"; - this.DaliyReportStripItem.Size = new System.Drawing.Size(180, 22); + this.DaliyReportStripItem.Size = new System.Drawing.Size(124, 22); this.DaliyReportStripItem.Text = "日报表"; this.DaliyReportStripItem.Click += new System.EventHandler(this.StripMenuItemClick); // // OperateLogStripMenuItem // this.OperateLogStripMenuItem.Name = "OperateLogStripMenuItem"; - this.OperateLogStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.OperateLogStripMenuItem.Size = new System.Drawing.Size(124, 22); this.OperateLogStripMenuItem.Text = "操作日志"; this.OperateLogStripMenuItem.Click += new System.EventHandler(this.StripMenuItemClick); // // AlarmLogStripMenuItem // this.AlarmLogStripMenuItem.Name = "AlarmLogStripMenuItem"; - this.AlarmLogStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.AlarmLogStripMenuItem.Size = new System.Drawing.Size(124, 22); this.AlarmLogStripMenuItem.Text = "报警日志"; this.AlarmLogStripMenuItem.Click += new System.EventHandler(this.StripMenuItemClick); // @@ -190,14 +192,14 @@ namespace HighWayIot.Winform.MainForm // MaterialConfigStripItem // this.MaterialConfigStripItem.Name = "MaterialConfigStripItem"; - this.MaterialConfigStripItem.Size = new System.Drawing.Size(180, 22); + this.MaterialConfigStripItem.Size = new System.Drawing.Size(148, 22); this.MaterialConfigStripItem.Text = "物料管理"; this.MaterialConfigStripItem.Click += new System.EventHandler(this.StripMenuItemClick); // // MaterialTypeConfigStripItem // this.MaterialTypeConfigStripItem.Name = "MaterialTypeConfigStripItem"; - this.MaterialTypeConfigStripItem.Size = new System.Drawing.Size(180, 22); + this.MaterialTypeConfigStripItem.Size = new System.Drawing.Size(148, 22); this.MaterialTypeConfigStripItem.Text = "物料类型管理"; this.MaterialTypeConfigStripItem.Click += new System.EventHandler(this.StripMenuItemClick); // @@ -218,8 +220,8 @@ namespace HighWayIot.Winform.MainForm // TestMenuItem // this.TestMenuItem.Name = "TestMenuItem"; - this.TestMenuItem.Size = new System.Drawing.Size(68, 22); - this.TestMenuItem.Text = "测试页面"; + this.TestMenuItem.Size = new System.Drawing.Size(89, 22); + this.TestMenuItem.Text = "PLC测试页面"; this.TestMenuItem.Click += new System.EventHandler(this.StripMenuItemClick); // // UserControlTabs @@ -269,8 +271,8 @@ namespace HighWayIot.Winform.MainForm // HighWayLogo // this.HighWayLogo.Name = "HighWayLogo"; - this.HighWayLogo.Size = new System.Drawing.Size(214, 17); - this.HighWayLogo.Text = "Design by 青岛海威物联科技有限公司"; + this.HighWayLogo.Size = new System.Drawing.Size(143, 17); + this.HighWayLogo.Text = "Design by HighWayIOT"; // // SplitLabel1 // @@ -294,7 +296,7 @@ namespace HighWayIot.Winform.MainForm // this.toolStripStatusLabel1.BorderSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right))); this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(1461, 17); + this.toolStripStatusLabel1.Size = new System.Drawing.Size(1532, 17); this.toolStripStatusLabel1.Spring = true; // // StripLabel2 @@ -314,6 +316,13 @@ namespace HighWayIot.Winform.MainForm this.TimeDisplayTimer.Interval = 1000; this.TimeDisplayTimer.Tick += new System.EventHandler(this.TimeDisplayTimer_Tick); // + // DeviceDataManageToolStripMenuItem + // + this.DeviceDataManageToolStripMenuItem.Name = "DeviceDataManageToolStripMenuItem"; + this.DeviceDataManageToolStripMenuItem.Size = new System.Drawing.Size(92, 22); + this.DeviceDataManageToolStripMenuItem.Text = "设备数据管理"; + this.DeviceDataManageToolStripMenuItem.Click += new System.EventHandler(this.StripMenuItemClick); + // // BaseForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -369,5 +378,6 @@ namespace HighWayIot.Winform.MainForm private ToolStripMenuItem EquipMaterialBindingStripItem; private ToolStripMenuItem MaterialConfigStripItem; private ToolStripMenuItem MaterialTypeConfigStripItem; + private ToolStripMenuItem DeviceDataManageToolStripMenuItem; } } \ No newline at end of file diff --git a/HighWayIot.Winform/MainForm/BaseForm.cs b/HighWayIot.Winform/MainForm/BaseForm.cs index be0aeaa..a71bd7f 100644 --- a/HighWayIot.Winform/MainForm/BaseForm.cs +++ b/HighWayIot.Winform/MainForm/BaseForm.cs @@ -98,7 +98,7 @@ namespace HighWayIot.Winform.MainForm case "监控主页面": UserPanelSwitch(typeof(MonitorMainPage), button.Text); break; - case "测试页面": + case "PLC测试页面": UserPanelSwitch(typeof(TestPage), button.Text); break; case "班时间维护": @@ -122,6 +122,9 @@ namespace HighWayIot.Winform.MainForm case "生产排程": UserPanelSwitch(typeof(ProductionScheduling), button.Text); break; + case "设备数据管理": + UserPanelSwitch(typeof(ProductionScheduling), button.Text); + break; case "": break; default: @@ -262,5 +265,10 @@ namespace HighWayIot.Winform.MainForm TraverseMenuitem(i); } } + + private void DeviceDataManageToolStripMenuItem_Click(object sender, EventArgs e) + { + + } } } diff --git a/HighWayIot.Winform/MainForm/LoginForm.Designer.cs b/HighWayIot.Winform/MainForm/LoginForm.Designer.cs index ef8c3f5..a5c90b4 100644 --- a/HighWayIot.Winform/MainForm/LoginForm.Designer.cs +++ b/HighWayIot.Winform/MainForm/LoginForm.Designer.cs @@ -47,7 +47,7 @@ namespace HighWayIot.Winform.MainForm // // Login // - this.Login.Location = new System.Drawing.Point(92, 127); + this.Login.Location = new System.Drawing.Point(92, 118); this.Login.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.Login.Name = "Login"; this.Login.Size = new System.Drawing.Size(82, 28); @@ -73,6 +73,7 @@ namespace HighWayIot.Winform.MainForm this.PassText.PasswordChar = '●'; this.PassText.Size = new System.Drawing.Size(146, 21); this.PassText.TabIndex = 2; + this.PassText.Text = "123"; // // label1 // @@ -144,6 +145,7 @@ namespace HighWayIot.Winform.MainForm this.Name = "LoginForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "大连软控开炼机成型机数据管理系统 - 登录界面"; + this.Load += new System.EventHandler(this.LoginForm_Load); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); diff --git a/HighWayIot.Winform/MainForm/LoginForm.cs b/HighWayIot.Winform/MainForm/LoginForm.cs index 4358491..5ed2aab 100644 --- a/HighWayIot.Winform/MainForm/LoginForm.cs +++ b/HighWayIot.Winform/MainForm/LoginForm.cs @@ -8,6 +8,7 @@ using System.Data; using System.Drawing; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -20,8 +21,11 @@ namespace HighWayIot.Winform.MainForm public LoginForm() { InitializeComponent(); + } + + /// /// 登陆验证 /// @@ -47,5 +51,15 @@ namespace HighWayIot.Winform.MainForm return; } } + + /// + /// 自动登录 + /// + /// + /// + private void LoginForm_Load(object sender, EventArgs e) + { + Login_Click(sender, e); + } } } diff --git a/HighWayIot.Winform/UserControlPages/DeviceDataManage.Designer.cs b/HighWayIot.Winform/UserControlPages/DeviceDataManage.Designer.cs new file mode 100644 index 0000000..00e4139 --- /dev/null +++ b/HighWayIot.Winform/UserControlPages/DeviceDataManage.Designer.cs @@ -0,0 +1,111 @@ +namespace HighWayIot.Winform.UserControlPages +{ + partial class DeviceDataManage + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(94, 30); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(110, 20); + this.comboBox1.TabIndex = 0; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.comboBox1); + this.groupBox1.Location = new System.Drawing.Point(3, 3); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(355, 179); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "小车参数设置"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(23, 34); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 1; + this.label1.Text = "设备号选择"; + // + // button1 + // + this.button1.Font = new System.Drawing.Font("宋体", 12F); + this.button1.Location = new System.Drawing.Point(25, 70); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(126, 41); + this.button1.TabIndex = 2; + this.button1.Text = "从PLC上传"; + this.button1.UseVisualStyleBackColor = true; + // + // button2 + // + this.button2.Font = new System.Drawing.Font("宋体", 12F); + this.button2.Location = new System.Drawing.Point(195, 70); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(126, 41); + this.button2.TabIndex = 3; + this.button2.Text = "下传到PLC"; + this.button2.UseVisualStyleBackColor = true; + // + // DeviceDataManage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ControlLight; + this.Controls.Add(this.groupBox1); + this.Name = "DeviceDataManage"; + this.Size = new System.Drawing.Size(1293, 884); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button2; + } +} diff --git a/HighWayIot.Winform/UserControlPages/DeviceDataManage.cs b/HighWayIot.Winform/UserControlPages/DeviceDataManage.cs new file mode 100644 index 0000000..1084733 --- /dev/null +++ b/HighWayIot.Winform/UserControlPages/DeviceDataManage.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace HighWayIot.Winform.UserControlPages +{ + public partial class DeviceDataManage : UserControl + { + public DeviceDataManage() + { + InitializeComponent(); + } + } +} diff --git a/HighWayIot.Winform/UserControlPages/DeviceDataManage.resx b/HighWayIot.Winform/UserControlPages/DeviceDataManage.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/HighWayIot.Winform/UserControlPages/DeviceDataManage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HighWayIot.Winform/UserControlPages/TestPage.cs b/HighWayIot.Winform/UserControlPages/TestPage.cs index 1986e32..f5012c6 100644 --- a/HighWayIot.Winform/UserControlPages/TestPage.cs +++ b/HighWayIot.Winform/UserControlPages/TestPage.cs @@ -5,7 +5,9 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Windows.Forms; +using TouchSocket.Core; using static System.Windows.Forms.VisualStyles.VisualStyleElement; @@ -59,7 +61,45 @@ namespace HighWayIot.Winform.UserControlPages /// private void ReadButton_Click(object sender, EventArgs e) { - + DataTypeEnum en = (DataTypeEnum)Convert.ToInt32(PlcType.SelectedValue); + + string res = string.Empty; + + switch (en) + { + case DataTypeEnum.Bool: + res = PlcConnect.ReadBool(PlcAddress.Text).ToString(); + break; + case DataTypeEnum.Int16: + res = PlcConnect.ReadInt16(PlcAddress.Text).ToString(); + break; + case DataTypeEnum.UInt16: + res = PlcConnect.ReadUInt16(PlcAddress.Text).ToString(); + break; + case DataTypeEnum.Int32: + res = PlcConnect.ReadInt32(PlcAddress.Text).ToString(); + break; + case DataTypeEnum.UInt32: + res = PlcConnect.ReadUInt32(PlcAddress.Text).ToString(); + break; + case DataTypeEnum.Int64: + res = PlcConnect.ReadInt64(PlcAddress.Text).ToString(); + break; + case DataTypeEnum.UInt64: + res = PlcConnect.ReadUInt64(PlcAddress.Text).ToString(); + break; + case DataTypeEnum.Float: + res = PlcConnect.ReadFloat(PlcAddress.Text).ToString(); + break; + case DataTypeEnum.Double: + res = PlcConnect.ReadDouble(PlcAddress.Text).ToString(); + break; + default: + res = "不对劲儿奥"; + break; + } + + PlcShowValue.Text = res; } /// diff --git a/HighWayIot.sln b/HighWayIot.sln index 5ecd2da..0a3dcc8 100644 --- a/HighWayIot.sln +++ b/HighWayIot.sln @@ -13,10 +13,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HighWayIot.Repository", "Hi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HighWayIot.Plc", "HighWayIot.Plc\HighWayIot.Plc.csproj", "{4EE4C3E2-AC45-4275-8017-E99D70FC1F52}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HighWayIot.Rfid", "HighWayIot.Rfid\HighWayIot.Rfid.csproj", "{29813574-49C0-4979-A5A6-47EB7C4288A0}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HighWayIot.Winform", "HighWayIot.Winform\HighWayIot.Winform.csproj", "{E36F832C-5F90-491C-B3B7-E94C734FD292}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HighWayIot.TouchSocket", "HighWayIot.TouchSocket\HighWayIot.TouchSocket.csproj", "{DD18A634-1F9C-409A-8C32-C3C81B1B55B5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HighWayIot.Rfid", "HighWayIot.Rfid\HighWayIot.Rfid.csproj", "{29813574-49C0-4979-A5A6-47EB7C4288A0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -43,14 +45,18 @@ Global {4EE4C3E2-AC45-4275-8017-E99D70FC1F52}.Debug|Any CPU.Build.0 = Debug|Any CPU {4EE4C3E2-AC45-4275-8017-E99D70FC1F52}.Release|Any CPU.ActiveCfg = Release|Any CPU {4EE4C3E2-AC45-4275-8017-E99D70FC1F52}.Release|Any CPU.Build.0 = Release|Any CPU - {29813574-49C0-4979-A5A6-47EB7C4288A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {29813574-49C0-4979-A5A6-47EB7C4288A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {29813574-49C0-4979-A5A6-47EB7C4288A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {29813574-49C0-4979-A5A6-47EB7C4288A0}.Release|Any CPU.Build.0 = Release|Any CPU {E36F832C-5F90-491C-B3B7-E94C734FD292}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E36F832C-5F90-491C-B3B7-E94C734FD292}.Debug|Any CPU.Build.0 = Debug|Any CPU {E36F832C-5F90-491C-B3B7-E94C734FD292}.Release|Any CPU.ActiveCfg = Release|Any CPU {E36F832C-5F90-491C-B3B7-E94C734FD292}.Release|Any CPU.Build.0 = Release|Any CPU + {DD18A634-1F9C-409A-8C32-C3C81B1B55B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD18A634-1F9C-409A-8C32-C3C81B1B55B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD18A634-1F9C-409A-8C32-C3C81B1B55B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD18A634-1F9C-409A-8C32-C3C81B1B55B5}.Release|Any CPU.Build.0 = Release|Any CPU + {29813574-49C0-4979-A5A6-47EB7C4288A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {29813574-49C0-4979-A5A6-47EB7C4288A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29813574-49C0-4979-A5A6-47EB7C4288A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {29813574-49C0-4979-A5A6-47EB7C4288A0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE