Спасибо! Как раз такой и заказалзавтра у меня будет малинка 2, но usb-rs485 и RTC идти будут долго. Напишу как всё прошло, думаю перебросить проекты с СПК107. Жаль что у Овена нет аналогов.
Спасибо! Как раз такой и заказалзавтра у меня будет малинка 2, но usb-rs485 и RTC идти будут долго. Напишу как всё прошло, думаю перебросить проекты с СПК107. Жаль что у Овена нет аналогов.
Всем привет. Человек постами выше давал ссылку http://www.ebay.com/itm/400503978923 - часы реального времени + память для retain. Вопрос, кто-нибудь решал проблему сохранения значения в память 24ххх?
retain можно и на флешку сохранять в виде файла и при загрузки подгружать обратно (а в программе просто VAR RETAIN использовать и все)
PROGRAM RetainManager
VAR_INPUT
RetainFilePathName : STRING := '/root/Retain';
SaveFilterTime : TIME := T#5S;
ForceSave : BOOL;
END_VAR
VAR
Init: BOOL;
pRetainFilePathName : POINTER TO STRING;
pCurrentApp : POINTER TO APPLICATION;
RetainAreaSize: __XWORD;
pRetainArea: POINTER TO BYTE;
dwCRCSave: DWORD;
dwCRC: DWORD;
TOF1 : TOF := (PT := SaveFilterTime);
R_TRIG1: R_TRIG;
END_VAR
VAR_OUTPUT
RTSIECResult: cmpapp.RTS_IEC_RESULT;
AttemptSaveCounter: INT;
END_VAR
IF NOT Init THEN
pCurrentApp := AppGetCurrent(ADR(RTSIECResult));
IF RTSIECResult<>0 THEN RETURN; END_IF
RetainAreaSize := AppGetAreaSize(pApp:= pCurrentApp, uiType:= DA_RETAIN, pResult:= ADR(RTSIECResult));
IF RTSIECResult<>0 THEN RETURN; END_IF
pRetainArea := AppGetAreaAddress(pApp:= pCurrentApp, uiType:= DA_RETAIN, pResult:= ADR(RTSIECResult));
IF RTSIECResult<>0 THEN RETURN; END_IF
IF LEN(RetainFilePathName) <> 0 THEN
pRetainFilePathName := ADR(RetainFilePathName);
ELSE
pRetainFilePathName := ADR(pCurrentApp^.szName);
END_IF
RTSIECResult := AppRestoreRetainsFromFile(pCurrentApp, pRetainFilePathName^);
CASE RTSIECResult OF
0: // #define ERR_OK 0x0000
16#1E: // #define ERR_SIGNATURE_MISMATCH 0x001E /* Signature mismatch of an api function */
16#32: // #define ERR_FILE_ERROR 0x0032 /* File error. e.g. cannot open a file for writing because it could be write protected */
ELSE RETURN;
END_CASE
dwCRCSave := CRC32Finish(ulCRC:= CRC32Update(ulCRC:= CRC32Init(), pData:= pRetainArea, ulSize:= RetainAreaSize));
Init := TRUE;
END_IF
R_TRIG1(CLK := ForceSave);
dwCRC := CRC32Finish(ulCRC:= CRC32Update(ulCRC:= CRC32Init(), pData:= pRetainArea, ulSize:= RetainAreaSize));
IF dwCRC <> dwCRCSave OR R_TRIG1.Q THEN
IF NOT TOF1.Q OR R_TRIG1.Q THEN
RTSIECResult := AppStoreRetainsInFile(pCurrentApp, pRetainFilePathName^); // записасать в файл
IF RTSIECResult = 0 THEN
dwCRCSave := dwCRC;
END_IF
AttemptSaveCounter := AttemptSaveCounter + 1;
TOF1(IN := TRUE);
END_IF
END_IF
IF TOF1.Q THEN
TOF1(IN := FALSE);
END_IF
http://forum.codesys.com/viewtopic.p...=5722&start=15
Последний раз редактировалось murdemon; 24.12.2015 в 13:28.
Dmitriy Murashov
SPS Software Engineer Automation Engineering RUS
Спасибо за совет. А вы не пробовали с внешней памятью работать? Кодесися поддерживает? В Линухе то я приконектился к чипу все хорошо, вижу адрес, читаю - пишу. А вот в кодесис вопрос.
можно сделать скрипт на bash и вызывать его из кодезиса с несколькими параметрами.. или просто писать в именованный канал как /dev/mymemory как в файл (лучше второй вариант)
Dmitriy Murashov
SPS Software Engineer Automation Engineering RUS
Добрый день!
Осваиваю Codesys + Raspberry Pi 2 (далее RPi). Возникла проблема на этапе развертывания на RPi Modbus RTU Master/Slave. Насколько я понимаю необходимо сделать следующие вещи:
1. Подключить преобразователь USB<->RS к RPi, и через dmesg посмотреть как он стал доступен в системе. В моём случае это /dev/ttyUSB0.
(dmesg выдал: usb 1-1.4: pl2303 converter now attached to ttyUSB0)
2. На RPi в файл /etc/CODESYSControl.cfg добавить:
[SysCom]
Linux.DeviceFile=/dev/ttyUSB
portnum:=COM.SysCom.SYS_COMPORT1
3. Перезагрузить RPi
4. В проект CODESYS добавляем "Modbus COM", а к "Modbus COM" добавляем либо "Modbus Serial Device" (если хотим Slave), либо "Modbus Master" (если хотим Master).
5. Настраиваем всё, что добавили.
6. Собираем проект и отправляем его в RPi
В качестве базового проекта я использовал Onewire (он идёт в комплекте вместе с пакетом для работы с RPi). Всё что касается onewire в нём отлично работает: датчик температуры опрашивается и через web-интерфейс можно данные с него посмотреть.
В моём случае (см. рис.), почему-то, при просмотре в online режиме напротив modbus устройства вместо зелёных стрелок, которые говорят о том, что всё ОК, стоят треугольники с красной рамкой, а в статусе устройства указано:
PCI-BUS: No driver found
SerialPort: No driver found
codesys_modbus.jpg
Может ли это быть связано с тем, что я использую пока только двух часовую демо версию (не успел пока купить полную)? Но, насколько я понимаю, в демо ограничение связано только со временем работы, а функционал полный.
Цитата с сайта: Without purchasing a license (just download) the CODESYS Control for Raspberry Pi runs for two hours without functional limitations and shuts down automatically (demo).
Или всё дело в том, что я каким-то образом не подключил драйвера?
Проект приложил к письму.
Буду очень благодарен за помощь!
Попробуй компорт в кодезисе с 1 на 4, 3, 2 поменять - он иногда их по разному подхватывает.
Dmitriy Murashov
SPS Software Engineer Automation Engineering RUS
Спасибо за советы!
Попробовал, но как-то не завелось)
Изучение логов дало следующий результат:
- в файле /tmp/codesyscontrol.log есть следующие записи:
1452097627: Cmp=OnlineLicenseManager, Class=4, Error=0, Info=0, pszInfo=**** License for IoDrvModbusSerial not installed.
1452097627: Cmp=CmpIoMgr, Class=4, Error=1, Info=1, pszInfo=**** Update configuration failed from driver <iodriver>IoDrvModbusTCPSlave</iodriver>
(полный лог прикреплен к сообщению)
- в логах CODESYS та же информация:
pic.jpg
Я так понимаю, мои неудачи в работе с Modbus связанны именно с этим. Исправится ли эта ситуация, после покупки лицензии (я пока работаю в демо режиме)?
Можно ли в демо режиме как-то загрузить эти драйвера? (CODESYS вроде как полнофункциональный должен быть даже в демо режиме)?
Спасибо!
Продолжение следует...
Развожу плату IO для Raspberry, должны будут сделать шаблон пока, без металлизации и один из старых вариантов.
Пока вот пришел к такому варианту. количество входов/выходов 7-9, 8-8, 9-7 (два пина можно переключать либо на вход либо на транзисторный выход).
7 выходов могут быть либо релейными 5А (реле SRA), либо аналоговыми 0-10В (аналоговые выходы управляются ШИМ с соответствующих пинов Raspberry), схема от Вольд-а с гальванической развязкой.
На плате разведен вторичный ИП, которым можно записать либо аналоговые выходы 12В, либо сам Raspberry, если нет аналоговых выходов.
Плата питается 24В.
Собственно гляньте что вышло, разводку еще надо перепроверять ессно, но может что бросится сразу в глаза из ляпов ?
Выглядеть будет примерно так как на картинках.
Собственно собираюсь заказывать у китайцев, хотя может и у нас где. Интересует сколько штук заказывать, кто потом подпишется на покупку платы ? мне явно 10 штук не надо, точно уйдет 2 или может 3 штуки сразу.
Еще такой момент. стоит ли расширить плату влево и сделать еще один вторичный ИП, чтобы от общего БП 24В питать и плату и аналоговые выходы и сам Raspberry ? Это увеличит плату и соответственно цену за нее.
Последний раз редактировалось melky; 21.01.2016 в 12:02.