Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2

Golang Modbus TCP Server

25.12.2017, 17:02. Показов 6423. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите как реализовать модбас сервер. нашел в интернете примеры, но вот не пойму как обратиться в адресам памяти и считать и записывать данные внутри программы. вот рабочий пример
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
 
import (
    "log"
    "time"
 
    "github.com/tbrandon/mbserver"
)
 
func main() {
    serv := mbserver.NewServer()
    err := serv.ListenTCP("127.0.0.1:502")
    if err != nil {
        log.Printf("%v\n", err)
    }
    defer serv.Close()
 
    // Wait forever
    for {
        time.Sleep(1 * time.Second)
 
    }
}
. модбас тестером я читаю регистры и записываю в память. но вот как вывести эти данные в консоль не пойму fmt.Println(?) ну и для дальнейшей работы с данными . спасибо за помощь !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2017, 17:02
Ответы с готовыми решениями:

Как вывести сообщение на html страничке при логине WEB Server на Golang(Gin-gonic)
Добрый день, можете объяснить как обработать post запрос и вывести сообщение, к примеру alert если при логине сервер вернет false.

TCP server socket + client modbus
Добрый день. Есть tcp сервер с использованием socket и _thread. К серверу подключается устройство через интернет по tcp порту....

atmega2560+W5100 ModBUS TCP server
Под рукой есть платы arduino mega и ethernet W5100. использую как железо, без ядра arduino на С в atmel studio. Прошу совета, нужно...

2
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
25.12.2017, 19:00
Предположу, что нужно написать хендлер https://godoc.org/github.com/t... ionHandler
0
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2
26.12.2017, 16:28  [ТС]
не пойму как с даной функцией работать.

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
 
import (
    "log"
    "time"
 
    "github.com/tbrandon/mbserver"
)
 
type Server struct {
    // Debug enables more verbose messaging.
    Debug bool
 
    DiscreteInputs   []byte
    Coils            []byte
    HoldingRegisters []uint16
    InputRegisters   []uint16
    // contains filtered or unexported fields
}
 
type Framer interface {
    Bytes() []byte
    Copy() Framer
    GetData() []byte
    GetFunction() uint8
    SetException(exception *Exception)
    SetData(data []byte)
}
 
type Exception uint8
 
func main() {
 
    serv := mbserver.NewServer()
 
    // Override ReadDiscreteInputs function.
    serv.RegisterFunctionHandler(2,
        func(s *Server, frame Framer) ([]byte, *Exception) {
            register, numRegs, endRegister := registerAddressAndNumber(frame)
            // Check the request is within the allocated memory
            if endRegister > 65535 {
                return []byte{}, &IllegalDataAddress
            }
            dataSize := numRegs / 8
            if (numRegs % 8) != 0 {
                dataSize++
            }
            data := make([]byte, 1+dataSize)
            data[0] = byte(dataSize)
            for i := range s.DiscreteInputs[register:endRegister] {
                // Return all 1s, regardless of the value in the DiscreteInputs array.
                shift := uint(i) % 8
                data[1+i/8] |= byte(1 << shift)
            }
            return data, &Success
        })
 
    //serv := mbserver.NewServer()
    err := serv.ListenTCP("127.0.0.1:502")
    if err != nil {
        log.Printf("%v\n", err)
    }
    defer serv.Close()
 
    // Wait forever
    for {
        time.Sleep(1 * time.Second)
 
    }
}
вот как применяю но он не компилируется. Ошибки # modbus_TCP_Server
.\main.go:38:3: cannot use func literal (type func(*Server, Framer) ([]byte, *Exception)) as type func(*mbserver.Server, mbserver.Framer) ([]byte, *mbserver.Exception) in argument to serv.RegisterFunctionHandler
.\main.go:39:38: undefined: registerAddressAndNumber
.\main.go:42:23: undefined: IllegalDataAddress
.\main.go:55:18: undefined: Success

Добавлено через 8 часов 20 минут
Решение нашел. пример как вывести даные из памяти сервера
Go
1
2
                fmt.Println(serv.Coils[0])
        fmt.Println(serv.HoldingRegisters[0])
обращение к регистрам происходит следующим образом
Go
1
2
3
4
        serv.Coils
        serv.DiscreteInputs
        serv.HoldingRegisters
        serv.InputRegisters
полный пример по выводу нулевой ячейки памяти

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main
 
import (
    "fmt"
    "log"
    "time"
 
    "github.com/tbrandon/mbserver"
)
 
type Exception uint8
 
func main() {
 
    serv := mbserver.NewServer()
    err := serv.ListenTCP("127.0.0.1:502")
    if err != nil {
        log.Printf("%v\n", err)
    }
    defer serv.Close()
 
    
    for {
 
        fmt.Println(serv.Coils[0])
        fmt.Println(serv.HoldingRegisters[0])
        time.Sleep(1 * time.Second)
 
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2017, 16:28
Помогаю со студенческими работами здесь

Modbus TCP/IP
Здравствуйте, форумчане. Появилась задача, в которой необходимо реализовать несколько устройств контроля и управления на базе stm32f7....

MODBUS TCP SLAVE
Всем привет. Создать клиент модбас тсп без проблем получается на сокетах. А вот сервер сокет никак. Кидаю TServerSocket на форму,...

Qt Modbus ответ сервера по TCP
Приветствую! Есть готовая программа клиент для опроса инвертора по протоколу ModBus через RTU, что успешно переделал в TCP. Хочу...

МК vs WinCC через Modbus TCP
Добрый день. Начинаю осваивать siemens. Ранее выполняемые работы: программирование МК, ПЛИС, драйвера под Windows XP..... Со скада...

Проблемы с подключенияем по Modbus TCP
Один и тот же код в разных программах. Одна библиотека подключена. Тем не менее в одной программе подключается нормально, а в другой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru