Ejemplo n.º 1
0
        private void SocketServer_NewMessage1Event(Socket socket, string Message)
        {
            try
            {
                SimpleLogHelper.Instance.WriteLog(LogType.Info, Message);
                if (Message.Length != 24)
                {
                    return;
                }
                AddLog("PLC数据请求" + Message);
                ModbusTcpServer modbusTcpServer = new ModbusTcpServer();
                modbusTcpServer.AffairID   = Message.Substring(0, 4);
                modbusTcpServer.ProtocolID = Message.Substring(4, 4);
                int requestDataLength = MathHelper.HexToDec(Message.Substring(Message.Length - 4, 4)); //请求数据长度
                modbusTcpServer.BackDataLength = MathHelper.DecToHex((requestDataLength * 2).ToString()).PadLeft(2, '0');
                modbusTcpServer.SlaveId        = Message.Substring(12, 2);
                modbusTcpServer.Length         = MathHelper.DecToHex((3 + requestDataLength * 2).ToString()).PadLeft(4, '0');
                string backdata   = modbusTcpServer.AffairID + modbusTcpServer.ProtocolID + modbusTcpServer.Length + modbusTcpServer.SlaveId + ModbusFunction.ReadHoldingRegisters + modbusTcpServer.BackDataLength;
                string chengxuhao = ini.ReadIni("Request", "Index");
                if (string.IsNullOrEmpty(chengxuhao))
                {
                    chengxuhao = "0";
                }
                chengxuhao = MathHelper.DecToHex(chengxuhao).PadLeft(4, '0');

                string xinghao       = MathHelperEx.StrToASCII1(ini.ReadIni("Request", "ModelNum"));
                string xinghaolength = MathHelper.DecToHex((ini.ReadIni("Request", "ModelNum").Length * 2).ToString()).PadLeft(4, '0');
                backdata += (chengxuhao + xinghaolength + xinghao).PadRight(104, 'F');

                string wuliaobianhao       = MathHelperEx.StrToASCII1(ini.ReadIni("Request", "WuLiaoBianHao"));
                string wuliaobianhaolength = MathHelper.DecToHex((ini.ReadIni("Request", "WuLiaoBianHao").Length * 2).ToString()).PadLeft(4, '0');
                backdata += (wuliaobianhaolength + wuliaobianhao).PadRight(100, 'F');

                if (this.socketServer.IsConnected(this.socketClient))
                {
                    characterConversion = new CharacterConversion();
                    this.socketServer.Send(this.socketClient, characterConversion.HexConvertToByte(backdata));
                    AddLog("返回PLC数据:" + backdata);
                    CopyMesToPlc();
                }
                this.LinkToPlcTimer.Start();
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    this.PlcState.Source = ConnectResult.Success;
                }));
            }
            catch
            {
                AddLog("PLC请求数据失败");
                this.LinkToPlcTimer.Start();
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    this.PlcState.Source = ConnectResult.Fail;
                }));
            }
        }
