mac에서 되나 궁금해서 검색. 된다고는 하는데 openGL deprecate 된대서 어떻게 될지 모르겠네
'프로그램 사용 > sdl' 카테고리의 다른 글
SDL - Simple DirectMedia Layer (0) | 2021.07.06 |
---|---|
libsdl + mfc (0) | 2017.02.09 |
SDL - Simple DirectMedia Layer (0) | 2011.12.12 |
mac에서 되나 궁금해서 검색. 된다고는 하는데 openGL deprecate 된대서 어떻게 될지 모르겠네
SDL - Simple DirectMedia Layer (0) | 2021.07.06 |
---|---|
libsdl + mfc (0) | 2017.02.09 |
SDL - Simple DirectMedia Layer (0) | 2011.12.12 |
인스톨러 이쁘게 잘 만들었네
초기 메뉴에서 spacebar가 기본값이 재생인데 이경우에는 shift-space 로 도구를 띄우고
도구로 되어있으면 shift-space 가 재생으로 작동한다.
blender render node (0) | 2024.03.20 |
---|---|
BGE / UPBGE(Blender game engine) (0) | 2023.10.20 |
big bunny blender project file (0) | 2022.05.22 |
블렌더 강좌? (유료) (0) | 2021.08.07 |
blender 포켓몬 애니메이션 (0) | 2020.08.08 |
문득 블렌더 돌려보고 싶어서 다운로드 하다가
blender로 만든 동영상이 생각나서 다운로드 해두려고 검색
[링크 : http://bbb3d.renderfarming.net/explore.html]
[링크 : http://distribution.bbb3d.renderfarming.net/blender/blender.zip]
BGE / UPBGE(Blender game engine) (0) | 2023.10.20 |
---|---|
blender on macos (0) | 2022.05.24 |
블렌더 강좌? (유료) (0) | 2021.08.07 |
blender 포켓몬 애니메이션 (0) | 2020.08.08 |
blender physical simulation (0) | 2018.03.19 |
make menuconfig 하면 먼가 그럴싸하게 그려주는게 ncurses 인데
라이브러리는 curses.h 이다. 찾아보니 New Curses 라서 ncurses라고..
[링크 : https://ko.wikipedia.org/wiki/Ncurses]
좌표만 주면 알아서 써주는 것 같은데
드래그 하면 창 크기 알아서 읽어서 박스 그리는건 어떻게 해야하려나?
/* CURHELLO.C ========== (c) Copyright Paul Griffiths 1999 Email: mail@paulgriffiths.net "Hello, world!", ncurses style. */ #include <stdlib.h> #include <stdio.h> #include <unistd.h> /* for sleep() */ #include <curses.h> int main(void) { WINDOW * mainwin; /* Initialize ncurses */ if ( (mainwin = initscr()) == NULL ) { fprintf(stderr, "Error initialising ncurses.\n"); exit(EXIT_FAILURE); } /* Display "Hello, world!" in the centre of the screen, call refresh() to show our changes, and sleep() for a few seconds to get the full screen effect */ mvaddstr(13, 33, "Hello, world!"); refresh(); sleep(3); /* Clean up after ourselves */ delwin(mainwin); endwin(); refresh(); return EXIT_SUCCESS; } |
[링크 : https://www.paulgriffiths.net/program/c/srcs/curhellosrc.html]
[링크 : http://www.paulgriffiths.net/program/c/curses.php]
API
[링크 : https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html]
ncurses 상자 및 색상 적용하기 (0) | 2024.12.02 |
---|---|
ncurses 예제 (0) | 2024.11.30 |
ncurse (0) | 2015.04.27 |
pi 라는 함수들이 있어서 찾아보니 코드로는 모르겠고
도움말에서 검색.. Protocol Independent. 무슨 의미이려나?
아무튼 메모리 1Kb 더 먹고 hostname resolve를 제공한다는 것 같은데(resolution은 또 머야..)
그 기능만 차이가 있다면 굳이 pi를 쓸 이유는 없을 듯
TCP (IPv4) ContextThe TCP backend implements a Modbus variant used for communications over TCP/IPv4 networks. It does not require a checksum calculation as lower layer takes care of the same.
Create a Modbus TCP contextmodbus_new_tcp(3)
TCP PI (IPv4 and IPv6) ContextThe TCP PI (Protocol Indepedent) backend implements a Modbus variant used for communications over TCP IPv4 and IPv6 networks. It does not require a checksum calculation as lower layer takes care of the same.
Contrary to the TCP IPv4 only backend, the TCP PI backend offers hostname resolution but it consumes about 1Kb of additional memory.
Create a Modbus TCP contextmodbus_new_tcp_pi(3)
|
libmodbus backend (0) | 2025.03.13 |
---|---|
libmodbus modbus_mapping_new() (0) | 2022.05.10 |
libmodbus poll 적용 (0) | 2022.05.04 |
modbus tcp (0) | 2022.05.04 |
libmodbus 예제 프로그램 (0) | 2022.05.04 |
함수는 간단한데.. 예제가 이상하게 만들어 놔서 헷갈렸네..
아무튼 modbus_mapping_new() 함수의 인자들은
coil / discrete input / holding register / input register 에 대한 변수를 몇개까지 유지하냐에 대한 값을 받는다.
modbus_mapping_t modbus_mapping_new(int nb_bits, int nb_input_bits, int nb_registers, int nb_input_registers); |
[링크 : https://libmodbus.org/docs/v3.0.8/modbus_mapping_new.html]
libmodbus의 test 에 생성된 unit-test.h 소스에서 추출하고
29 const uint16_t UT_BITS_ADDRESS = 0x130; 30 const uint16_t UT_BITS_NB = 0x25; 31 const uint8_t UT_BITS_TAB[] = { 0xCD, 0x6B, 0xB2, 0x0E, 0x1B }; 32 33 const uint16_t UT_INPUT_BITS_ADDRESS = 0x1C4; 34 const uint16_t UT_INPUT_BITS_NB = 0x16; 35 const uint8_t UT_INPUT_BITS_TAB[] = { 0xAC, 0xDB, 0x35 }; 36 37 const uint16_t UT_REGISTERS_ADDRESS = 0x160; 38 const uint16_t UT_REGISTERS_NB = 0x3; 39 const uint16_t UT_REGISTERS_NB_MAX = 0x20; 40 const uint16_t UT_REGISTERS_TAB[] = { 0x022B, 0x0001, 0x0064 }; 56 const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x108; 57 const uint16_t UT_INPUT_REGISTERS_NB = 0x1; 58 const uint16_t UT_INPUT_REGISTERS_TAB[] = { 0x000A }; |
최신 문서에서 보는데 오히려 더 헷갈린다.
/* The first value of each array is accessible from the 0 address. */ mb_mapping = modbus_mapping_new(BITS_ADDRESS + BITS_NB, INPUT_BITS_ADDRESS + INPUT_BITS_NB, REGISTERS_ADDRESS + REGISTERS_NB, INPUT_REGISTERS_ADDRESS + INPUT_REGISTERS_NB); |
[링크 : https://libmodbus.org/docs/v3.1.6/modbus_mapping_new.html]
-> [링크 : https://libmodbus.org/reference/modbus_mapping_new/] 2025.03.12
아래처럼 수정하고
mb_mapping = modbus_mapping_new(10,10,10,10); |
modbus poll 프로그램에서 아래와 같이 실제 설정된 크기보다 크게 읽도록 하니
illegal data address 라고 에러가 발생한다.
아무튼.. 메모리 시작 번지는 의미가 없고 그냥 0번지 부터 해당 크기 만큼 응답하게 되는 듯?
+
[링크 : https://www.codetd.com/ko/article/12030369]
libmodbus backend (0) | 2025.03.13 |
---|---|
libmodbus pi 함수들 (0) | 2022.05.10 |
libmodbus poll 적용 (0) | 2022.05.04 |
modbus tcp (0) | 2022.05.04 |
libmodbus 예제 프로그램 (0) | 2022.05.04 |
기본 소스를 사용해보면. modbus_receive() 에서 블록킹 된 상태라서 다른걸 할 수가 없다.
검색을 해보니 libmodbus issue 쪽에서 발견한 내용으로
poll 에서 확인이 되면 소켓을 modbus_set_socket() 함수를 이용하여 context에 연결하고 receive 하도록 구성되어 있다.
modbus_t *ctx = modbus_new_tcp("0.0.0.0", port_); int server_socket = modbus_tcp_listen(ctx, 2); if (server_socket < 0) { // error handling modbus_free(ctx); return; } if (p->revents & POLLIN) { modbus_set_socket(ctx, p->fd); // set the socket to libmodbus answers to the right client uint8_t query[MODBUS_RTU_MAX_ADU_LENGTH]; int rc = modbus_receive(ctx, query); if (rc <= 0) { // connection has been closed actually by the client ::close(p->fd); p = sockets.erase(p); // remove it from the poll-array continue; } /* rc is the query size */ rc = modbus_reply_callback(ctx, query, rc); // handle the reply (via the callbacks) if (rc < 0) { // error handling - invalid request ::close(p->fd); // close client p = sockets.erase(p); continue; } } |
[링크 : https://github.com/stephane/libmodbus/issues/173]
[링크 : https://libmodbus.org/docs/v3.0.8/modbus_set_socket.html]
libmodbus pi 함수들 (0) | 2022.05.10 |
---|---|
libmodbus modbus_mapping_new() (0) | 2022.05.10 |
modbus tcp (0) | 2022.05.04 |
libmodbus 예제 프로그램 (0) | 2022.05.04 |
libmodbus tcp 예제 (0) | 2022.05.04 |
modbus tcp의 MBAP(ModBus Application Protocol) 헤더(?)에는 아래와 같은 내용들이 들어있다.
[링크 : https://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf]
[링크 : http://comfilewiki.co.kr/ko/doku.php?id=tcpport:modbus-tcp_프로토콜이란:index]
Function Code (0x03) + start Address(0x0000) + quantity of regitster(0x0001)
Protocol ID(0x0000 고정) Length Function Code 00 01 00 00 00 06 03 03 00 00 00 01 Unit ID(0x01 고정) Transaction ID (시퀀셜 증가) |
-a로 tcp MBAP 상의 Unit ID를 변경할 순 있지만 ID=1 로 고정되어 있다고 하니 어떻게 처리를 해야 하려나?
$ sudo ./modpoll -m tcp localhost 00 01 00 00 00 06 01 03 00 00 00 01 $ sudo ./modpoll -m tcp -a 3 localhost 00 01 00 00 00 06 03 03 00 00 00 01 |
$ ./modpoll --help modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator Copyright (c) 2002-2021 proconX Pty Ltd Visit https://www.modbusdriver.com for Modbus libraries and tools. Usage: modpoll [OPTIONS] SERIALPORT|HOST [WRITEVALUES...] Arguments: SERIALPORT Serial port when using Modbus ASCII or Modbus RTU protocol COM1, COM2 ... on Windows /dev/ttyS0, /dev/ttyS1 ... on Linux HOST Host name or dotted IP address when using MDBUS/TCP protocol WRITEVALUES List of values to be written. If none specified (default) modpoll reads data. General options: -m ascii Modbus ASCII protocol -m rtu Modbus RTU protocol (default if SERIALPORT contains a /) -m tcp MODBUS/TCP protocol (default otherwise) -m udp MODBUS UDP -m enc Encapsulated Modbus RTU over TCP -a # Slave address (1-247 for serial, 0-255 for TCP, 1 is default) -r # Start reference (1-65536, 100 is default) -c # Number of values to read (1-125, 1 is default), optional for writing (use -c 1 to force FC5 or FC6) -t 0 Discrete output (coil) data type -t 1 Discrete input data type -t 3 16-bit input register data type -t 3:hex 16-bit input register data type with hex display -t 3:int 32-bit integer data type in input register table -t 3:mod 32-bit module 10000 data type in input register table -t 3:float 32-bit float data type in input register table -t 4 16-bit output (holding) register data type (default) -t 4:hex 16-bit output (holding) register data type with hex display -t 4:int 32-bit integer data type in output (holding) register table -t 4:mod 32-bit module 10000 type in output (holding) register table -t 4:float 32-bit float data type in output (holding) register table -i Slave operates on big-endian 32-bit integers -f Slave operates on big-endian 32-bit floats -e Use Daniel/Enron single register 32-bit mode (implies -i and -f) -0 First reference is 0 (PDU addressing) instead 1 -1 Poll only once only, otherwise every poll rate interval -l # Poll rate in ms, (1000 is default) -o # Time-out in seconds (0.01 - 10.0, 1.0 s is default) Options for MODBUS/TCP, UDP and RTU over TCP: -p # IP protocol port number (502 is default) Options for Modbus ASCII and Modbus RTU: -b # Baudrate (e.g. 9600, 19200, ...) (19200 is default) -d # Databits (7 or 8 for ASCII protocol, 8 for RTU) -s # Stopbits (1 or 2, 1 is default) -p none No parity -p even Even parity (default) -p odd Odd parity -4 # RS-485 mode, RTS on while transmitting and another # ms after |
libmodbus modbus_mapping_new() (0) | 2022.05.10 |
---|---|
libmodbus poll 적용 (0) | 2022.05.04 |
libmodbus 예제 프로그램 (0) | 2022.05.04 |
libmodbus tcp 예제 (0) | 2022.05.04 |
libmodbus (0) | 2022.05.03 |
$ sudo find / -name "modbus\.h" /usr/include/modbus/modbus.h |
$ ll /usr/lib/x86_64-linux-gnu/libmodbus.so* lrwxrwxrwx 1 root root 18 12월 4 01:53 /usr/lib/x86_64-linux-gnu/libmodbus.so -> libmodbus.so.5.0.5 lrwxrwxrwx 1 root root 18 12월 4 01:53 /usr/lib/x86_64-linux-gnu/libmodbus.so.5 -> libmodbus.so.5.0.5 -rw-r--r-- 1 root root 39256 12월 4 01:53 /usr/lib/x86_64-linux-gnu/libmodbus.so.5.0.5 |
$ cat Makefile all: gcc modbus_tcp_server.c -o modbustcp -I/usr/include/modbus -lmodbus -L/usr/lib/x86_64-linux-gnu clean: rm modbustcp |
$ pkg-config --libs --cflags libmodbus -I/usr/include/modbus -lmodbus |
[링크 : https://github.com/stephane/libmodbus/issues/123]
+
modbus_mapping_new_start_address()가 없고 modbus_mapping_new() 있긴 하다..
$ readelf -Ws /usr/lib/x86_64-linux-gnu/libmodbus.so | grep "modbus_" 48: 0000000000004ce0 222 FUNC GLOBAL DEFAULT 12 modbus_report_slave_id 49: 0000000000005320 208 FUNC GLOBAL DEFAULT 12 _modbus_rtu_check_integrity 50: 0000000000005050 86 FUNC GLOBAL DEFAULT 12 modbus_get_byte_from_bits 51: 0000000000004400 102 FUNC GLOBAL DEFAULT 12 modbus_read_bits 52: 0000000000004fd0 38 FUNC GLOBAL DEFAULT 12 modbus_set_bits_from_byte 53: 00000000000057e0 183 FUNC GLOBAL DEFAULT 12 modbus_rtu_set_serial_mode 54: 00000000000047a0 14 FUNC GLOBAL DEFAULT 12 modbus_write_register 55: 00000000000047b0 470 FUNC GLOBAL DEFAULT 12 modbus_write_bits 56: 0000000000004470 102 FUNC GLOBAL DEFAULT 12 modbus_read_input_bits 57: 0000000000003040 2825 FUNC GLOBAL DEFAULT 12 modbus_reply 58: 0000000000004690 94 FUNC GLOBAL DEFAULT 12 modbus_read_input_registers 59: 00000000000060d0 490 FUNC GLOBAL DEFAULT 12 modbus_tcp_pi_listen 60: 0000000000005ab0 3 FUNC GLOBAL DEFAULT 12 _modbus_tcp_check_integrity 61: 00000000000059f0 97 FUNC GLOBAL DEFAULT 12 _modbus_tcp_build_request_basis 62: 0000000000005000 69 FUNC GLOBAL DEFAULT 12 modbus_set_bits_from_bytes 63: 0000000000006370 150 FUNC GLOBAL DEFAULT 12 modbus_tcp_pi_accept 64: 0000000000005a90 13 FUNC GLOBAL DEFAULT 12 _modbus_tcp_prepare_response_tid 65: 0000000000004780 24 FUNC GLOBAL DEFAULT 12 modbus_write_bit 66: 00000000000050d0 15 FUNC GLOBAL DEFAULT 12 modbus_set_float 67: 00000000000050f0 6 FUNC GLOBAL DEFAULT 12 _modbus_rtu_prepare_response_tid 68: 0000000000005ae0 13 FUNC GLOBAL DEFAULT 12 _modbus_tcp_recv 70: 0000000000005190 11 FUNC GLOBAL DEFAULT 12 _modbus_rtu_recv 71: 0000000000208ce0 128 OBJECT GLOBAL DEFAULT 19 _modbus_tcp_pi_backend 72: 0000000000005de0 115 FUNC GLOBAL DEFAULT 12 _modbus_tcp_pre_check_confirmation 73: 00000000000042e0 10 FUNC GLOBAL DEFAULT 12 modbus_receive_confirmation 74: 0000000000208c60 128 OBJECT GLOBAL DEFAULT 19 _modbus_rtu_backend 75: 00000000000058e0 258 FUNC GLOBAL DEFAULT 12 modbus_new_rtu 76: 0000000000005b70 26 FUNC GLOBAL DEFAULT 12 _modbus_tcp_close 77: 0000000000004df0 4 FUNC GLOBAL DEFAULT 12 modbus_set_debug 78: 0000000000002dd0 9 FUNC GLOBAL DEFAULT 12 modbus_set_response_timeout 80: 0000000000006410 205 FUNC GLOBAL DEFAULT 12 modbus_new_tcp 81: 0000000000002730 261 FUNC GLOBAL DEFAULT 12 modbus_strerror 82: 00000000000028d0 78 FUNC GLOBAL DEFAULT 12 modbus_flush 83: 0000000000005c20 209 FUNC GLOBAL DEFAULT 12 _modbus_tcp_select 84: 0000000000002dc0 9 FUNC GLOBAL DEFAULT 12 modbus_get_response_timeout 85: 00000000000051a0 31 FUNC GLOBAL DEFAULT 12 _modbus_rtu_close 86: 0000000000002de0 9 FUNC GLOBAL DEFAULT 12 modbus_get_byte_timeout 87: 0000000000005aa0 12 FUNC GLOBAL DEFAULT 12 _modbus_tcp_send_msg_pre 88: 0000000000006f30 4 OBJECT GLOBAL DEFAULT 14 libmodbus_version_micro 89: 0000000000005ac0 3 FUNC GLOBAL DEFAULT 12 _modbus_tcp_filter_request 90: 0000000000002db0 4 FUNC GLOBAL DEFAULT 12 modbus_get_socket 91: 00000000000042d0 7 FUNC GLOBAL DEFAULT 12 modbus_receive 92: 0000000000005a60 34 FUNC GLOBAL DEFAULT 12 _modbus_tcp_build_response_basis 93: 0000000000004e00 296 FUNC GLOBAL DEFAULT 12 modbus_mapping_new 94: 0000000000002e00 8 FUNC GLOBAL DEFAULT 12 modbus_get_header_length 95: 0000000000002d50 48 FUNC GLOBAL DEFAULT 12 _modbus_init_common 96: 0000000000004620 101 FUNC GLOBAL DEFAULT 12 modbus_read_registers 97: 00000000000051d0 209 FUNC GLOBAL DEFAULT 12 _modbus_rtu_select 98: 0000000000002e10 7 FUNC GLOBAL DEFAULT 12 modbus_connect 99: 0000000000002df0 9 FUNC GLOBAL DEFAULT 12 modbus_set_byte_timeout 101: 0000000000004ad0 526 FUNC GLOBAL DEFAULT 12 modbus_write_and_read_registers 102: 0000000000002da0 4 FUNC GLOBAL DEFAULT 12 modbus_set_socket 103: 0000000000002d90 12 FUNC GLOBAL DEFAULT 12 modbus_set_error_recovery 104: 0000000000005fc0 260 FUNC GLOBAL DEFAULT 12 modbus_tcp_listen 106: 0000000000005ad0 16 FUNC GLOBAL DEFAULT 12 _modbus_tcp_send 107: 0000000000004990 320 FUNC GLOBAL DEFAULT 12 modbus_write_registers 108: 0000000000005180 11 FUNC GLOBAL DEFAULT 12 _modbus_rtu_send 109: 0000000000006f34 4 OBJECT GLOBAL DEFAULT 14 libmodbus_version_minor 110: 00000000000052b0 54 FUNC GLOBAL DEFAULT 12 _modbus_rtu_filter_request 111: 0000000000004f30 66 FUNC GLOBAL DEFAULT 12 modbus_mapping_free 113: 0000000000006f38 4 OBJECT GLOBAL DEFAULT 14 libmodbus_version_major 114: 00000000000058a0 49 FUNC GLOBAL DEFAULT 12 modbus_rtu_get_serial_mode 115: 0000000000003b50 231 FUNC GLOBAL DEFAULT 12 modbus_reply_exception 116: 0000000000005af0 126 FUNC GLOBAL DEFAULT 12 _modbus_tcp_flush 117: 00000000000064e0 328 FUNC GLOBAL DEFAULT 12 modbus_new_tcp_pi 118: 00000000000062c0 164 FUNC GLOBAL DEFAULT 12 modbus_tcp_accept 119: 0000000000005100 121 FUNC GLOBAL DEFAULT 12 _modbus_rtu_send_msg_pre 120: 0000000000002d80 7 FUNC GLOBAL DEFAULT 12 modbus_set_slave 121: 0000000000208d60 128 OBJECT GLOBAL DEFAULT 19 _modbus_tcp_backend 122: 0000000000002f60 209 FUNC GLOBAL DEFAULT 12 modbus_send_raw_request 123: 0000000000002e20 18 FUNC GLOBAL DEFAULT 12 modbus_close 124: 00000000000050b0 23 FUNC GLOBAL DEFAULT 12 modbus_get_float 125: 00000000000051c0 13 FUNC GLOBAL DEFAULT 12 _modbus_rtu_flush 129: 0000000000004dc0 34 FUNC GLOBAL DEFAULT 12 modbus_free |
이름은 libmodbus5 인데 왜 버전은 3.0.6이 나오냐 -_-
[링크 : https://ubuntu.pkgs.org/18.04/ubuntu-universe-amd64/libmodbus5_3.0.6-2_amd64.deb.html]
[링크 : https://github.com/stephane/libmodbus/blob/v3.0.6/tests/unit-test-server.c]
[링크 : https://github.com/stephane/libmodbus/blob/master/tests/unit-test-server.c]
libmodbus poll 적용 (0) | 2022.05.04 |
---|---|
modbus tcp (0) | 2022.05.04 |
libmodbus tcp 예제 (0) | 2022.05.04 |
libmodbus (0) | 2022.05.03 |
modbus tcp 테스트 툴 (0) | 2022.05.03 |
유닛 테스트 하는 프로그램을 뜯어 보면 서비스 초기화 하는 코드를 분석하기 유리할 듯
[링크 : https://github.com/stephane/libmodbus/blob/master/tests/unit-test-server.c]
[링크 : https://github.com/stephane/libmodbus/blob/master/tests/unit-test-client.c]
modbus tcp (0) | 2022.05.04 |
---|---|
libmodbus 예제 프로그램 (0) | 2022.05.04 |
libmodbus (0) | 2022.05.03 |
modbus tcp 테스트 툴 (0) | 2022.05.03 |
modbus tcp library (0) | 2022.04.25 |