Завтра-послезавтра притащу со склада ТМ5122 и попробую его еще поподключать
Вид для печати
Завтра-послезавтра притащу со склада ТМ5122 и попробую его еще поподключать
EFrol, подключить параллельно еще один ТМ5103?
Напишите! Куда Вы денетесь?! Вот пример реализации ОВЕН-протокола для СП3хх:
В глобальный макрос:
в обычный:Код:BYTE in[64], out[16];
WORD inLen;
BYTE Regs[16];
void query(BYTE *out, WORD outLen){
inLen = 0;
Enter(DOWNLOAD);
if(Send(DOWNLOAD, out, outLen)){
inLen = Receive(DOWNLOAD, in, 64, 500, 10);
}
Leave(DOWNLOAD);
}
WORD Owen_CRC(BYTE *buf, BYTE len){
BYTE iByte, iBit, bByte;
WORD ret = 0;
for(iByte = 0; iByte < len; iByte++){
bByte = buf[iByte];
for(iBit = 0; iBit < 8; iBit++){
if(((HIBYTE(ret) ^ bByte) & 0x80) > 0){
ret <<= 1; ret ^= 0x8F57;
}else ret <<= 1;
bByte <<= 1;
}
}
return ret;
}
BYTE Owen_Query(WORD Addr, WORD Hash, BYTE Count){
BYTE UnPack[22], Pack[46], iByte;
WORD CRC;
UnPack[0] = HIBYTE(Addr << 5);
UnPack[1] = LOBYTE(Addr << 5) | (Count > 0 ? 0x00 : 0x10) | Count;
UnPack[2] = HIBYTE(Hash);
UnPack[3] = LOBYTE(Hash);
for(iByte = 0; iByte < Count; iByte++) UnPack[iByte+4] = out[iByte];
CRC = Owen_CRC(UnPack, Count + 4);
UnPack[Count+4] = HIBYTE(CRC);
UnPack[Count+5] = LOBYTE(CRC);
Pack[0] = '#';
for(iByte = 0; iByte < (Count + 6); iByte++){
Pack[iByte*2+1] = ((UnPack[iByte] & 0xF0) >> 4) + 0x47;
Pack[iByte*2+2] = (UnPack[iByte] & 0x0F) + 0x47;
}
Pack[iByte*2+1] = 0x0D;
query(Pack, iByte*2+2);
if(inLen > 6){
if(in[0] != 0x23 || in[inLen-1] != 0x0D || (inLen % 2) != 0) return -2;
for(iByte = 0; iByte < (inLen - 2) / 2; iByte++){
UnPack[iByte] = in[iByte*2+1] - 0x47;
UnPack[iByte] <<= 4;
UnPack[iByte] |= in[iByte*2+2] - 0x47;
}
CRC = UnPack[iByte-2] << 8 | UnPack[iByte-1];
if(Owen_CRC(UnPack, iByte-2) != CRC) return -3;
if(UnPack[0] != HIBYTE(Addr << 5) | (UnPack[1] & 0xE0) != LOBYTE(Addr << 5)) return -4;
if((UnPack[1] & 0x10) == (Count == 0 ? 0x10: 0x00)) return -5;
if(UnPack[2] == 0x02 && UnPack[3] == 0x33) return UnPack[4];
inLen = iByte - 6;
for(iByte = 0; iByte < inLen; iByte++) in[iByte] = UnPack[iByte+4];
return 0;
}else return -1;
}
float readF24(){
DWORD dw = MAKEDWORD(MAKEWORD(0, in[2]), MAKEWORD(in[1], in[0]));
return DWord_2_Float(dw);
}
float readFloat(){
DWORD dw = MAKEDWORD(MAKEWORD(in[3], in[2]), MAKEWORD(in[1], in[0]));
return DWord_2_Float(dw);
}
void writeFloatPSW(WORD addr, float value){
DWORD dw;
dw = Float_2_DWord(value);
PSW[addr] = LOWORD(dw);
PSW[addr+1] = HIWORD(dw);
}
Тщательно изучите и напишите свой!!!Код:if(Owen_Query(120, 0x8784, 0) == 0) writeFloatPSW(450, readF24());
Благодарю за макрос и веру в меня! Сейчас скопирую макрос и подумаю над ним. Свой макрос я почти что понял )
Один преобразователь между конфигуратором и прибором.
Второй преобразователь в другой USB (новый COM-порт) для прослушивающей программы, например, Terminal
Включаете сохранение лога в текстовый файл и запускаете чтение конфигурации в конфигураторе. В лог запишется весь обмен.
С этим есть проблемка, у меня на компе всего один USB-порт, но это решаемо, найду другой комп
Хаб однако есть, нужно поискать, спасибо за подсказку! )
Это что за чудо такое? И 500 рублей у Вас нет?
https://www.onlinetrade.ru/catalogue...25BE%25D1%2580
https://market.yandex.ru/search?text...YAIPEnLw%2C%2C
Сергей0308, вот оно мое чудо с одним USB-портом на фотке