private void ConnectToStation(object IP) { ModbusClient StationClient; try { StationClient = new ModbusClient((string)IP); sockethandler(this, new SocketDisconnectEvent() { status = "試車站PLC在線", TextColor = "WhiteSmoke" }); CallButtonChangeDel(Btn_StationDisconnect, Btn_StationConnect, Lab_StationConnecting); DisConnectToStation = true; while (true) { if (DisConnectToStation) { Thread.Sleep(1000); Form1.RWLock.AcquireWriterLock(2000); try { StationClient.ReadHoldRegister(1, 1, 20).CopyTo(Form1.StationDataBuffer, 0); } catch (SocketException) { sockethandler(this, new SocketDisconnectEvent() { status = "與試車站連線中斷", TextColor = "Red" }); CallButtonChangeDel(Btn_StationConnect, Btn_StationDisconnect, Lab_StationConnecting); StationClient.Disconnect(); break; } finally { Form1.RWLock.ReleaseWriterLock(); } } else { StationClient.Disconnect(); break; } } } catch (SocketException) { MessageBox.Show("未取得與伺服器的連線\n請檢察線路及IP是否正確", "連接錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); sockethandler(this, new SocketDisconnectEvent() { status = "未與試車站建立連結", TextColor = "Red" }); CallButtonChangeDel(Btn_StationConnect, Btn_StationDisconnect, Lab_StationConnecting); } //Customize_Function_Stop }
private void ConnectToStation() { try { ModbusClient StationClient = new ModbusClient("192.168.1.3"); StationConnectStatic = true; while (true) { Thread.Sleep(1000); try { RWLock.AcquireWriterLock(2000); StationClient.ReadHoldRegister(1, 0, 20).CopyTo(StationDataBuffer, 0); } catch (SocketException) { sockethandler(this, new SocketDisconnectEvent() { status = "與試車站連線中斷", TextColor = "Red" }); StationClient.Disconnect(); break; } finally { if (RWLock.IsWriterLockHeld) { RWLock.ReleaseWriterLock(); } } } } catch (SocketException) { StationConnectStatic = false; } }
private void ConnectToUnit(object IP) { try { ModbusClient UintClient = new ModbusClient((string)IP); UnitSocketHandler(this, new SocketDisconnectEvent() { status = "機組PLC在線", TextColor = "WhiteSmoke", OpenButton = true }); CallButtonChangeDel(Btn_UnitDisconnect, Btn_UnitConnect, Lab_UnitConnecting); DisConnectToUnit = true; while (true) { if (DisConnectToUnit) { Thread.Sleep(1000); RWLock2.AcquireWriterLock(2000); try { UintClient.ReadHoldRegister(1, 0, 68).CopyTo(UnitDataBuffer, 0); // TripArray.GetTrip(UnitDataBuffer[51], UnitDataBuffer[50], 0, 0, 0, 0,UnitDataBuffer[51], UnitDataBuffer[50], MainForm.broker.TripValueSearch("OldTrip", "UnitTrip"), TripType1, DateTime.Now,MainForm.broker); TripArray.GetTrip(UnitDataBuffer[51], UnitDataBuffer[50], UnitDataBuffer[53], UnitDataBuffer[52], UnitDataBuffer[53], UnitDataBuffer[52], MainForm.broker.TripValueSearch("OldTrip", "UnitTrip"), MainForm.broker.TripValueSearch("OldTrip2", "UnitTrip"), TripType1, TripType2, DateTime.Now, MainForm.broker); if (PCControl > 0) { for (int i = 0; i < Singal.Length; i++) { UintClient.WriteSingleCoil(1, (ushort)(8001 + i), Singal[i]); Singal[i] = false; } PCControl--; } } catch (SocketException) { UnitSocketHandler(this, new SocketDisconnectEvent() { status = "與機組連線中斷", TextColor = "Red" }); CallButtonChangeDel(Btn_UnitConnect, Btn_UnitDisconnect, Lab_UnitConnecting); UintClient.Disconnect(); break; } finally { RWLock2.ReleaseWriterLock(); } } else { UintClient.Disconnect(); break; } } } catch (SocketException) { MessageBox.Show("未取得與伺服器的連線\n請檢察線路及IP是否正確", "連接錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); UnitSocketHandler(this, new SocketDisconnectEvent() { status = "未與機組建立連結", TextColor = "Red" }); CallButtonChangeDel(Btn_UnitConnect, Btn_UnitDisconnect, Lab_UnitConnecting); } }