Skocz do zawartości

Wagowa kontrola magazynu


Pomocna odpowiedź

Napisano

Witam
Zaczynam temat z Raspberry i chciałbym dopytac o jedną rzecz na początku. Jakie Waszym zdaniem byloby najlepsze rozwiązanie jesli chodzi o wagową kontrolę półek. Chodzi mi o to ze będę miał około 30 pojemników w których będą różne artykuły ( jeden artykuł na jeden pojemnik). Pytanie moje nie tak o kod jak oprogramować, ale jak fizycznie podłączyć to wszystko zebym z kazdej wagi dostawał osobny sygnał? Jakie sensory polecacie? Sensory mogą być 2 typów, jeden do cięższych rzeczy gdzie łącznie na wadze bylo by ok 15 kg, drugi do lekkich ale z jak największą dokładnością. 

 

 

(edytowany)

Moduły na RS485/232, do 32 urządzeń bez reapetera teoretyczne, Każdy moduł to niezależne urządzenie które odpytuje master.

Są gotowe urządzenia obsługujące tensometry.: Można podłączyć tensometr do 20Kg. Producent daje pełna dokumentacje, są też filmy instruktarzowe na Youtube.

https://pl.aliexpress.com/item/1005004375093757.html?spm=a2g0o.order_list.order_list_main.515.7b211c24wcjC5p&gatewayAdapt=glo2pol

Dodaje dokumentację i dane katalogowe, bo wiem że nie każdy potrafi znaleźć.

Ogólnie pytanie, jaki asortyment chcesz ogarniać, śruby czy co?

 

WG18A02-1.rar

Edytowano przez BlackJack

Zakupiłem dla testu logiki działania 3 x HX711 plus tensometry do 1 kg. ale dalej nie widze patrząc po różnych schematach jak miałbym ich użyć żeby podłączyć ich ok 30 szt do jednego raspberry. Chodzi o to ze w zaleznosci od miejsca instalacji będę miał różną ilość wag do założenia. Potrzebuje rowiązanie w którym w programie podaje ilosc zainstalowanych urządzen a system po kolei je odpytuje, podając lokalizacje urzadzenia ktore zostało odpytane ( jakis identyfikator), to jaki to bedzie zasortyment to juz mniej wazne, bo wtedy tylko zmiana tensometrów i wzmacniaczy. 

38 minut temu, magier123 napisał:

Zakupiłem dla testu logiki działania 3 x HX711 plus tensometry do 1 kg. ale dalej nie widze patrząc po różnych schematach jak miałbym ich użyć żeby podłączyć ich ok 30 szt do jednego raspberry. Chodzi o to ze w zaleznosci od miejsca instalacji będę miał różną ilość wag do założenia. Potrzebuje rowiązanie w którym w programie podaje ilosc zainstalowanych urządzen a system po kolei je odpytuje, podając lokalizacje urzadzenia ktore zostało odpytane ( jakis identyfikator), to jaki to bedzie zasortyment to juz mniej wazne, bo wtedy tylko zmiana tensometrów i wzmacniaczy. 

Dla tego ci poleciłem ten moduł z ALI Przede wszystkim jest to praktycznie kompletna waga, z pełną jej funkcjonalnością. Każdemu modułowi nadajesz adres. Jest oprogramowanie, dokumentacja. Na czystym HX711 trzeba to robić prawie od zera, bo to tylko interfejs czujnika. tensometrycznego.

Szukać pod hasłem SCADA for Raspberry PI i Modbus RTU.

  • 3 tygodnie później...

@BlackJack Zamówiłem no i przyszło z ALI. Jednak mam problem z tym i czytam i dokumentacje i fora ale jednak nie znajduje odpowiedzi. Zastosowalem jakis prosty kod tego typu jak ponizej, udaje mi sie podlaczyc , ale zwrotnie otrzymuje bląd. 

minimalmodbus.InvalidResponseError: Checksum error in rtu mode: b'\x0bf' instead of b')\x8a' . The response is: b'\x7f~\xdf\xff\xff\xff\x0bf' (plain response: b'\x7f~\xdf\xff\xff\xff\x0bf')
 

"""
######################################################################

Simple Modbus Sensor Polling Code
Coded By "The Intrigued Engineer" over a coffee

Minimal Modbus Library Documentation
https://minimalmodbus.readthedocs.io/en/stable/

Thanks For Watching!!!

######################################################################
"""

import minimalmodbus # Don't forget to import the library!!

mb_address = 1 # Modbus address of sensor

sensy_boi = minimalmodbus.Instrument('/dev/ttyS0',mb_address)	# Make an "instrument" object called sensy_boi (port name, slave address (in decimal))

sensy_boi.serial.baudrate = 9600				# BaudRate
sensy_boi.serial.bytesize = 8					# Number of data bits to be requested
sensy_boi.serial.parity = minimalmodbus.serial.PARITY_NONE	# Parity Setting here is NONE but can be ODD or EVEN
sensy_boi.serial.stopbits = 1					# Number of stop bits
sensy_boi.serial.timeout  = 0.5					# Timeout time in seconds
sensy_boi.mode = minimalmodbus.MODE_RTU				# Mode to be used (RTU or ascii mode)

# Good practice to clean up before and after each execution
sensy_boi.clear_buffers_before_each_transaction = True
sensy_boi.close_port_after_each_call = True

## Uncomment this line to print out all the properties of the setup a the begining of the loop
#print(sensy_boi) 

print("")
print("Requesting Data From Sensor...")	# Makes it look cool....

# NOTE-- Register addresses are offset from 40001 so inputting register 0 in the code is actually 40001, 3 = 40004 etc...

## Example of reading SINGLE register
## Arguments - (register address, number of decimals, function code, Is the value signed or unsigned) 
## Uncomment to run this to just get temperature data

#single_data= sensy_boi.read_register(1, 1, 3, False) 
#print (f"Single register data = {single_data}")

# Get list of values from MULTIPLE registers 
# Arguments - (register start address, number of registers to read, function code) 
data =sensy_boi.read_registers(0, 2, 3) 

print("")
print(f"Raw data is {data}") # Shows the raw data list for the lolz

# Process the raw data by deviding by 10 to get the actual floating point values
hum = data[0]/10
temp = data[1]/10

# Print out the processed data in a little table
# Pro-tip > \u00B0 is the unicode value for the degree symbol which you can see before the "C" in temperature
print("-------------------------------------")
print(f"Temperature = {temp}\u00B0C")
print(f"Relative Humidity = {hum}%")
print("-------------------------------------")
print("")

# Piece of mind close out
sensy_boi.serial.close()
print("Ports Now Closed")

W przypadku takiego kodu jak tutaj ponizej dostaje odpowiedz ale nijak ma sie ona do tego co w dokumentacji

 

import time
import serial
import binascii



ser = serial.Serial(
        port='/dev/ttyS0',
        baudrate = 9600,
        parity=serial.PARITY_NONE,
        stopbits=1,
        bytesize=serial.EIGHTBITS,
        timeout=1
)

while 1:
    ser.write(b'\x01\x03\x00\x00\x00\x03\x05\xCB')
    x=ser.readline()
  
    hex_string = binascii.hexlify(x).decode('utf-8')
    wynik = str(hex_string)
    print(wynik)

a odpowiedz jest taka 7f7ebeffffffffffbd1500

  • 3 tygodnie później...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...