Size: a a a

2020 February 15

KW

Konstantin Wilhelm in ru_ASUTP
Сижу освежаю информацию о вайершарке, сто лет им не пользовался
источник

DD

Davydov Denis in ru_ASUTP
за это и люблю js, что ему не требуется много писанины
источник

DD

Davydov Denis in ru_ASUTP
время хорошо экономит
источник

DT

Dmitry Teh in ru_ASUTP
Konstantin Wilhelm
А чем HMI/SCADA не устраивает? Мне бы сейчас под капот заглянуть, чтобы понять почему у меня связь вроде как есть, а данные не передаются
у меня на одном экране отображаются параметры десятков девайсов, которые эмулируются по Modbus TCP/RTU и кастомному 485 протоколу.

кажется, ни  HMI, ни SCADA такого функционала не даст
источник

KW

Konstantin Wilhelm in ru_ASUTP
Dmitry Teh
у меня на одном экране отображаются параметры десятков девайсов, которые эмулируются по Modbus TCP/RTU и кастомному 485 протоколу.

кажется, ни  HMI, ни SCADA такого функционала не даст
Ну на счет кастомного я не знаю, а так не вижу особых проблем
источник

DT

Dmitry Teh in ru_ASUTP
а зачем тогда писать эмулятор на js или юзать утилиты Modbus Slave?
источник

DD

Davydov Denis in ru_ASUTP
Dmitry Teh
а зачем тогда писать эмулятор на js или юзать утилиты Modbus Slave?
это вопрос мне адресован? если да, то не понял его суть :)
источник

DT

Dmitry Teh in ru_ASUTP
ну дискуссия началась с потребности в эмуляторе, а оказалось, что всё решается скадой
источник

DT

Dmitry Teh in ru_ASUTP
это скорее всем
источник

KW

Konstantin Wilhelm in ru_ASUTP
Dmitry Teh
а зачем тогда писать эмулятор на js или юзать утилиты Modbus Slave?
Для отладки
источник

KW

Konstantin Wilhelm in ru_ASUTP
Хм, а что Wireshark локальную петлю 127.0.0.1 писать не желает?
источник

DD

Davydov Denis in ru_ASUTP
код слейва
источник

DD

Davydov Denis in ru_ASUTP
let mb = require('modbus-serial');

let ctx = new mb.ServerTCP({
 // функция чтения регистра, addr - адрес регистра, unitID - адрес устройства
 getHoldingRegister: function (addr, unitID) {
   console.log('Request register address:', addr);
   // возвращаем случайное число
   return parseInt(Math.random() * 0xFFFF);
 }
}, {
 host: '0.0.0.0', // на всех адресах слушать
 port: 8502,
 unitID: 1 // адрес устройства в сети модбас
});

console.log('Modbus slave server is running...');
источник

DD

Davydov Denis in ru_ASUTP
код мастера
источник

DD

Davydov Denis in ru_ASUTP
let mb = require('modbus-serial');

let ctx = new mb();
ctx.connectTCP('127.0.0.1', { port: 8502 });
ctx.setID(1); // адрес слейва

// читаем каждые 1000мс регистр с адресом 0
setInterval(function () {
 ctx.readHoldingRegisters(0, 1, function(err, data) {
   console.log('Register value:', data.data);
 });
}, 1000);
источник

DD

Davydov Denis in ru_ASUTP
источник

DD

Davydov Denis in ru_ASUTP
источник

DD

Davydov Denis in ru_ASUTP
в моем случае просто сама скада будет загружаться на компе дольше, чем я напишу такой код :)
источник

DD

Davydov Denis in ru_ASUTP
@kw_goerike если такое пойдет, могу код немного попонятнее расписать, и коментариев побольше добавить, чтобы больше было похоже на классические ЯП
источник

DD

Davydov Denis in ru_ASUTP
а то элементы функциональщины многих отпугивают
источник