Połączenie z bazą przez gniazdo TCP

0

Cześć. Nie mogę się doszukać w internecie informacji na temat połączenia z bazą danych mssql i dokonywania zapytań za pośrednictwem gniazda TCP. Utworzyłem połączenie z serwerem mssql za pomocą gniazda. Używam sterownika PLC który ma możliwość komunikacji po gnieździe TCP/IP. Nie wiem jakiej użyć składni do połączenia się z bazą danych. Próbowałem różnych zapytań lecz sql server jakby nie interpretował tego poprawnie i za każdym razem zamyka połączenie generując w logu taki oto błąd :

03/14/2023 13:31:16,Logon,Unknown,Length specified in network packet payload did not match number of bytes read; the connection has been closed. Please contact the vendor of the client library. [CLIENT: 10.192.160.21]
03/14/2023 13:31:16,Logon,Unknown,Error: 17836<c/> Severity: 20<c/> State: 17.

Wszystkie przykłady np. w języku c++, c#, php itp. korzystają z bibliotek gdzie jest zawarty cały mechanizm połączenia z bazą. Gdzie znajdę informację na ten temat? Pozdrawiam Adam

0

a Twój sterownik pozwala połączyć się z bazą? BTW jaki to sterownik?

0
abrakadaber napisał(a):

a Twój sterownik pozwala połączyć się z bazą? BTW jaki to sterownik?

Tak ma możliwość połączenia po gnieździe TCP/IP. Sterownik Allen Bradley Controllogix poza tym ktoś to już wcześniej zrobił lecz kodu nie udostępni bezpłatnie więc sam chcę to zrobić.

2

To, co chcesz zrobić, jest bardzo podobne do roboty twórcy sterownika ODBC, JDBC czy podobnego. Przyjąć z sieci po surowym TCP w sposób tak, jak gada serwer bazy, a w swoim systemie udostępnic po lokalnym interfejsie programowym tak, jak gada klient bazy (operator, hasło, kolumna, wartość, metadane)
Da się, ale
a) mało kto to robi (to jest zrobione raz) i wsparcie w granicy dąży do zera. Uznane sterowniki np JDBC do MS-SQL są dwa, jeden od Micorosoftu
b) żmudne to bardzo - sam widzisz, ze nawet sam login nie jest prosty. *)

Z tych względów, ALE I BARDZO z zasadniczej niechęci, aby zdalnie wtykac w bazę danych **), pomyśl aby postarwić w jezyku propgramowania jaki znasz, na serwerze / w otoczeniu serwera endpoint HTTP i do niego zygać
Przykładów na użycie HTTP z róznych surowych architektur jest mnogo, da się to robić a surowego AVR, Z80, Arduino itd...

*) łącznie z tym, ze nowsze wersje baz danych są wrogie nieszyfrowanym połączeniom.
**) nie o tym post "dlaczego zdalne kukanie do bazy SQL jest złe", to dośc obszernie uzasadnione.

0

@ZrobieDobrze
Dzięki za odpowiedz, przynajmniej wiesz o co mi chodzi, stwierdzenie "po surowym TCP" jest bardzo trafne. Problem w tym, że już wiele innych opcji komunikacji sterownika z bazą danych o jakich m.in. wspominasz wyżej już przerobiłem, pora przyszła na właśnie coś takiego jak gniazdo TCP/IP :). Posiedzę jeszcze nad tym, coś może wykombinuję.

1
adamkce napisał(a):

@ZrobieDobrze
Dzięki za odpowiedz, przynajmniej wiesz o co mi chodzi, stwierdzenie "po surowym TCP" jest bardzo trafne. Problem w tym, że już wiele innych opcji komunikacji sterownika z bazą danych o jakich m.in. wspominasz wyżej już przerobiłem, pora przyszła na właśnie coś takiego jak gniazdo TCP/IP :). Posiedzę jeszcze nad tym, coś może wykombinuję.

No to na tym TCP (bo to dla sterownika PLC tylko nośnik) lepiej żeby chodził nie protokół bazy, ale protokół http
Sterownikowi rybka, "jakiś" TCP/IP chodzi, a tym masz o wiele bardziej standardową pracę.

Raczej dużo insertów chcesz robić, to dość częste, czy coś innego ?

0

No to na tym TCP (bo to dla sterownika PLC tylko nośnik) lepiej żeby chodził nie protokół bazy, ale protokół http
Sterownikowi rybka, "jakiś" TCP/IP chodzi, a tym masz o wiele bardziej standardową pracę.

Raczej dużo insertów chcesz robić, to dość częste, czy coś innego ?

Nie przewiduję tego typu rozwiązania do intensywnego zbierania danych procesowych i zapisywania w bazie ze względu na dodatkowe obciążenie sterownika. Zastosowanie to miało by miejsce w aplikacjach ,które nie będą takiego zapisu wymagały, a trzeba będzie szybko i w prosty sposób pomijając programy i komputer podłączyć się do istniejącej już bazy danych. Przy pomocy wcześniej stworzonych AOI dla sterownika. Zaciąganie procedur, gromadzenie informacji związanymi z szczególnymi zdarzeniami itp. Poza tym chciałbym mieć do dyspozycji i tego typu rozwiązanie. Nie wiadomo czasem, kiedy i do czego się może przydać i dopasować do okoliczności :)

