def __init__(self, CtrlServerLst): i = 0 # Get the constant from 'common.h' file active. CTE = Constante("common.h") CTE.ParseFile() # Get the host IP address. # if your PC / Host have several Ethernet/IP port, # you might not get the IP address you want !!!!!!!! self.ipLocal = socket.gethostbyname(socket.gethostname()) # The list of Server from self.ServerLst = [] # Array of server with IP, Port and name self.UDPClientSocket = [ ] # Array of the socket created: one per server. # Assigned the port for each server, then create the socket associated to each server for i in range(0, len(CtrlServerLst)): CtrlPt = CtrlServerLst[i] BYTES = CtrlPt.ip.split( '.' ) # Socket Port number as port = 43150 + the fourth digit of the IP Address Byte4 = int( BYTES[3] ) # ==> For 192.168.1.100 the port will be 43150 + 100 ==> 43250 CtrlPt.port = CTE.PORT + Byte4 self.server = server(CtrlPt.name, CtrlPt.ip, CtrlPt.port) self.ServerLst.append(self.server) sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) # Use full trace print("Create socket for", CtrlPt.name, "IP:", CtrlPt.ip, "PORT:", CtrlPt.port) sock.bind((self.ipLocal, CtrlPt.port)) sock.setblocking(0) self.UDPClientSocket.append(sock)
0] # Read current value minVal = key.getElementsByTagName(TagMin)[0] oldMinValue = minVal.firstChild.nodeValue # Get previous values oldMaxValue = maxVal.firstChild.nodeValue print("Replacing minValue:" + oldMinValue + " by new value:" + str(MinValue)) print("Replacing maxValue:" + oldMaxValue + " by new value:" + str(MaxValue)) minVal.firstChild.nodeValue = MinValue # Assign new values maxVal.firstChild.nodeValue = MaxValue with open('ControlServer_test.xml', 'w') as f: f.write(self.doc.toxml()) f.close() break return CtrlPoint if __name__ == "__main__": CTE = Constante("common.h") # From ParseCommonHeader.py CTE.ParseFile() CtrlServerLst = [] # ControlServers without the HMI aspect XML = XMLConfig(CTE.XML_cfgFile, "Locomotive", "TrackSwitch") CtrlServerLst = XML.ParseXML() XML.UpdateTrackSwitch(CTE.XML_cfgFile, "192.168.1.108", 0, 11, 111)
class ChangeTrim: def __init__(self, master, _ControlPoint, NumTrimmer, _commESP): ######################################### self.allure = 0 # Initially stopped self.CTE=Constante("common.h") # From ParseCommonHeader.py self.CTE.ParseFile() self.commESP = _commESP # get the liste of Server, contain only communicationa artefacts self.ControlPoint = _ControlPoint self.NumTrimmer = NumTrimmer self.top = Toplevel(master) # Link with master window self.top.withdraw() # Dp Not display empty window self.top.grab_set() self.CreateTrimScale(self.top) def SetTrimValueLeft(self, value): print("==> LEFT", value) self.ControlPoint.TrimLeft[self.NumTrimmer] = value self.commESP.MsgForkLeft[1] = self.NumTrimmer+1 self.commESP.MsgForkLeft[2] = int(value) self.commESP.SendData(self.commESP.MsgForkLeft, self.ControlPoint.numCtrlPoint) return def SetTrimValueRight(self, value): print("==> RIGHT", value) self.ControlPoint.TrimRight[self.NumTrimmer] = value self.commESP.MsgForkRight[1] = self.NumTrimmer+1 self.commESP.MsgForkRight[2] = int(value) self.commESP.SendData(self.commESP.MsgForkRight, self.ControlPoint.numCtrlPoint) return def ValidateRight(self): print("ValidateRight") return def ValidateLeft(self): print("ValidateRight") return def CreateTrimScale(self, master): Head = Canvas(Toplevel(master), bg='light blue', height=600, width=800, borderwidth=5) Head.grid(row=1, column=3, sticky='NW', padx=4, pady=4) frameTitre = Frame(Head, width=1200, borderwidth = 3, height=30,bg='dark blue', relief="sunken", highlightcolor="red", highlightthickness=2 ) frameTitre.grid(row=0, column=3) LabelTitre = Label(frameTitre, text="*** Set the minimum and maximum values of the servo motors ***", font="Arial 12", height=2, bg='light blue') LabelTitre.grid(row=0, column=3) Trim = Frame(Head, width=1200, borderwidth=5, height=30, bg='dark blue', relief="sunken", highlightcolor="red", highlightthickness=2) Trim.grid(row=4, column=3, rowspan=1, sticky='NW', padx=4, pady=4) SetTrim = Frame(Trim, width=1200, height=50, borderwidth=6, bg='light blue', relief="ridge") SetTrim.grid(row=3, column=5, sticky='NW') Label1 = Label(SetTrim, text=self.ControlPoint.name + '\n' + self.ControlPoint.ip, font="Arial 12", height=3, width=15, bg='light blue') Label1.grid(row=1, column=0, rowspan=3, padx=3) TrimmerRight = Scale(SetTrim, variable=self.ControlPoint.TrimRight[self.NumTrimmer], resolution=1, orient=HORIZONTAL, length=600,bg='light blue', showvalue=1, from_=0, to_= 90, tickinterval=5, command=self.SetTrimValueRight) TrimmerRight.set(self.ControlPoint.TrimRight[self.NumTrimmer]) TrimmerRight.grid(row=1, column=1, columnspan=3) TrimmerRight.config(state='active') TrimmerRight.lower() TxtButton2 = 'RIGHT: '+str(self.ControlPoint.TrimRight[self.NumTrimmer]) LeftButton = Button(SetTrim, text=TxtButton2, bg='light blue', command=self.ValidateLeft) LeftButton.grid(row=1, column=4) QuitButton = Button(SetTrim, text="QUIT-SAVE", command=self.QuitSave) QuitButton.grid(row=2, column=4) TrimmerLeft = Scale(SetTrim, variable=self.ControlPoint.TrimLeft[self.NumTrimmer], orient=HORIZONTAL, length=600,bg='light blue', showvalue=25, from_=90, to_=180, tickinterval=5, command=self.SetTrimValueLeft) TrimmerLeft.set(self.ControlPoint.TrimLeft[self.NumTrimmer]) TrimmerLeft.grid(row=3, column=1, columnspan=3) TrimmerLeft.config(state='active') TrimmerLeft.lower() TxtButton1 = 'LEFT:'+str(self.ControlPoint.TrimLeft[self.NumTrimmer]) RightButton = Button(SetTrim, text=TxtButton1, bg='light blue', command=self.ValidateRight) RightButton.grid(row=3, column=4) print("Fin CreateTrimScale") def QuitSave(self): print("QUIT SAVE") minValue=self.ControlPoint.TrimLeft[self.NumTrimmer] maxValue=self.ControlPoint.TrimRight[self.NumTrimmer] print("ControlPoint:"+self.ControlPoint.name+" NumTrim:",self.NumTrimmer) print("TrimLeft, min value: " , minValue) print("TrimRight, maxValue: " , maxValue) XML = CFG.XMLConfig(self.CTE.XML_cfgFile, " ", "TrackSwitch") # def UpdateTrackSwitch(self, xmlFilename, ip, NumSwitch, MinValue, MaxValue): XML.UpdateTrackSwitch(self.CTE.XML_cfgFile, self.ControlPoint.ip, self.NumTrimmer, minValue, maxValue) self.top.destroy()