Tabla de Contenidos

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/

dibujar con canvas
JSON serializar y deserializar
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/
www.web2py.com/books

headers del protocolo http https://requests.readthedocs.io/es/latest/#

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

tkinter
wxPython
kivy tambien para Android
pyQt
pyGUI
pyforms https://pyforms.readthedocs.io
PySimpleGUI libreria basada en tkinter

Data base, comunicacion

http://pythonhosted.org/pymodbus/ PyModbus 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