Ответы в темах
-
АвторЗаписи
-
OakimУчастникЕсли вы искренне верите в то, что CRC вас спасет от всех «бед» пусть будет так, я не буду вас в этом разубеждать 😉
OakimУчастникДа протокол ModBUS совсем не подходит для передачи по ненадежным каналам связи таким как GSM/GPRS, так при сбоях в канале связи могут приходить не корректные данные, так как у ModBUS нет механизмов проверки целостности передаваемых данных.
Если необходимо дистанционное управление, то применяем маршрутизаторы с направленными антенами и протокол МЭК 104.
OakimУчастникНа газовых модульных котельных без обслуживающего персонала своя автоматика, а это система мониторинга состояния объектов.
Раньше сами щиты собирали на базе Овена, но сейчас пошли «разношерстные» контроллеры все в одном типа CCU825, Ksital GSM-12T (дебильный протокол нужно драйвер делать), которые и данные шлют и СМС информирование делают.
Все заводили на MasterSCADA 3, но она себя показала с плохой стороны, крайне глючная, тормознутая и денег много нужно на ее обслуживание.
Решили все перевести на Rapid SCADA.
Для построения канала связи с объекта есть ряд отработанных решений:
1. Если выход с контроллера RS232 или RS485, то ставим Teleofis WRX на объект, а на сервере стоит M2M24 Desktop который принимает проброс портов и создают на сервере виртуальные порты;
2. Если интерфейс Ethernet, то ставим роутер IRZ или тот же Teleofis которые через тунель (OpenVPN, L2TP) соединяются с сетью в которой сервер диспетчеризации.
OakimУчастникПонятно
paramsв данной функции не к месту, спасибо.
OakimУчастникМихаил спасибо я это смотрел и на основании этой документации написал функцию.
Единственное с чем пока не разобрался это с приведением типов float к double, так как во всех мат функциях используется double.
Так же не понятно, как сделать выходной параметр Error на случай отсутствия связи с датчиком или чем то подобным.
OakimУчастникЭто уже готовые щиты на котельных, которые некто не будет переделывать.
Я сейчас просто все перевожу с MasterSCADA 3 на Rapid SCADA.
Для этого есть ряд причин:
1. Кончились лицензии на входные каналы, а расширяться очень дорого
2. Отстойный Web-клиент, а смотреть состояние объектов нужно удаленно
OakimУчастникВот черновик функции
public float ResToTemp(params float Resist) { float Tmp, Temp; float A = 3.9083E-3F; float B = -5.775E-5F; if (Resist >= 100) { Temp = (sqrt(pow(A,2)-4*(B)*(1-Resist/100))-A)/(2*B); } else { Tmp = (Resist/100)-1; Temp = (Tmp*255.819)+(pow(Tmp,2)*9.14550)+(pow(Tmp,3)*(-2.92363))+(pow(Tmp,4)*(1.7909)); } }
OakimУчастникПонятно спасибо сейчас поробую
OakimУчастникМне нужно сопротивление PT100 в Омах пересчитать в Температуру в Цельсиях.
Как мне вот этот кусок переписать под Rapid SCADA?
tmp:=(in/100)-1; IF in>=100 THEN out:=(SQRT(EXPT(3.9083*EXPT(10,-3),2) - 4*(-5.775*EXPT(10,-7))*(1-in/100)) - 3.9083*EXPT(10,-3))/(2*(-5.775*EXPT(10,-7))); IF in>390.48 THEN error:=2; ELSE error:=0; END_IF ELSE out:=(tmp*255.819)+(tmp*tmp*9.14550)-(tmp*tmp*tmp*(-2.92363))-(tmp*tmp*tmp*tmp*(1.7909)); IF in<18.52 THEN error:=1; ELSE error:=0; END_IF END_IFВот эта математика
Методика расчета температуры по сопротивлению термометров сопротивления-
Ответ изменён 4 года, 4 месяца назад пользователем
Oakim.
OakimУчастникВ MasterSCADA у меня была следующая функция:
PROGRAM MAIN_PROGRAM VAR_INPUT in1:REAL; in2:REAL; in3:REAL; in4:REAL; END_VAR VAR_OUTPUT out1:REAL; out2:REAL; out3:REAL; out4:REAL; error1:INT; error2:INT; error3:INT; error4:INT; END_VAR VAR res_to_temp1:RES_TO_TEMP; res_to_temp2:RES_TO_TEMP; res_to_temp3:RES_TO_TEMP; res_to_temp4:RES_TO_TEMP; END_VAR res_to_temp1(in:=in1,out=>out1,error=>error1); res_to_temp2(in:=in2,out=>out2,error=>error2); res_to_temp3(in:=in3,out=>out3,error=>error3); res_to_temp4(in:=in4,out=>out4,error=>error4); END_PROGRAM FUNCTION_BLOCK RES_TO_TEMP VAR_INPUT in:REAL; END_VAR VAR_OUTPUT out:REAL; error:INT; END_VAR VAR tmp:REAL; END_VAR tmp:=(in/100)-1; IF in>=100 THEN out:=(SQRT(EXPT(3.9083*EXPT(10,-3),2) - 4*(-5.775*EXPT(10,-7))*(1-in/100)) - 3.9083*EXPT(10,-3))/(2*(-5.775*EXPT(10,-7))); IF in>390.48 THEN error:=2; ELSE error:=0; END_IF ELSE out:=(tmp*255.819)+(tmp*tmp*9.14550)-(tmp*tmp*tmp*(-2.92363))-(tmp*tmp*tmp*tmp*(1.7909)); IF in<18.52 THEN error:=1; ELSE error:=0; END_IF END_IF END_FUNCTION_BLOCK
OakimУчастникО спасибо за подсказку, сейчас почитаю.
OakimУчастникВ С# я нашел такие функции
«Если требуется иметь дело с множеством битов, можно применить класс BitArray и структуру BitVector32. Класс BitArray расположен в пространстве имен System.Collections, a BitVector32 — в пространстве System.Collections.Specialized.»Но как их применить?
OakimУчастникПытаюсь поставить 6, но пока, что то не едет.
OakimУчастникПроекты у меня простые, только нужно информирование при помощи СМС по аварийному сигналу с объекта.
OakimУчастникПереименовал и папки и файлы латиницей и пробелы по убирал, не помогло.
-
Ответ изменён 4 года, 4 месяца назад пользователем
-
АвторЗаписи