Страница 41 из 111 ПерваяПервая ... 3139404142435191 ... ПоследняяПоследняя
Показано с 401 по 410 из 1109

Тема: Modbus Universal MasterOPC Server новый OPC сервер от компании ИнСАТ

  1. #401

    По умолчанию

    Извиняюсь, старый файл выбрал. Вот новый.
    http://rgho.st/7QhDKFSYW

  2. #402

    По умолчанию

    Укажите путь к тегу с проблемным скриптом.
    Спасибо.

  3. #403

    По умолчанию

    ТРМ210-уставка/уставка

  4. #404

    По умолчанию

    Нет такого.
    У похожего тип доступа стоит только на чтение.
    Изображения Изображения
    Спасибо.

  5. #405

    По умолчанию

    На скриншоте выделено.
    скриншот.jpg
    Последний раз редактировалось Alexandr Ryzhikov; 08.08.2016 в 14:32.

  6. #406

    По умолчанию

    Попробуйте вначале скрипта записи добавить строчку:
    if server.IsWriteFromScript( )==true then return; end;
    Но в версии 3.2.10 эта функция работать перестала - мы с этим разберемся.
    Спасибо.

  7. #407

    По умолчанию

    Спасибо большое! Пока не заработало.

  8. #408

    По умолчанию

    Добрый день! Возникли некоторые проблемы при опросе опс-сервером архивов. На объекте в программе плк забыл при формировании строки добавить символ =, в результате чего конец строки получается вида "#000512\N\R", вместо "#000=512\N\R"

    Соответственно, скрипт
    Код:
    local n,l= string.find(str, "#" ); --флаг разбора символа " #"
    if n~=nil and l~=nil then  --если найден символ
        local str1=string.sub(str,1,n-1 ); --выделяем строку после символа
        if TimeVal==nil then   --получаем время строки
            NoErr,time=pcall(StrToTime,str1); --вызов функции преобразования в безопасном режиме
            if NoErr==true and time~=nil then 
                TimeVal=time; --ошибки нет - сохраняем время
            else     
                Correct=false; --ошибка - строка некорректная
                break; --выходим из цикла
            end;
        else
           local k,z= string.find(str1, "=" ); --разбираем остальные элементы после символа "="
           if k~=nil and z~=nil then
               local str2=string.sub(str1,z+1); --символ найден - выделяем подстроку со значением
               local str3=string.sub(str1,1,z-1); --символ найден - выделяем подстроку с номером
               elem[str3+1]=str2; --вставляем в таблицу полученный элемент
           else 
            Correct=false; 
            TimeVal=nil;
            break; --символ не найден - ошибка
           end;
        end;
        str=string.sub(str,l+1 ); --выделяем оставшийся кусок строки и дальше разбираем его           
    end;
    не обработает данные строки.
    Так как объект удаленный, решил скорректировать код скрипта, получив
    Код:
    local n,l= string.find(str, "#" ); --флаг разбора символа " #"
    if n~=nil and l~=nil then  --если найден символ
    	local str1=string.sub(str,1,n-1 ); --выделяем строку после символа
    	if TimeVal==nil then   --получаем время строки
    		NoErr,time=pcall(StrToTime,str1); --вызов функции преобразования в безопасном режиме
    		if NoErr==true and time~=nil then 
    			TimeVal=time; --ошибки нет - сохраняем время
    		else     
    			Correct=false; --ошибка - строка некорректная
    			break; --выходим из цикла
    		end;
    	else
    		local str2=string.sub(str1,1,3); --выделяем подстроку со значением
    		server.Message("номер найден. sym=",str2);
    		local str3=string.sub(str1,4); --символ найден - выделяем подстроку с номером
    		server.Message("значение найдено. val=",str3);
    		if string.len(str3)<6 then --(для случаев некорректного получения переменной)
    			elem[str3+1]=str2; --вставляем в таблицу полученный элемент
    		end;
    	end;
        str=string.sub(str,l+1 ); --выделяем оставшийся кусок строки и дальше разбираем его           
    end;
    Этот вариант кода не работает, хотя в терминале вижу корректные и номера и значения переменной в процессе обработки. Но запись при этом в тэги не происходит. Точнее записывается только если значение переменной (val) = 1. Значения же отличные от 1 не записываются
    Что я делаю не так?

    Кусок лога терминала
    Скрытый текст:

    Код:
    12-08-2016 13:33:09.878 объект.архив:значение найдено. val=32 
    12-08-2016 13:33:09.877 объект.архив:символ найден. sym=001 
    12-08-2016 13:33:09.877 объект.архив:значение найдено. val=2 
    12-08-2016 13:33:09.877 объект.архив:символ найден. sym=001 
    12-08-2016 13:33:09.877 объект.архив:значение найдено. val=16 
    12-08-2016 13:33:09.877 объект.архив:символ найден. sym=001 
    12-08-2016 13:33:09.877 объект.архив:значение найдено. val=2 
    12-08-2016 13:33:09.876 объект.архив:символ найден. sym=000 
    12-08-2016 13:33:09.876 объект.архив:str= 11:28:14#0002
    
    2016.7.22 11:28:15#00116
    
    2016.7.22 11:30:17#0012
    
    2016.7.22 11:30:17#00132
    
    2016.7. 
    12-08-2016 13:33:08.645 объект.архив:значение найдено. val=16 
    12-08-2016 13:33:08.644 объект.архив:символ найден. sym=001 
    12-08-2016 13:33:08.644 объект.архив:значение найдено. val=1 
    12-08-2016 13:33:08.644 объект.архив:символ найден. sym=001 
    12-08-2016 13:33:08.643 объект.архив:значение найдено. val=8 
    12-08-2016 13:33:08.643 объект.архив:символ найден. sym=001 
    12-08-2016 13:33:08.643 объект.архив:значение найдено. val=512 
    12-08-2016 13:33:08.643 объект.архив:символ найден. sym=000 
    12-08-2016 13:33:08.642 объект.архив:str=:27:10#000512

  9. #409

    По умолчанию

    Проверяйте - записались ли они в таблицу. Добавьте дальше по программе - где происходит запись в теги server.Message, где значения пропадают.
    Спасибо.

  10. #410

    По умолчанию

    добавил сообщений:

    Скрытый текст:

    Код:
    local n,l= string.find(str, "#" ); --флаг разбора символа " #"
    if n~=nil and l~=nil then  --если найден символ
    	server.Message("найден символ ","#");
    	local str1=string.sub(str,1,n-1 ); --выделяем строку до этого символа
    	if TimeVal==nil then   --получаем время строки
    		NoErr,time=pcall(StrToTime,str1); --вызов функции преобразования в безопасном режиме
    		if NoErr==true and time~=nil then 
    			TimeVal=time; --ошибки нет - сохраняем время
    		else     
    			Correct=false; --ошибка - строка некорректная
    			break; --выходим из цикла
    		end;
    	else
    		local str2=string.sub(str1,1,3); --выделяем подстроку со значением
    		server.Message("номер найден, ",str2);
    		local str3=string.sub(str1,4); --символ найден - выделяем подстроку с номером
    		server.Message("значение найдено, val=",str3);
    		if string.len(str3)<6 then
    			elem[str3+1]=str2; --вставляем в таблицу полученный элемент
    			server.Message("вставили элемент в таблицу - ", elem[str3+1]);
    		end;
    	end;
    	str=string.sub(str,l+1 ); --выделяем оставшийся кусок строки и дальше разбираем его
    end;
    until n==nil or l==nil; --выходим из цикла если разделитель не найден
    return Correct,TimeVal,elem; --возвращаем найденные элементы
    end;  
    
    function WriteToTag(InSrt,InTags,ToHDA) --функция записи значений в теги
        local NoErr,TimeVal;
        local Elem={};         
        NoErr,TimeVal,Elem=StringToElement(InSrt);    
        if NoErr==true and TimeVal~=nil then  
            local count=table.maxn(InTags);
            if table.maxn(Elem)<count then count=table.maxn(Elem); end; --находим минимальное значение
            for i=1,count,1 do 
                if Elem[i]~=nil then
                    local val;  
                    --if  InTags[i]=="int32" or InTags[i]=="uint32" or InTags[i]=="int16" or InTags[i]=="uint16" 
                    --then  --целые числа передаются в 16-ричном формате
                        --val = tonumber(Elem[i], 16) --преобазуем строку с 16-ричным числом в десятичное  
                    --else
    				val=Elem[i];
    				server.Message("записываем значение в тэг, ", i);
    				server.Message("Значения=",server.TimeStampToString(TimeVal)," ", Elem[1]," ",Elem[2]);
    				
                    --end;   
                    if ToHDA==true then     
                    server.WriteTagByNumberToHda(i-1,val,OPC_QUALITY_GOOD,TimeVal);    
                    else
                    server.WriteTagByNumber(i-1,val,OPC_QUALITY_GOOD,TimeVal);    
                    end; 
                end;
            end;
        server.Message("Значения=",server.TimeStampToString(TimeVal)," ", Elem[1]," ",Elem[2]);
        end;                                                                                     
        return TimeVal;--возвращаем значение времени
    end;


    В сообщении скриптов вижу следующее:

    Код:
    12-08-2016 14:58:48.860 объект.архив:Значения=2016-08-05 08:57:30.000 nil nil 
    12-08-2016 14:58:48.860 объект.архив:вставили элемент в таблицу - 001 
    12-08-2016 14:58:48.860 объект.архив:значение найдено, val=16 
    12-08-2016 14:58:48.860 объект.архив:номер найден, 001 
    12-08-2016 14:58:48.860 объект.архив:найден символ # 
    12-08-2016 14:58:48.860 объект.архив:найден символ # 
    12-08-2016 14:58:48.860 объект.архив:Значения=2016-08-05 08:57:29.000 nil nil 
    12-08-2016 14:58:48.860 объект.архив:вставили элемент в таблицу - 001 
    12-08-2016 14:58:48.860 объект.архив:значение найдено, val=32 
    12-08-2016 14:58:48.860 объект.архив:номер найден, 001 
    12-08-2016 14:58:48.860 объект.архив:найден символ # 
    12-08-2016 14:58:48.860 объект.архив:найден символ # 
    12-08-2016 14:58:48.860 объект.архив:Значения=2016-08-05 08:57:28.000 nil nil 
    12-08-2016 14:58:48.860 объект.архив:вставили элемент в таблицу - 001 
    12-08-2016 14:58:48.860 объект.архив:значение найдено, val=16 
    12-08-2016 14:58:48.860 объект.архив:номер найден, 001 
    12-08-2016 14:58:48.860 объект.архив:найден символ # 
    12-08-2016 14:58:48.860 объект.архив:найден символ # 
    12-08-2016 14:58:48.860 объект.архив:Значения=2016-08-05 08:57:26.000 nil 001 
    12-08-2016 14:58:48.860 объект.архив:Значения=2016-08-05 08:57:26.000 nil 001 
    12-08-2016 14:58:48.860 объект.архив:записываем значение в тэг, 2 
    12-08-2016 14:58:48.860 объект.архив:вставили элемент в таблицу - 001 
    12-08-2016 14:58:48.860 объект.архив:значение найдено, val=1 
    12-08-2016 14:58:48.860 объект.архив:номер найден, 001 
    12-08-2016 14:58:48.859 объект.архив:найден символ # 
    12-08-2016 14:58:48.859 объект.архив:найден символ # 
    12-08-2016 14:58:48.859 объект.архив:str=16.8.5 8:57:26#0011
    
    2016.8.5 8:57:28#00116
    
    2016.8.5 8:57:29#00132
    
    2016.8.5 8:57:30#00116

Страница 41 из 111 ПерваяПервая ... 3139404142435191 ... ПоследняяПоследняя

Ваши права

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