да там есть .. и цепляются нормально советую такой http://www.seeedstudio.com/depot/Min...le-p-1702.html ..
да там есть .. и цепляются нормально советую такой http://www.seeedstudio.com/depot/Min...le-p-1702.html ..
Dmitriy Murashov
SPS Software Engineer Automation Engineering RUS
Спасибо! Как раз такой и заказалзавтра у меня будет малинка 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
Да, это очень удобно.
Вот проект CodeSys, который реализует автоматическую запись всех retain-ов на карту памяти Raspberry каждые 5 секунд, если было изменение в значениях.
Кусок кода для сохранения retain оформлен как отдельная программа RetainManager и запускается отдельной задачей (Task) каждые 5 сек.
В основной программе retain используются без каких-либо особенностей.
Можно запустить Web-визуализацию и поиграться с переменной newVar (она retain).
Путь к файлу для переменных retain указан '/home/pi/Retain'. Файл будет называться Retain.ret. Это можно изменить.
Часто в описаниях забывают добавить про необходимость импортировать библиотеки CmpAdd и CmpChecksum.
Последний раз редактировалось ВладОвен; 05.05.2022 в 16:06.
Спасибо за совет. А вы не пробовали с внешней памятью работать? Кодесися поддерживает? В Линухе то я приконектился к чипу все хорошо, вижу адрес, читаю - пишу. А вот в кодесис вопрос.
можно сделать скрипт на 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 вроде как полнофункциональный должен быть даже в демо режиме)?
Спасибо!