Ejemplo n.º 2
0
 private void SocketServer_NewMessage1Event(System.Net.Sockets.Socket socket, string Message)
 {
     try
     {
         if (this.opcHelper.OpcServerState == (int)OPCServerState.OPCRunning)
         {
             ModbusTcpServer modbusTcpServer = new ModbusTcpServer();
             modbusTcpServer.AffairID   = Message.Substring(0, 4);
             modbusTcpServer.ProtocolID = Message.Substring(4, 4);
             int requestDataLength = MathHelper.HexToDec(Message.Substring(Message.Length - 4, 4)); //请求数据长度
             modbusTcpServer.BackDataLength = MathHelper.DecToHex((requestDataLength * 2).ToString()).PadLeft(2, '0');
             modbusTcpServer.SlaveId        = Message.Substring(12, 2);
             modbusTcpServer.Length         = MathHelper.DecToHex((3 + requestDataLength * 2).ToString()).PadLeft(4, '0');
             string backdata = modbusTcpServer.AffairID + modbusTcpServer.ProtocolID + modbusTcpServer.Length + modbusTcpServer.SlaveId + ModbusFunction.ReadHoldingRegisters + modbusTcpServer.BackDataLength;
             if (models.Count < requestDataLength / 2)
             {
                 return;
             }
             for (int i = 0; i < requestDataLength / 2; i++)
             {
                 string a = MathHelper.SingleToHex(models[i].Value);
                 if (i == 25)
                 {
                     Console.WriteLine(a);
                 }
                 backdata += a.Substring(4, 4) + a.Substring(0, 4);
             }
             characterConversion = new CharacterConversion();
             this.SocketServer.Send(socket, characterConversion.HexConvertToByte(backdata));
         }
         else
         {
             if (ReConnectToOpcTimer.IsEnabled == false)
             {
                 ReConnectToOpcTimer.Start();
             }
         }
     }
     catch (Exception ex)
     {
         if (ReConnectToOpcTimer.IsEnabled == false)
         {
             ReConnectToOpcTimer.Start();
         }
         SimpleLogHelper.Instance.WriteLog(LogType.Error, ex);
     }
 }
Ejemplo n.º 3
0
 private void Com_DataReceiveEvent(object sender, COMMEventArgs e)
 {
     if (e.BackDataAsHex.Length == 16)
     {
         SimpleLogHelper.Instance.WriteLog(LogType.Info, "有数据请求:" + e.BackDataAsHex);
         //发送modbus
         var    a = ini.ReadIni("Config", "Name").Split(',');
         string b = "";
         foreach (var item in a)
         {
             b += ini.ReadIni("Config", item);
         }
         string length = (a.Length * 4).ToString("X2");
         b  = "0103" + length + b;
         b += CRC.ToModbusCRC16(b);
         SimpleLogHelper.Instance.WriteLog(LogType.Info, "返回的数据:" + b);
         CharacterConversion ch = new CharacterConversion();
         byte[] c = ch.HexConvertToByte(b);
         com.Send(c);
     }
 }
Ejemplo n.º 4
0
 private void PLCGetTimer_Tick(object sender, EventArgs e)
 {
     try
     {
         //检测连接是否成功
         if (socPlc.IsConnected)
         {
             if (this.IsIpOrPortChange())
             {
                 socPlc.Disconnect();
                 this.ConnectToPlc();
             }
             if (socPlc.IsConnected)
             {
                 SetConnectState(ConnectResult.Success);
                 string senddata = ini.ReadIni("Config", "SendData");  //01 E8 00 00 00 06 01 03 9D 08 00 7C
                 if (senddata.Length != 24)
                 {
                     SimpleLogHelper.Instance.WriteLog(LogType.Info, "SendData:" + senddata + " Length: " + senddata.Length);
                 }
                 CharacterConversion cc = new CharacterConversion();
                 socPlc.Send(socPlc.ClientSocket, cc.HexConvertToByte(senddata));
             }
             else
             {
                 SetConnectState(ConnectResult.Fail);
             }
         }
         else
         {
             socPlc.NewMessageEvent -= SocPlc_NewMessageEvent;
             if (ConnectToPlc())
             {
                 SetConnectState(ConnectResult.Success);
             }
             else
             {
                 SetConnectState(ConnectResult.Fail);
                 SetConnectState(imgAutoRun, "0");
                 SetConnectState(imgCheckState, "0");
                 SetConnectState(imgErrorState, "0");
                 SetConnectState(imgWaitState, "0");
             }
         }
         //检测数据库连接状态
         if (!sql.TestConn)
         {
             if (ConnectToDataBase())
             {
                 this.txbCaiJiXinXi.Foreground = new SolidColorBrush(Colors.White); //红色表示与数据库没有连接成功
             }
             else
             {
                 this.txbCaiJiXinXi.Foreground = new SolidColorBrush(Colors.Red); //红色表示与数据库没有连接成功
             }
         }
     }
     catch (Exception ex)
     {
     }
 }