Potrzebuję działający przykład programu Modbus slave napisany w BascomAVR współpracujący z DS18B20. Są przykłady dla Arduino, lecz to C, muszę mieć koniecznie w Bascomie.
Zmierzona temperatura jest przechowywana (już po przeliczeniu) w zmiennych Temperatura_x. Procesor ma ją wysłać poprzez MAX485 na magistralę Modbus RTU. Zmienna Temperatura_x jest typu single (4 bajty) aby zapisać liczbę zmiennoprzecinkową ze znakiem. W ostateczności mogę zrezygnować z wysyłania temperatur ujemnych z dokładnością do 0,1stC i ograniczyć się tylko do dodatnich z dokładnością 1stC, wystarczyła więc by zmienna 2-bajtowa (typowa dla modbusa). Numer urządzenia modbus slave ma być wpisany do programu jako stała, do magistrali będzie podpiętych kilka urządzeń. Numery rejestrów będą wpisane na stałe do programu:
40001 ... 40005 (tylko odczyt) - zmierzona temperatura
40010 ... 40015 (zapis i odczyt) - nastawiona temperatura
w przyszłości w innych rejestrach będą jeszcze kody błędów i dane czujników DS18B20.
Masterem jest już oprogramowany komputer PC.
W przykładach Bascoma jest program dla modbus master wykorzystujący bibliotekę modbus.lbx (jest ona w katalogu LIB Bascoma) która ma instrukcję makemodbus współpracującą z instruncją print.
http://avrhelp.mcselec.com/index.html?makemodbus.htm
Spotkałem kilka innych bibliotek o tej samej nazwie lecz obliczających jedynie CRC.
Nie udało mi się znależć przykładu i podobnej biblioteki na modbus slave aby można było łatwo napisać program. Nie ma być żadnych wyświetlaczy ani przycisków, tylko transmisja zmiennych po otrzymaniu polecenia z mastera (komputera PC). Poza tym musi być uniemożliwiona próba zapisu do zmiennych przechowujących zmierzona temperaturę.
Skonfigurowanie transmisji z procesora przez UART to nie problem bo jest w wymienionym przykładzie.
Zmierzona temperatura jest przechowywana (już po przeliczeniu) w zmiennych Temperatura_x. Procesor ma ją wysłać poprzez MAX485 na magistralę Modbus RTU. Zmienna Temperatura_x jest typu single (4 bajty) aby zapisać liczbę zmiennoprzecinkową ze znakiem. W ostateczności mogę zrezygnować z wysyłania temperatur ujemnych z dokładnością do 0,1stC i ograniczyć się tylko do dodatnich z dokładnością 1stC, wystarczyła więc by zmienna 2-bajtowa (typowa dla modbusa). Numer urządzenia modbus slave ma być wpisany do programu jako stała, do magistrali będzie podpiętych kilka urządzeń. Numery rejestrów będą wpisane na stałe do programu:
40001 ... 40005 (tylko odczyt) - zmierzona temperatura
40010 ... 40015 (zapis i odczyt) - nastawiona temperatura
w przyszłości w innych rejestrach będą jeszcze kody błędów i dane czujników DS18B20.
Masterem jest już oprogramowany komputer PC.
W przykładach Bascoma jest program dla modbus master wykorzystujący bibliotekę modbus.lbx (jest ona w katalogu LIB Bascoma) która ma instrukcję makemodbus współpracującą z instruncją print.
http://avrhelp.mcselec.com/index.html?makemodbus.htm
Spotkałem kilka innych bibliotek o tej samej nazwie lecz obliczających jedynie CRC.
Nie udało mi się znależć przykładu i podobnej biblioteki na modbus slave aby można było łatwo napisać program. Nie ma być żadnych wyświetlaczy ani przycisków, tylko transmisja zmiennych po otrzymaniu polecenia z mastera (komputera PC). Poza tym musi być uniemożliwiona próba zapisu do zmiennych przechowujących zmierzona temperaturę.
Skonfigurowanie transmisji z procesora przez UART to nie problem bo jest w wymienionym przykładzie.