Показано с 1 по 10 из 75

Тема: Панель СП307 + ТМ5103 или ТМ5122

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #29

    По умолчанию

    Напишите! Куда Вы денетесь?! Вот пример реализации ОВЕН-протокола для СП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());
    Тщательно изучите и напишите свой!!!
    Последний раз редактировалось EFrol; 27.10.2024 в 15:08.

Похожие темы

  1. Не получается прошить панель СП307
    от ИльяВ в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 13.08.2024, 08:13
  2. пр200 + панель сп307
    от morsik-atm@yandex.ru в разделе Панели оператора (HMI)
    Ответов: 0
    Последнее сообщение: 20.03.2023, 09:28
  3. 2 ПР200 и панель СП307
    от L1ktus в разделе Программируемые реле
    Ответов: 8
    Последнее сообщение: 06.05.2020, 17:10
  4. Ответов: 12
    Последнее сообщение: 14.06.2019, 17:50
  5. Зависает панель СП307
    от Basekovsky в разделе Панели оператора (HMI)
    Ответов: 6
    Последнее сообщение: 24.04.2019, 13:59

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •