====== Python ====== https://es.wikipedia.org/wiki/Python \\ https://www.python.org/ \\ https://pypi.org/ \\ https://www.geeksforgeeks.org/python-tkinter-tutorial/\\ http://python-para-impacientes.blogspot.com \\ https://docs.python-guide.org/ \\ https://learnxinyminutes.com/docs/es-es/python-es/ \\ [[https://tkinter-docs.readthedocs.io/en/latest/widgets/canvas.html#|dibujar con canvas]] \\ [[https://ricardogeek.com/python-vs-json-guia-para-serializar-y-deserializar/|JSON serializar y deserializar]] \\ [[http://www.jmgaguilera.com/inmersionenpython3html/node11.html|Serialización con pickle]] \\ \\ https://docs.python.org/3/ documentacion python version 3 \\ https://docs.python.org/3/library/tkinter.html \\ https://devfreebooks.github.io/python/ \\ \\ ===== Web ===== https://cherrypy.dev/ python en servidor web \\ http://www.brython.info ejecutar codigo python, en paginas web (lado cliente) \\ https://pyscript.net/ python en navegador del cliente \\ https://www.tutorialspoint.com/python3/python_cgi_programming.htm \\ http://cgi.tutorial.codepoint.net/session \\ https://bottlepy.org/docs/dev/index.html crear paginas web con python (lado servidor) \\ https://www.escuelapython.com/usa-python-en-el-navegador-con-transcrypt/ \\ https://pythontips.com/2019/05/22/running-python-in-the-browser/ \\ [[http://www.web2py.com/books/default/chapter/41/00/prologo|www.web2py.com/books]] \\ \\ [[https://diego.com.es/headers-del-protocolo-http|headers del protocolo http]] https://requests.readthedocs.io/es/latest/# \\ \\ [[https://proyectobeta.xyz/python-telegram-mensajes/|Enviar mensajes a mi **Telegram** usando un bot y Python]] \\ \\ ===== IPC (Inter-Process Communication) ===== https://docs.python.org/3/library/ipc.html \\ Unix socket = IPC socket \\ datagram socket = sin coneccion ~ UDP/IP\\ stream socket ~ TCP/IP\\ memory-mapped file = mmap \\ ===== Fecha, tiempos, calendario ===== https://schedule.readthedocs.io/en/stable/ \\ \\ ===== GUI ===== [[https://wiki.python.org/moin/TkInter|tkinter]] \\ [[https://wxpython.org/|wxPython]] \\ [[https://kivy.org|kivy]] //tambien para Android// \\ pyQt \\ pyGUI \\ pyforms https://pyforms.readthedocs.io \\ PySimpleGUI libreria basada en tkinter \\ ===== Data base, comunicacion ===== http://pythonhosted.org/pymodbus/ Py**Modbus** documentacion \\ \\ Tabla caracteres Unicode https://unicode-table.com/es \\ \\ ===== crear un ejecutable ===== https://pyoxidizer.readthedocs.io \\ https://www.pyinstaller.org \\ http://www.py2exe.org/ \\ https://pyoxidizer.readthedocs.io/en/latest/comparisons.html \\ \\ ===== PyModbus (RTU)===== import pymodbus # https://github.com/riptideio/pymodbus/ # https://pypi.org/project/pymodbus/ from pymodbus.client.sync import ModbusSerialClient config = {} config["rtu_serial"] = '/dev/ttyS0' config["rtu_timeout"] = 0.5 config["rtu_speed"] = 19200 config["rtu_par"] = 'N' # N=none, O=odd=inpar, E=even=par config["rtu_slave"] = 1 import glob scan = glob.glob('/dev/ttyS*') + glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') if config["rtu_serial"] in scan: print('serial ',config["rtu_serial"] +"' si existe") else: print("error: '"+ config["rtu_serial"] +"' no existe\n") msg = "encontrados: " for name in scan: msg = msg +"'"+ name +"' " print(msg) sys.exit(1) print('config:',config["rtu_speed"],'baud',' 8'+config["rtu_par"]+'1') rtu = ModbusSerialClient( port= config["rtu_serial"], method= "rtu", baudrate= config["rtu_speed"], bytesize= 8, parity= config["rtu_par"], stopbits= 1, timeout= config["rtu_timeout"] ) if rtu.connect(): print("hay conexion con rtu slave",config["rtu_slave"]) else: print("sin conexion con rtu slave",config["rtu_slave"]) #________________________________ def LeerBits(inicio,cantidad): """retorna una lista de valores""" bit = [] if rtu.connect(): resp= rtu.read_coils(inicio, cantidad, unit=config["rtu_slave"]) if not resp.isError(): bit = resp.bits return bit #________________________________ def EscribirBits(inicio,bits): """bits es una lista de valores""" resp= rtu.write_coils(inicio, bits, unit=config["rtu_slave"]) if not resp.isError(): return True else: return False #________________________________ def LeerEnteros(inicio,cantidad): """retorna una lista de valores""" reg = [] if rtu.connect(): resp= rtu.read_holding_registers(inicio, cantidad, unit=config["rtu_slave"]) if not resp.isError(): reg = resp.registers return reg #________________________________ def EscribirEnteros(inicio,regs): """regs es una lista de valores""" resp= rtu.write_registers(inicio, regs, unit=config["rtu_slave"]) if not resp.isError(): return True else: return False #________________________________ """ ejemplos con registros""" print('\nEscribir en reg %MW0 y siguientes: 0,1111,2222,3333,4444,5555,6666,7777,8888,9999') valores= [0,1111,2222,3333,4444,5555,6666,7777,8888,9999] EscribirEnteros(inicio=0, regs= valores) print('\nLeer 7 enteros, desde %MW0 hasta %MW6') print( LeerEnteros(inicio=0,cantidad=7) ) print('\nLeer 6 enteros, desde %MW3 hasta %MW8') print( LeerEnteros(inicio=3,cantidad=6) ) #________________________________ """ ejemplos con bits""" print('\nEscribir en bits %M0 y siguientes: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1') valores= [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] EscribirBits(inicio=0, bits= valores) print('\nLeer 16 bits, desde %M0 hasta %MW15') print( LeerBits(inicio=0,cantidad=16) ) print('\nEscribir 0 en bit %M3') EscribirBits(inicio=3, bits= [0]) print('\nLeer 16 bits, desde %M0 hasta %MW15') print( LeerBits(inicio=0,cantidad=16) ) rtu.close() # liberar puerto serial https://pypi.org/project/pyModSlave/ \\ https://github.com/zxlin/Modbus-PLC-Simulator \\ https://sourceforge.net/projects/pymodslave/ \\ https://sourceforge.net/projects/qmodmaster/ \\ Python Shelve Module https://www.pythoncheatsheet.org/modules/shelve-module https://rico-schmidt.name/pymotw-3/shelve/index.html ________________________________ TinyDB https://tinydb.readthedocs.io/en/latest/# _________________________________ pickleDB https://pypi.org/project/pickleDB/ _________________________________ ZODB