import OpenOPC import time import socket while True: try: opc = OpenOPC.client() opc.connect("OWEN.RS485") s = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) # UDP addr = ('narodmon.ru',1234) # ip:port " " val = opc['Com1/TRM138(8bit adr=24)/ChannelData3/rEAd'] buf = "#123456789ABCDE\n#123456789ABCDE10#" +"%.1f#"%val + "\n##" s.sendto(buf,addr) opc.close() s.close() except : pass time.sleep(180)
# -*- coding: utf-8 -*- import win32serviceutil import win32service import win32event import servicemanager import OpenOPC import socket class AppServerSvc (win32serviceutil.ServiceFramework): _svc_name_ = "ServiceForNarodmon" _svc_display_name_ = "ServiceForNarodmon" _svc_description_ = "Service For Narodmon.ru" def __init__(self,args): win32serviceutil.ServiceFramework.__init__(self,args) self.hWaitStop = win32event.CreateEvent(None,0,0,None) self.hWaitResume = win32event.CreateEvent(None, 0, 0, None) self.timeout = 60000 # self.resumeTimeout = 1000 self._paused = False def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) #servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, #servicemanager.PYS_SERVICE_STOPPED, #(self._svc_name_, '')) def SvcPause(self): self.ReportServiceStatus(win32service.SERVICE_PAUSE_PENDING) self._paused = True self.ReportServiceStatus(win32service.SERVICE_PAUSED) #servicemanager.LogInfoMsg("The %s service has paused." % (self._svc_name_, )) def SvcContinue(self): self.ReportServiceStatus(win32service.SERVICE_CONTINUE_PENDING) win32event.SetEvent(self.hWaitResume) self.ReportServiceStatus(win32service.SERVICE_RUNNING) #servicemanager.LogInfoMsg("The %s service has resumed." % (self._svc_name_, )) def SvcDoRun(self): #servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, # servicemanager.PYS_SERVICE_STARTED, # (self._svc_name_,"")) self.main() # def main(self): # #servicemanager.LogInfoMsg("Hello! Im a Narodmon.ru Service.") while 1: # #servicemanager.LogInfoMsg("I'm still here.") try: opc = OpenOPC.client() opc.connect("OWEN.RS485") s = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) # UDP addr = ('narodmon.ru',1234) # ip:port " " val = opc['Com1/TRM138(8bit adr=24)/ChannelData3/rEAd'] buf = "#123456789ABCDE\n#123456789ABCDE10#" +"%.1f#"%val + "\n##" s.sendto(buf,addr) opc.close() s.close() except : pass # rc = win32event.WaitForSingleObject(self.hWaitStop, self.timeout) if rc == win32event.WAIT_OBJECT_0: # #servicemanager.LogInfoMsg("Bye!") break # if self._paused: pass #servicemanager.LogInfoMsg("I'm paused... Keep waiting...") # while self._paused: # rc = win32event.WaitForSingleObject(self.hWaitResume, self.resumeTimeout) if rc == win32event.WAIT_OBJECT_0: self._paused = False # #servicemanager.LogInfoMsg("Yeah! Let's continue!") break if __name__ == '__main__': win32serviceutil.HandleCommandLine(AppServerSvc)
Source: https://habr.com/ru/post/156277/
All Articles