0

Jeżeli masz 'operować' od 3 warstwy ISO/OSI - sieciowej i chcesz począwszy od tej warstwy zasymulować=zaprogramować dalszą komunikację z serwerem SQL, to może dobrym pomysłem jest przechwycić jakieś działające pakiety (czyli z jakiegoś klienta sql do serwera sql) opakowane od 3 warstwy wzwyż i spróbować copy-paste użyć tego, a potem się wzorować 'rozpakowując kolejne warstwy' zgodnie z ISO/OSI.
Mam nadzieję, że cokolwiek zrozumiale napisałem.

0
wemibo napisał(a):

Jeżeli masz 'operować' od 3 warstwy ISO/OSI - sieciowej i chcesz począwszy od tej warstwy zasymulować=zaprogramować dalszą komunikację z serwerem SQL, to może dobrym pomysłem jest przechwycić jakieś działające pakiety (czyli z jakiegoś klienta sql do serwera sql) opakowane od 3 warstwy wzwyż i spróbować copy-paste użyć tego, a potem się wzorować 'rozpakowując kolejne warstwy' zgodnie z ISO/OSI.
Mam nadzieję, że cokolwiek zrozumiale napisałem.

To nie MySQL lat 1999, tylko współczesny MS-SQL
Sniffowqanie może nie przynieść trwale użytecznych informacji, a wcale się nie uda w kanale szyfrowanym
Zanim kolega do czegokolwiek dojdzie, będzie zabijał pulę połączeń i nie wiadomo co jeszcze ...

adamkce napisał(a):

No to na tym TCP (bo to dla sterownika PLC tylko nośnik) lepiej żeby chodził nie protokół bazy, ale protokół http
Sterownikowi rybka, "jakiś" TCP/IP chodzi, a tym masz o wiele bardziej standardową pracę.

Raczej dużo insertów chcesz robić, to dość częste, czy coś innego ?

Nie przewiduję tego typu rozwiązania do intensywnego zbierania danych procesowych i zapisywania w bazie ze względu na dodatkowe obciążenie sterownika. Zastosowanie to miało by miejsce w aplikacjach ,które nie będą takiego zapisu wymagały, a trzeba będzie szybko i w prosty sposób pomijając programy i komputer podłączyć się do istniejącej już bazy danych. Przy pomocy wcześniej stworzonych AOI dla sterownika. Zaciąganie procedur, gromadzenie informacji związanymi z szczególnymi zdarzeniami itp. Poza tym chciałbym mieć do dyspozycji i tego typu rozwiązanie. Nie wiadomo czasem, kiedy i do czego się może przydać i dopasować do okoliczności :)

Nie wyobrażam sobie chaotycznego dewelopmentu na ograniczonych zasobach PLC, bez określenia scenariuszy
A określenie scenariuszy w moich oczach idealnie się zbiega z wykonaniem sobie projektu na serwerze pośredniczącym endpointu, np w pythonie

adamkce napisał(a):

a trzeba będzie szybko i w prosty sposób pomijając programy i komputer podłączyć się do istniejącej już bazy danych. Przy pomocy wcześniej stworzonych AOI dla sterownika. Zaciąganie procedur, gromadzenie informacji związanymi z szczególnymi zdarzeniami itp. Poza tym chciałbym mieć do dyspozycji i tego typu rozwiązanie. Nie wiadomo czasem, kiedy i do czego się może przydać i dopasować do okoliczności :)

Szybkie choćby na testy zaciagniecie procedury "na jeden strzał", zobaczyć czy zadziała - idealny argument za endpointem.

... i dopasować do okoliczności :)

Potencjal dopasowania znacznie większy

Zainteresuj się pytaniem, jak się ocenia dłubanie z daleka w bazach danych. Jest powszechnie uważane za antywzorzec.

0

Może czas wybrać sterownik PLC który ma już wbudowaną obsługę baz danych?
Chyba że tak bardzo chcesz możesz poszperać tu link
Pisanie drivera do bazy danych może nie jest trudne, ale za to bardzo czasochłonne.

0
Jedajo napisał(a):

Może czas wybrać sterownik PLC który ma już wbudowaną obsługę baz danych?
Chyba że tak bardzo chcesz możesz poszperać tu link
Pisanie drivera do bazy danych może nie jest trudne, ale za to bardzo czasochłonne.

Dzieki za podpowiedz, TDS to właściwy i chyba jedyny kierunek, wysłanie żądania logowania to ma sens. Trzeba będzie wysłać odpowiednią paczkę, jeśli dostanę obojętnie jaką odpowiedz z serwera to bedę już w domu. Pozdrawiam

Dobra poszło :) :
screenshot-20230316075751.png
Teraz tylko logowanie i cała reszta :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1