Просмотр полной версии : ПЛК 73 Первое включение и первые трудности
Доброго времени суток, уважаемые форумчане! Приобрёл я контроллер ПЛК 73, прибор не плохой по дизайну и по начинке, скажем так, работать будет. Но при первом включении возникают первые трудности. Трудность номер один - прибор работает с COM портом, но в ноутбуках и компьютерах нового поколения данный порт отсутствует, надо использовать преобразователь USB-COM. И здесь таится проблема, оказывается, что не каждый преобразователь будет работать с ПЛК 73, кстати на форуме вам скажут, что будет работать с любым преобразователем, ЭТО НЕ ТАК!!! Возможен случай как у меня, преобразователь ICP-CON I-7561 единственный из того, что у меня есть, который связался с ПЛК 73. Хочу заметить - это не дешёвый преобразователь.
Кто-то скажет- это единичный случай, да может и единичный - НО ОН ЕСТЬ!!!, и может повториться у кого-то ещё. ВОПРОС К РАЗРАБОТЧИКАМ - В ПР200 ВЫ СМОГЛИ УСТАНОВИТЬ ПОРТ USB. ЧТО ПОМЕШАЛО ТАКОЙ ПОРТ ПОСТАВИТЬ В ПЛК 73. МНЕ КАЖЕТСЯ ОТСУТСТВИЕ ЖЕЛАНИЯ ЧТО-ТО МЕНЯТЬ. Трудность номер два - при входе во внутренние настройки ПЛК 73 обнаруживаю, что они не работают. Яркость и контрастность не регулируются, звук клавиш не включается. Вывод надо менять внутреннюю программу, (прошивку), может я не прав, но я не нашёл, как исправить эту проблему в руководстве по эксплуатации. Принимаю решение сменить прошивку. И тут самое интересное, программа удаляется переключением двух переключателей в состояние on. Так я и сделал и внутренней программы нет. НО КАКОВО БЫЛО МОЁ УДИВЛЕНИЕ, КОГДА ЕДИНСТВЕННЫЙ ПРЕОБРАЗОВАТЕЛЬ КОТОРЫЙ РАБОТАЛ С КОНТРОЛЛЕРОМ ОТКАЗАЛСЯ ПРОШИВАТЬ!!!??? Это был удар ниже пояса. Как вышел из данной ситуации? Собрал пк из старых запчастей, установил windows и прошил ПЛК73 ШТАТНЫМ COM ПОРТОМ.
Вывод: нужно что-то менять с COM портом, либо в обязательном порядке продавать с контроллером преобразователь, дабы не было таких качелей. Спасибо за внимание.
Пожалуйста.
Я работаю с ПЛК63/73 минимум с 3мя разными преобразователями и 2мя разными ноутбуками (ранее был ещё один ноутбук). В плане связи проблем нет. Что я делаю неправильно?
Ну и USB в ПР200 - это по сути тотже преобразователь.
первые упоминания о трудностях с преобразователями на компах без СОМ-портов форумный поисковик находит аж с 2008 года, это не диковинка, кого Вы хотите удивить? Я например чтоб не заморачиваться, работал на линуксе с вируалбокс и все заливалась с тем преобразователем который винда ни как не хотела даже в диспетчере устанавливать. И что то не видно в этой теме упоминания что Вы разобрали плк и что то там перепаяли, чтоб всё заработало
В другой теме он писал, что пропаял порт в ПЛК.
Не суть. Выкиньте свой преобразователь вместе с Windows или настройте эту связку правильно.
Я могу автора удивить, например ПЛК от Carel можно прошить преобразователями ТОЛЬКО на чипах FTDI, так как в их ПО заложен драйвер только данного чипсета.
Так что какой бы у вас преобразователь ни был, чудеса бывает таятся совершенно в другом месте.
А цена преобразователей еще не фактор правильной работы.
Я хочу вам напомнить о индивидуальности каждого com порта. Она заключается в нижней и верхней границах электрических параметров, таких-как частота, напряжение, ток. Есть стандарты согласно которым изготавливаются микросхемы, скажем com порта. Когда данная микросхема уходит в эксплуатацию то проходит проверку на соответствие установленным стандартам для com порта. А теперь к микросхеме . Одна микросхема выпущена с электрическими параметрами приближенная к верхней границе стандарта а другая к нижним, а третья к середине. Как вы думаете какая будет работать стабильнее? Но при этом микросхема сделана по стандарту и должна работать нормально. А тут ещё преобразователь который выполнен со своими параметрами. Отсюда и вытекает рассогласование портов, и те редкие случаи проблем связи с ПЛК
По поводу "В другой теме он писал, что пропаял порт в ПЛК. " я не поднимал этот вопрос потому-что, другой на маем месте отправил прибор в сервис на ремонт, но я себе такое позволить не могу, нет времени на ожидание.
По поводу "В другой теме он писал, что пропаял порт в ПЛК. " я не поднимал этот вопрос потому-что, другой на маем месте отправил прибор в сервис на ремонт, но я себе такое позволить не могу, нет времени на ожидание.
ну так в итоге то что, перепайка помогла или по прежнему нет соединения.
В другой теме он писал, что пропаял порт в ПЛК.
Не суть. Выкиньте свой преобразователь вместе с Windows или настройте эту связку правильно.
Я могу автора удивить, например ПЛК от Carel можно прошить преобразователями ТОЛЬКО на чипах FTDI, так как в их ПО заложен драйвер только данного чипсета.
Так что какой бы у вас преобразователь ни был, чудеса бывает таятся совершенно в другом месте.
А цена преобразователей еще не фактор правильной работы.
Я не сторонник таких ограниченных ПЛК. А САМОЕ ПЛОХОЕ ЧТО ВЫ НИЧЕГО НЕ ПОНЯЛИ ИЗ ВЫШЕ ИЗЛОЖЕННОГО. ВЫ РЕШИЛИ - А ПЕРВЫЙ РАЗ ПОЛЬЗУЕТСЯ ЗНАЧИТ НИЧЕГО НЕ УМЕЕТ.
Я ЕЩЁ РАЗ НАПОМИНАЮ Я ПЛК ПРОШИЛ, Я ПЛК ЗАПРОГРАММИРОВАЛ. А О ПРОБЛЕМЕ РАССКАЗАЛ ИСКЛЮЧИТЕЛЬНО ДЛЯ ТОГО ЧТОБЫ ЗНАЛИ И ПО ВОЗМОЖНОСТИ ВНЕСЛИ ИЗМЕНЕНИЯ. Свои предложения следующие: преобразователь в комплекте (не бесплатно) , или USB вместо COM.
Да ещё одно предложение добавить в модификации индекс о составе добавочных портов (1) это ПИ73-2, (2) это ПИ73-4, (3) это ПИ73-5,
KIPSHOP НИКТО уже не будет менять схемотехнику ПЛК63/73, это из разряда уже "это мертвый язык" на нем никто не разговаривает :) (ИМХО)
А вот на непропай следует пожаловаться, так как такого быть НЕ ДОЛЖНО.
з.ы. у Овен вообще много чего быть не должно, но оно есть, как суслик, иногда приборы работают долго и счастливо, а иногда мрут как мухи.....
Привет. Может у кого есть рабочий пример обмена МВ110-224.4ТД + ПЛК73 интерфейс RS-485 по протоколу Modbus RTU.
В моём варианте (взят с форума) порт открыл а с данными полный бред.
Сколько раз говорил и выкладывал....
Сколько раз говорил и выкладывал....
Я сегодня целый день на форуме облазил огромное количество страниц, и что действительно видел из вами выложенных примеров так это примеры передачи данных но не как не приёма.
Я не просто так написал в другой ветке что, кто-то очень часто пользуются высказыванием "поищите на форуме ".
Я вам так скажу что, связка МВ110-224.4ТД + ПЛК73 редкость на этом форуме.
А ещё примеры для ПЛК63/73 НАПИСАНЫ ТОЛЬКО ДЛЯ 63, И НА 73 ОНИ БЕЗ ДОРАБОТКИ НЕ РАБОТАЮТ.
И ПОСЛЕ ЭТОГО БУДЕМ ИСКАТЬ НА ФОРУМЕ.
Естественно редкость, ибо .ТД мало кто применяет. Но какая разница, если МОДБАС - стандартен.
Между 63 и 73 нет практически никакой разницы. Считайте, что 73 старший брат 63.
Он стандартен не спорю, но способ организации данных в кс мне не понятен, и на мой взгляд замудрёный.
Мне например не понятно почему используется буфер данных такого типа. "Buffer: ARRAY[0..255] OF BYTE "
когда уже Вам надоест, скажете что овен не достоин Ваших рук и пойдете искать другого производителя.
ЗЫ Вам не поняятны прописные истины стандарта
Просто память на заведомо больший размер пакета.
А какой ещё должен быть буфер?
У меня есть практический пример использования ПЛК73 с модбас одновременно с 4 частотниками и 2 контроллерами (не ОВЕН) на чтение и запись каждый. Все работает без проблем.
когда уже Вам надоест, скажете что овен не достоин Ваших рук и пойдете искать другого производителя.
ЗЫ Вам не поняятны прописные истины стандарта
Не дождётесь! Я настырный, уломаю этого зверя. Заставлю работать так как мне надо.
А у вас спрашиваю исключительно из экономии времени.
Не хотите, можете не отвечать.
Интересно как вы разобрались с МОДБАС например в mitsubishi.
Или написали драйвера для устройства под Win10.
Так если Вы не знаете как устроен протокол, зачем Вам давать исходники в которых не разберётесь. Элементарно, зная что в посылке отведено одно место, однобайтовое, под количество передаваемых байт и значение это ни как не может быть больше 256,то зачем делать массив больше?
Ну спасибо опустили ниже плинтуса. Я прекрасно понимаю что это массив и что, создан он с запасом с чем полностью согласен. Я другого не понимаю, в МВ110-224.4ТД измеренное значение состоит из двух регистров (тип float32). Опрашиваю пока только один канал. Если я правильно понимаю то после опроса в буфере должны быть заняты байты с b0-b3 либо b0-b7 . А у меня информация гуляет с b0-b9. Мне это не понятно.
Так если перед Вами стоит задача стать один параметр, так читайте только его, то что в остальных байтах мусор так это потому что буфер используется в нескольких местах. По-моему исследуя исходник это станет очевидным. Если не получается увидеть желаемое значение, значит байты местами поменять
Пожалуйста обсуждайте. 39485
Вижу как минимум 2 ошибки:
1. Не определен начальный регистр - переменная Fa
2. Нет возможности работы ФБ. Его постоянно заставляют стартовать.
1. Не определен начальный регистр - переменная Fa - меняю в онлайне.
2. Нет возможности работы ФБ. Его постоянно заставляют стартовать. По этому прошу поподробнее, не совсем понимаю о чём вы говорите.
1. Не определен начальный регистр - переменная Fa - меняю в онлайне. пробовал ставить 70 ну и др.
2. Нет возможности работы ФБ. Его постоянно заставляют стартовать. По этому поводу прошу поподробнее пожалуйста.
2. О параметре Enable. Его надо установить в true, на следующем цикле сбросить в falce и вызывать ФБ до Complete = true.
В Вашем случае Вы не даете блоку работать. Вы каждый цикл заставляете его сформировать пакет запроса и поставить его в очередь на передачу.
Откуда вы взяли эту муть с байтами 6-7-8-9 ?
IF err <> 0 THEN
enabl := FALSE;
END_IF
enabl := TRUE;
Это что 8( ?
Просто взял пример из форума.
Выкиньте этот пример из доки на свалку.
А как же быть с этим39490
Просто я не вижу в пример где enabl сбрасывается только по ошибки IF err <> 0 THEN enabl := FALSE ; А вот то что он в конце цикла проверяется IF enabl = FALSE THEN enabl := TRUE; END_IF это я вижу
Так это пример с диска который идёт в комплекте с прибором.
И это единственное что может быстро и без лишних вопросов помочь новичку. А вы предлагаете это выкинуть на свалку.
А вот эти претензии предъявите руководству ОВЕНа.
Из выше изложенного, я правильно понял? Что Enable только импульс (это есть в описании библиотеки) и сбрасываем, до момента пока не появится Complete = TRUE либо сработает TimeOut.
Просто я думал что если Enable = FALSE то ФБ прекратит работу. "Описание работы блока Управление включением работы блока происходит сигналом на входе Enable: по переднему фронту импульса логической 1 начинается обмен, по заднему фронту прекращается."
ФБ нет смысла прекращать работу. Или думаете что он как-то сообщит слейву - "не-не, постой, не шли ответ !" ? Запрос-то - ушел. Шо маст го он до Complete
Зачем так? Я думал что он просто не примет посылку и всё тут.
Вот что получилось 39492 Что-то я здесь не до понимаю.
эти данные одинаковые какой бы регистр я бы не читал.
Касаемо этих цифр - то я их просто не удалял. я в буфер смотрю а что там в D меня пока не интересует.
Читать нужно только в момент удачного завершения транзакции. Exception =0 это не момент удачного завершения транзакции.
Специально для ТС - длинный но реально работающий код
PROGRAM ExModbus
VAR
SendModbus2: MB_WR_SNG_REG;
SendModbus4: MB_RD_HOLD_REGS;
SendModbus5: MB_WR_REGS;
ES: BOOL:= TRUE;
TimeOut: TIME:= T#100ms;
Buffer: ARRAY[0..255] OF BYTE;
ErrorSend2: ARRAY[1..5] OF BYTE;
ErrorSend4: ARRAY[1..12] OF BYTE;
ErrorSend5: ARRAY[1..5] OF BYTE;
Stage: BYTE:= 1;
EndSendStored: BOOL;
EndSendError: BOOL:= FALSE;
HavePause:TON;
SpeedPtr: POINTER TO BYTE;
StartTRV1, StartTRV2: BOOL;
SetupTRV1, SetupTRV2: WORD;
SuperHeat: WORD;
END_VAR
IF ComPortState = 2 THEN
IF NOT EndSendStored THEN
CASE Stage OF
1: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 1,
FirstAddr:= 16#FD01,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[1]:= SendModbus4.Exception;
IF ErrorSend4[1] = 0 THEN
AHU_Cont1:= BYTE_TO_BOOL(Buffer[0] AND 4);
AHU_Auto1:= NOT BYTE_TO_BOOL(Buffer[0] AND 128);
ELSE
AHU_Cont1:= FALSE;
AHU_Auto1:= FALSE;
EndSendError:= TRUE;
Stage:= 3;
END_IF;
END_IF;
2: IF ES THEN
Buffer[0]:= 0;
Buffer[1]:= 0;
Buffer[0].2:= AHU1;
SpeedPtr:= ADR(AHU_Speed1);
Buffer[3]:= SpeedPtr^;
SpeedPtr:= SpeedPtr+1;
Buffer[2]:= SpeedPtr^;
END_IF;
SendModbus5(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 1,
FirstAddr:= 16#1870,
Quantity:= 2,
Buffer:= Buffer,
ComHandle:= Settings.Port,
TimeOut:= TimeOut);
IF SendModbus5.Complete THEN
EndSendStored:=TRUE;
ErrorSend5[1]:= SendModbus5.Exception;
END_IF;
3: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 2,
FirstAddr:= 16#FD01,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[2]:= SendModbus4.Exception;
IF ErrorSend4[2] = 0 THEN
AHU_Cont2:= BYTE_TO_BOOL(Buffer[0] AND 4);
AHU_Auto2:= NOT BYTE_TO_BOOL(Buffer[0] AND 128);
ELSE
AHU_Cont2:= FALSE;
AHU_Auto2:= FALSE;
EndSendError:= TRUE;
Stage:= 5;
END_IF;
END_IF;
4: IF ES THEN
Buffer[0]:= 0;
Buffer[1]:= 0;
Buffer[0].2:= AHU2;
SpeedPtr:= ADR(AHU_Speed2);
Buffer[3]:= SpeedPtr^;
SpeedPtr:= SpeedPtr+1;
Buffer[2]:= SpeedPtr^;
END_IF;
SendModbus5(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 2,
FirstAddr:= 16#1870,
Quantity:= 2,
Buffer:= Buffer,
ComHandle:= Settings.Port,
TimeOut:= TimeOut);
IF SendModbus5.Complete THEN
EndSendStored:=TRUE;
ErrorSend5[2]:= SendModbus5.Exception;
END_IF;
5: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 3,
FirstAddr:= 16#FD01,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[3]:= SendModbus4.Exception;
IF ErrorSend4[3] = 0 THEN
EF_Cont1:= BYTE_TO_BOOL(Buffer[0] AND 4);
EF_Auto1:= NOT BYTE_TO_BOOL(Buffer[0] AND 128);
ELSE
EF_Cont1:= FALSE;
EF_Auto1:= FALSE;
EndSendError:= TRUE;
Stage:= 7;
END_IF;
END_IF;
6: IF ES THEN
Buffer[0]:= 0;
Buffer[1]:= 0;
Buffer[0].2:= EF1;
SpeedPtr:= ADR(EF_Speed1);
Buffer[3]:= SpeedPtr^;
SpeedPtr:= SpeedPtr+1;
Buffer[2]:= SpeedPtr^;
END_IF;
SendModbus5(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 3,
FirstAddr:= 16#1870,
Quantity:= 2,
Buffer:= Buffer,
ComHandle:= Settings.Port,
TimeOut:= TimeOut);
IF SendModbus5.Complete THEN
EndSendStored:=TRUE;
ErrorSend5[3]:= SendModbus5.Exception;
END_IF;
7: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 4,
FirstAddr:= 16#FD01,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[4]:= SendModbus4.Exception;
IF ErrorSend4[4] = 0 THEN
EF_Cont2:= BYTE_TO_BOOL(Buffer[0] AND 4);
EF_Auto2:= NOT BYTE_TO_BOOL(Buffer[0] AND 128);
ELSE
EF_Cont2:= FALSE;
EF_Auto2:= FALSE;
EndSendError:= TRUE;
Stage:= 9;
END_IF;
END_IF;
8: IF ES THEN
Buffer[0]:= 0;
Buffer[1]:= 0;
Buffer[0].2:= EF2;
SpeedPtr:= ADR(EF_Speed2);
Buffer[3]:= SpeedPtr^;
SpeedPtr:= SpeedPtr+1;
Buffer[2]:= SpeedPtr^;
END_IF;
SendModbus5(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 4,
FirstAddr:= 16#1870,
Quantity:= 2,
Buffer:= Buffer,
ComHandle:= Settings.Port,
TimeOut:= TimeOut);
IF SendModbus5.Complete THEN
EndSendStored:=TRUE;
ErrorSend5[1]:= SendModbus5.Exception;
END_IF;
9: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 5,
FirstAddr:= 116,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[5]:= SendModbus4.Exception;
IF ErrorSend4[5] = 0 THEN
StartTRV1:= BYTE_TO_BOOL(Buffer[1] AND 1);
TRV1Alarm:= FALSE;
ELSE
TRV1Alarm:= TRUE;
EndSendError:= TRUE;
Stage:= 15;
END_IF;
END_IF;
10: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 5,
FirstAddr:= 99,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[6]:= SendModbus4.Exception;
IF ErrorSend4[6] = 0 THEN
SetupTRV1:= Buffer[0]*256 + Buffer[1];
TRV1Alarm:= FALSE;
ELSE
TRV1Alarm:= TRUE;
EndSendError:= TRUE;
Stage:= 15;
END_IF;
END_IF;
11: IF StartTRV1 <> Evap1 THEN
SendModbus2(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 5,
RegAddr:= 116,
Value:= BOOL_TO_WORD(Evap1),
ComHandle:= Settings.Port,
TimeOut:= TimeOut);
IF SendModbus2.Complete THEN
EndSendStored:=TRUE;
ErrorSend2[1]:= SendModbus2.Exception;
END_IF;
ELSE
EndSendStored:= TRUE;
END_IF;
12: IF SetupTRV1 <> DewTemp THEN
SendModbus2(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 5,
RegAddr:= 99,
Value:= DewTemp,
ComHandle:= Settings.Port,
TimeOut:= TimeOut);
IF SendModbus2.Complete THEN
EndSendStored:=TRUE;
ErrorSend2[2]:= SendModbus2.Exception;
END_IF;
ELSE
EndSendStored:= TRUE;
END_IF;
13: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 5,
FirstAddr:= 2535,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[7]:= SendModbus4.Exception;
IF ErrorSend4[7] = 0 THEN
SuperHeat:= Buffer[1];
TRV1Alarm:= FALSE;
ELSE
SuperHeat1:= 16#FFFF;
EndSendError:= TRUE;
Stage:= 15;
END_IF;
END_IF;
14: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 5,
FirstAddr:= 2527,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[8]:= SendModbus4.Exception;
IF ErrorSend4[8] = 0 THEN
SuperHeat1:= SuperHeat*100 + Buffer[1];
TRV1Alarm:= FALSE;
ELSE
SuperHeat1:= 16#FFFF;
EndSendError:= TRUE;
Stage:= 15;
END_IF;
END_IF;
15: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 6,
FirstAddr:= 116,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[9]:= SendModbus4.Exception;
IF ErrorSend4[9] = 0 THEN
StartTRV2:= BYTE_TO_BOOL(Buffer[1] AND 1);
TRV2Alarm:= FALSE;
ELSE
TRV2Alarm:= TRUE;
EndSendError:= TRUE;
Stage:= 1;
END_IF;
END_IF;
16: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 6,
FirstAddr:= 99,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[10]:= SendModbus4.Exception;
IF ErrorSend4[10] = 0 THEN
SetupTRV2:= Buffer[0]*256 + Buffer[1];
TRV2Alarm:= FALSE;
ELSE
TRV2Alarm:= TRUE;
EndSendError:= TRUE;
Stage:= 1;
END_IF;
END_IF;
17: IF StartTRV2 <> Evap2 THEN
SendModbus2(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 6,
RegAddr:= 116,
Value:= BOOL_TO_WORD(Evap2),
ComHandle:= Settings.Port,
TimeOut:= TimeOut);
IF SendModbus2.Complete THEN
EndSendStored:=TRUE;
ErrorSend2[3]:= SendModbus2.Exception;
END_IF;
ELSE
EndSendStored:= TRUE;
END_IF;
18: IF SetupTRV2 <> DewTemp THEN
SendModbus2(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 6,
RegAddr:= 99,
Value:= DewTemp,
ComHandle:= Settings.Port,
TimeOut:= TimeOut);
IF SendModbus2.Complete THEN
EndSendStored:=TRUE;
ErrorSend2[4]:= SendModbus2.Exception;
END_IF;
ELSE
EndSendStored:= TRUE;
END_IF;
19: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 6,
FirstAddr:= 2535,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[11]:= SendModbus4.Exception;
IF ErrorSend4[11] = 0 THEN
SuperHeat:= Buffer[1];
TRV2Alarm:= FALSE;
ELSE
SuperHeat2:= 16#FFFF;
EndSendError:= TRUE;
Stage:= 1;
END_IF;
END_IF;
20: SendModbus4(
Enable:= ES,
Mode:= MB_RTU,
DevAddr:= 6,
FirstAddr:= 2527,
Quantity:= 1,
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
IF SendModbus4.Complete THEN
EndSendStored:=TRUE;
ErrorSend4[12]:= SendModbus4.Exception;
IF ErrorSend4[12] = 0 THEN
SuperHeat2:= SuperHeat*100 + Buffer[1];
TRV2Alarm:= FALSE;
ELSE
SuperHeat2:= 16#FFFF;
EndSendError:= TRUE;
Stage:= 1;
END_IF;
END_IF;
END_CASE;
ES:= FALSE;
ELSE
IF EndSendError THEN
EndSendError:= FALSE;
ES:= TRUE;
EndSendStored:= FALSE;
ELSE
HavePause(IN:= EndSendStored,PT:=T#40ms);
IF HavePause.Q THEN
ES:= TRUE;
EndSendStored:= FALSE;
IF Stage >= 20 THEN
Stage:= 1;
ELSE
Stage:= Stage+1;
END_IF;
END_IF;
END_IF;
END_IF;
HavePause(IN:= EndSendStored,PT:=T#40ms);
END_IF;
Частотники SE + контроллеры ТРВ Danfoss.
Инициализация порта в другой задаче.
Просто весовые датчики лежат у меня под ногами, нажал на датчик и вот тебе и данные изменились в буфере, а пока этого не происходит смысл их обрабатывать?
Aso огромное спасибо за пример. Взял нужную мне часть совместил со своей частью , изменил задание под мой порт и вуаля байты побежали и я прекрасно вижу как они изменяются от веса.
Просто огромное человеческое спасибо Aso и всем кто принял участие.
Специально для ТС а что это значит?
TS - topic starter, для автора топика короче....
Привет всем. Может спрошу глупость. Но мне это не понятно, com_ready:=FALSE; и com_ready:=TRUE; это признак что порт свободен или занят (соответственно). Или признак открытия порта.
Прошу прощения, не корректно задал вопрос. Имел в виду вот это 39493 39494 и соответственно ready.
Просто
COM_SERVICE1(Enable:=TRUE , Settings:=Settings , Task:=OPEN_TSK );
com_ready:=FALSE;
ELSE
COM_SERVICE1.Enable:=FALSE;
com_ready:=TRUE; .
Massmeter
08.01.2019, 13:11
Здравствуйте. Пытаюсь освоить Codesys на примере ПЛК63. Подключился, пишу простые примерчики. Вопросы: Модификация ПЛК63-РРРРUU.M. В конфигурации ПЛК все выходы Outputs[FIX] обозначены как аналоговые. Переменная REAL. Но там 4 первые должны быть выходами дискретными. Как их сконфигурировать правильно?
Massmeter
08.01.2019, 13:20
Второй вопрос- вывод данных на экран. Использую функцию SHOWDINT. Не понимаю, что должно быть на входе FORMAT. Что за STRING?
Massmeter ничего конфигурировать не надо для релейных выходов, просто используйте 1 (единицу) для включения выхода и 0 для выключения в real.
То есть по булевой логике перед выходом просто пропишите Bool_To_Real и все.
Massmeter
09.01.2019, 21:04
Massmeter ничего конфигурировать не надо для релейных выходов, просто используйте 1 (единицу) для включения выхода и 0 для выключения в real.
То есть по булевой логике перед выходом просто пропишите Bool_To_Real и все.
Спасибо. Понял. работатет.
Massmeter
10.01.2019, 22:55
В стареньком ПЛК63 2012 г на плате есть перемычка. Кажется XP3. Зачем она нужна?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot