Appearance
BACNET
Настройки драйвера
ts
export const bacnetValidationSchema = z.object({
settings: bacnetSettingsSchema,
});Настройки связи по доступу
Настройки всегда хранятся в БД целиком — доступ связи (чтение/запись) определяет только видимость полей в редакторе и состав запроса, уходящего на контроллер.
| Настройка | Чт. | Зап. |
|---|---|---|
| IP адрес | ✓ | ✓ |
| порт | ✓ | ✓ |
| тип объекта | ✓ | ✓ |
| экземпляр объекта | ✓ | ✓ |
| свойство(ID) | ✓ | ✓ |
| тип значения | — | ✓ |
| приоритет | — | ✓ |
Типы
ts
export interface IReadBACNETDriverSettings {
/** IP-адрес BACnet-устройства */
[EDriverSettingsType.ADDRESS]: string;
/** id объекта PLC, к которому привязан линк (usePlcDriverLinkSync) */
[EDriverSettingsType.PLC_ID]?: string;
/** отображаемое имя PLC для подписей в редакторе */
[EDriverSettingsType.PLC_NAME]?: string;
/** порт BACnet-устройства */
[EDriverSettingsType.PORT]: string;
/** тип BACnet-объекта (аналоговый/бинарный вход/выход и т.д.) */
[EDriverSettingsType.TYPE]: EBACNETdriverLinkType;
/** отображаемое имя типа (ключ EBACNETdriverLinkType как строка) */
[EDriverSettingsType.TYPE_NAME]: string;
/** instance number BACnet-объекта */
[EDriverSettingsType.INSTANCE]: string;
/** свойство BACnet-объекта (present value и др.); строка — свободные ключи импорта */
[EDriverSettingsType.PROPERTYID]: EBACNETdriverLinkPropertyId | string;
/** кодировка значения (application tag) BACnet */
[EDriverSettingsType.APPLICATION_TAGS]: EBACNETdriverLinkApplicationTags;
/** приоритет записи BACnet (0–16, 0 — без приоритета) */
[EDriverSettingsType.PRIORITY]: EBACNETdriverLinkPriority;
}Стратегия импорта
О том что такое стратегия импорта можно почитать здесь Таб импорта в драйверах
Зависимость objectType от поля type (высший приоритет в определении типа)
ts
// Маппинг MQTT типов на объекты BMS
const mapAddtitionalTypeToObjectType = (
type: string,
): { type: EObjectType; settings: any; display: ObjectDisplay } | null => {
switch (type) {
case "AI":
return {
type: EObjectType.ANALOG_INPUT,
settings: defaultAnalogInputSettings,
display: defaultAnalogInputObjectDisplay,
};
case "AO":
return {
type: EObjectType.ANALOG_OUTPUT,
settings: defaultAnalogOutputSettings,
display: defaultAnalogOutputObjectDisplay,
};
case "DI":
return {
type: EObjectType.DIGITAL_INPUT,
settings: defaultDigitalInputSettings,
display: defaultDigitalInputObjectDisplay,
};
case "DO":
return {
type: EObjectType.DIGITAL_OUTPUT,
settings: defaultDigitalOutputSettings,
display: defaultDigitalOutputObjectDisplay,
};
case "M":
return {
type: EObjectType.MODE_OBJECT,
settings: defaultModeObjectSettings,
display: defaultModeObjectDisplay,
};
default:
return null;
}
};Зависимость objectType от поля object-type
ts
// Маппинг BACNET object-type на объекты BMS
const mapBACNETTypeToObjectType = (
type: number,
): { type: EObjectType; settings: any; display: ObjectDisplay } | null => {
switch (type) {
case 0:
return {
type: EObjectType.ANALOG_INPUT,
settings: defaultAnalogInputSettings,
display: defaultAnalogInputObjectDisplay,
};
case 1:
case 2:
case 12:
return {
type: EObjectType.ANALOG_OUTPUT,
settings: defaultAnalogOutputSettings,
display: defaultAnalogOutputObjectDisplay,
};
case 3:
return {
type: EObjectType.DIGITAL_INPUT,
settings: defaultDigitalInputSettings,
display: defaultDigitalInputObjectDisplay,
};
case 4:
case 5:
return {
type: EObjectType.DIGITAL_OUTPUT,
settings: defaultDigitalOutputSettings,
display: defaultDigitalOutputObjectDisplay,
};
case 19:
return {
type: EObjectType.MODE_OBJECT,
settings: defaultModeObjectSettings,
display: defaultModeObjectDisplay,
};
default:
return null;
}
};Зависимость driver.settings.PLC от additionalData
ts
async updateDriverData({ selectedFile, additionalInfo, currentObject }): Promise<{
objectsToUpdate?: UpdateObjectDto;
}> {
const fileName = selectedFile.file.name;
const objectSettings = currentObject.settings as {
Port?: string;
IP?: string;
PLC?: Array<{ id: string; name: string; Port: string; IP: string }>;
};
this._plcId = uuidv4();
const updatedObject: UpdateObjectDto = {
id: currentObject.id,
settings: {
...currentObject.settings,
PLC: [
{
id: this._plcId,
name: additionalInfo.PROJECT_NAME || fileName,
Port: additionalInfo?.PORT || currentObject?.settings?.Port || "",
IP: additionalInfo?.IP || currentObject?.settings?.IP || "",
},
...(objectSettings.PLC ?? []),
],
},
};
return {
objectsToUpdate: updatedObject,
};
},Зависимость driverLink.type от settable
ts
// Определение типа драйверлинка на основе settable
const getDriverLinkTypesFromSettable = (
settable: string | undefined,
): EDriverLinkType[] => {
if (!settable) {
return [EDriverLinkType.READ];
}
switch (settable) {
case "Y":
return [EDriverLinkType.WRITE];
case "N":
return [EDriverLinkType.READ];
case "B":
return [EDriverLinkType.READ, EDriverLinkType.WRITE];
default:
return [EDriverLinkType.READ];
}
};Настройки связи по доступу
Настройки всегда хранятся в БД целиком — доступ связи (чтение/запись) определяет только видимость полей в редакторе и состав запроса, уходящего на контроллер.
| Настройка | Чт. | Зап. |
|---|---|---|
| IP адрес | ✓ | ✓ |
| порт | ✓ | ✓ |
| тип объекта | ✓ | ✓ |
| экземпляр объекта | ✓ | ✓ |
| свойство(ID) | ✓ | ✓ |
| тип значения | — | ✓ |
| приоритет | — | ✓ |
Mentioned In
None yet.