#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 раз.
Я хочу быть добрее, но люди сами нарываются.