Hi Steve.
I am working on a NanoPC-T4 (FriendlyArm) with "FriendlyCore" operating system.
When I refer to the panel, it is the entire set of components integrated into the NanoPC-T4 (sorry my engles is not entirely good, therefore I support myself with the google translator).
I have a USB-RS232 / 485 / TTL (Waveshare) converter connected to one of the NanoPC-T4 ports. It is identified in the system as / dev / ttyUSB2. Up to this point everything is fine.
The problem is that when I run the program to maintain a service that gives me the data in this converter, said data to be consulted is lost very often, sometimes it is not even delivered for hours.
I share with you the program I am running for the "Slave Server RTU":
#----------------------------------------------------------------------------------------------------------
#!/usr/bin/env python
-- coding: utf_8 --
import sys
#add logging capability
import logging
import threading
import random
import time
import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus as modbus
import modbus_tk.modbus_rtu as modbus_rtu
import serial
import db
dbo = db.DB()
logger = modbus_tk.utils.create_logger(name="console", record_format="%(message)s")
Initial configuration
PARAMETERS = dbo.buscar("SELECT value FROM config where (parameter = 'MODBUS_SLAVE_PORT') OR (parameter = 'MODBUS_SLAVE_BAUDRATE') OR (parameter = 'MODBUS_SLAVE_DATABIT') OR (parameter = 'MODBUS_SLAVE_PARITY') OR (parameter = 'MODBUS_SLAVE_STOPBIT') OR (parameter = 'MODBUS_SLAVE_NUMBER') ")
PORT_RS485 = str(dbo.get_config("MODBUS_SLAVE_PORT"))
BAUDRATE_RS485 = int(dbo.get_config("MODBUS_SLAVE_BAUDRATE"))
DATABIT = int(dbo.get_config("MODBUS_SLAVE_DATABIT"))
MODBUS_PARITY = str(dbo.get_config("MODBUS_SLAVE_PARITY"))
MODBUS_STOPBIT = int(dbo.get_config("MODBUS_SLAVE_STOPBIT"))
MODBUS_SLAVE_NUMBER = int(dbo.get_config("MODBUS_SLAVE_NUMBER"))
print str(PORT_RS485) + " " + str(BAUDRATE_RS485) + " " + str(MODBUS_PARITY) + " " + str(MODBUS_STOPBIT) + " "
if name == "main":
#Create the server
server = modbus_rtu.RtuServer(serial.Serial(PORT_RS485, BAUDRATE_RS485, bytesize= DATABIT, parity=MODBUS_PARITY, stopbits=MODBUS_STOPBIT, xonxoff=0))
try:
logger.info("running...")
logger.info("enter 'quit' for closing the server")
server.start()
time.sleep(1)
#Definir numero de Esclavo
slave_1 = server.add_slave(MODBUS_SLAVE_NUMBER)
slave_1.add_block("a", 3, 0, 20)
sutvar = []
while 1:
PARAMETERS2 = dbo.buscar("SELECT value FROM config where (parameter = \'MODBUS_SLAVE_PORT\') OR (parameter = \'MODBUS_SLAVE_BAUDRATE\') OR (parameter = \'MODBUS_SLAVE_DATABIT\') OR (parameter = \'MODBUS_SLAVE_PARITY\') OR (parameter = \'MODBUS_SLAVE_STOPBIT\') OR (parameter = \'MODBUS_SLAVE_NUMBER\') ")
if(PARAMETERS == PARAMETERS2):
sql2 = dbo.buscar("SELECT PIPVAR, PDVAR, TIVAR, TMVAR, VXYVAR, VZVAR, CTVAR, VTVAR, DELTAP, ISOLATION, RELAY1, RELAY2, RELAY3, FIRMWARE, PIPPSI, PDPSI, TIPSI, TMPSI FROM LASTDATA where TIMESTAMP = \'1\'")
sutvar = [sql2[0][0],sql2[0][1]] #,sql2[0][2],sql2[0][3],sql2[0][4],sql2[0][5],sql2[0][6],sql2[0][7],sql2[0][8],sql2[0][9],sql2[0][10],sql2[0][11],sql2[0][12],sql2[0][13],sql2[0][14],sql2[0][15],sql2[0][16],sql2[0][17]
print sutvar
#vxyvar = sql2[0][4]
#sql6 = "UPDATE WDT set WDT1=\'" + str(vxyvar) + "\' "
#dbo.ejecutar(sql6)
#Tabla modbus estandar:
slave_1.set_values("a", 0, sutvar)
time.sleep(5)
else:
server.stop()
time.sleep(1)
print "Cambio la Configuracion"
PORT_RS485 = str(dbo.get_config("MODBUS_SLAVE_PORT"))
BAUDRATE_RS485 = int(dbo.get_config("MODBUS_SLAVE_BAUDRATE"))
DATABIT = int(dbo.get_config("MODBUS_SLAVE_DATABIT"))
MODBUS_PARITY = str(dbo.get_config("MODBUS_SLAVE_PARITY"))
MODBUS_STOPBIT = int(dbo.get_config("MODBUS_SLAVE_STOPBIT"))
MODBUS_SLAVE_NUMBER = int(dbo.get_config("MODBUS_SLAVE_NUMBER"))
server = modbus_rtu.RtuServer(serial.Serial(PORT_RS485, BAUDRATE_RS485, bytesize= DATABIT, parity=MODBUS_PARITY, stopbits=MODBUS_STOPBIT, xonxoff=0))
server.start()
slave_1 = server.add_slave(MODBUS_SLAVE_NUMBER)
slave_1.add_block("a", 3, 0, 20)
PARAMETERS = PARAMETERS2
except Exception, err:
print "Error sending data to the display"
pass
finally:
server.stop()