Модбас

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
Ответить
Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

Модбас

#1

Сообщение nalnik » 18.02.2017{, 22:22}

Помогите! Давно писал про ЭТО - помогите, Замучился постоянно заниматся мазахизиом.

Подскажите что можно сделать что бы при передачи и приеме по Модбас
Float и Unsiged long Integer байты уходили и приходили в "другом" порядке?
Проблема в том что у меня в сети работают еще десяток ПЛК150 (Овен) и все это уходит на сенсорную панель в которой я не могу отдельно на каждое устройство указать порядок байт.
(Arduino хочу использовать для замены сдохших ПЛК150).

Я делаю так:
После компиляции в этой части меняю W2 на W1, а W1 на W2

struct _savTWstr _saveFloatToModbus( float value)
{ _savTWstr result;

byte b;
b=*(((byte*)&value) + 0 );
for(byte i = 0; i < 8; i++) bitWrite(result.w2,i,bitRead(b, i));
b=*(((byte*)&value) + 1 );
for(byte i = 0; i < 8; i++) bitWrite(result.w2,i+8, bitRead(b, i));
b=*(((byte*)&value) + 2 );
for(byte i = 0; i < 8; i++) bitWrite(result.w1,i,bitRead(b, i));
b=*(((byte*)&value) + 3 );
for(byte i = 0; i < 8; i++) bitWrite(result.w1,i+8,bitRead(b, i));
return result ;}
struct _savTWstr _saveUnsignedLongTypeToModbus( unsigned long value)
{ _savTWstr result;
for(byte i = 0; i < 16; i++) bitWrite(result.w2,i,bitRead(value, i));
for(byte i = 16; i < 32; i++) bitWrite(result.w1,(i-16),bitRead(value, i));
return result ;}
float _readFloatFromModbus(uint16_t w1, uint16_t w2)
{
byte b[4];
for(byte i = 0; i < 8; i++) bitWrite(b[0],i,bitRead(w2, i));
for(byte i = 0; i < 8; i++) bitWrite(b[1],i,bitRead(w2,(i+8)));
for(byte i = 0; i < 8; i++) bitWrite(b[2],i,bitRead(w1, i));
for(byte i = 0; i < 8; i++) bitWrite(b[3],i,bitRead(w1,(i+8)));
return *((float *)&b);
}
unsigned long _readUnsignedLongTypeFromModbus(uint16_t w1, uint16_t w2)
{
unsigned long result;
for(byte i = 0; i < 16; i++) bitWrite(result,i,bitRead(w2, i));
for(byte i = 16; i < 32; i++) bitWrite(result,i,bitRead(w1,(i-16)));
return result;
}

потом зашиваю. После этого работает нормально.
Может в FLProg есть где то "волшебная кнопка" чтоб указать порядок байт?
Кнопка эта очень нужна - такие же проблемы и со всеми  PLC Delta
получается что Arduino я не могу применить с другими устройствами
в одной сети.
Последний раз редактировалось nalnik 18.02.2017{, 22:23}, всего редактировалось 1 раз.
Я хочу быть добрее, но люди сами нарываются.

holodaleksey
Лейтенант
Сообщения: 566
Зарегистрирован: 10.01.2016{, 13:47}
Репутация: 14

Модбас

#2

Сообщение holodaleksey » 20.02.2017{, 09:18}

плюсую, необходима настройка модбаса.
Подпись удалена мною по требованию администрации форума, что является нарушение демократии )

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Модбас

#3

Сообщение Boroda » 20.02.2017{, 09:27}

Порядок байт где-то уже обсуждался, Сергей участвовал в этом. Но почему-то дальше не пошло...

holodaleksey
Лейтенант
Сообщения: 566
Зарегистрирован: 10.01.2016{, 13:47}
Репутация: 14

Модбас

#4

Сообщение holodaleksey » 20.02.2017{, 11:58}

офтоп: с утра ранг темы был =2, сейчас = Rank: 2376
нипарядак...
Подпись удалена мною по требованию администрации форума, что является нарушение демократии )

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Модбас

#5

Сообщение Boroda » 20.02.2017{, 13:45}

holodaleksey писал(а):нипарядак...
эт я шалю

holodaleksey
Лейтенант
Сообщения: 566
Зарегистрирован: 10.01.2016{, 13:47}
Репутация: 14

Модбас

#6

Сообщение holodaleksey » 20.02.2017{, 14:40}

да ладно?! )))
Подпись удалена мною по требованию администрации форума, что является нарушение демократии )

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Модбас

#7

Сообщение Boroda » 20.02.2017{, 14:49}

holodaleksey писал(а):да ладно?!
Больше помощи сайту - больше плюсиков.

golowa70
Сержант
Сообщения: 195
Зарегистрирован: 20.02.2016{, 00:05}
Репутация: 6

Модбас

#8

Сообщение golowa70 » 21.02.2017{, 21:05}

Тоже актуально +

Добавлено (21.02.2017, 21:05)
---------------------------------------------
nalnik писал(а):После компиляции в этой части меняю W2 на W1, а W1 на W2
Тоже актуально + . Но у меня даже по вашему методу  не хочет писать INT32

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Модбас

#9

Сообщение Max » 26.02.2017{, 15:21}

Намучился я с этим ModBas в новой версии программы.... Вылетает и все. Без явной причины. Пользовался портативной версией программы. Прикрепляю лог программы.

Вернулся к версии 2.1.1 по стабильнее версия...

И еще, эта новая IDE сжирает память "мама не горюй" на ней вообще некоторые проекты сомнительно сделать, особенно с развитым меню и МодБасом....

Ответить

Вернуться в «Новые»