Здравствуйте. Имеется ADAM-5510M, с его слотах модули 5050 и 5017 (подробнее в таблице). Соединение с ПК происходит по COM порту. Нужно на ПК с помощью программы Fastwel Universal OPC управлять каналами модулей и отслеживать их состояние.
|
Назначение
|
Активный уровень или диапазон
|
Имя и тип переменной
|
Тип контакта
|
№
|
Модуль
|
Слот
|
|
Клавиша «↑»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Enter
|
(boolean)
|
Вход
|
15
|
5050
|
№ 3
|
|
Клавиша «0»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Zero
|
(boolean)
|
Вход
|
14
|
|
Клавиша «1»
|
При нажатии – «0», в исх.
состоянии – «1»
|
One
|
(boolean)
|
Вход
|
13
|
|
Клавиша «2»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Two
|
(boolean)
|
Вход
|
12
|
|
Клавиша «3»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Three
|
(boolean)
|
Вход
|
11
|
|
Клавиша «4»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Four
|
(boolean)
|
Вход
|
10
|
|
Клавиша «5»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Five
|
(boolean)
|
Вход
|
9
|
|
Клавиша «6»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Six
|
(boolean)
|
Вход
|
8
|
|
Клавиша «7»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Seven
|
(boolean)
|
Вход
|
7
|
|
Клавиша «8»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Eight
|
(boolean)
|
Вход
|
6
|
|
Клавиша «9»
|
При нажатии – «0», в исх.
состоянии – «1»
|
Nine
|
(boolean)
|
Вход
|
5
|
|
Сегмент «e»
|
Горит – «0», потушен –
«1», в исх. сост. – «0»
|
E
|
(boolean)
|
Выход
|
4
|
|
Сегмент «d»
|
Горит – «0», потушен –
«1», в исх. сост. – «0»
|
D
|
(boolean)
|
Выход
|
3
|
|
Сегмент «c»
|
Горит – «0», потушен –
«1», в исх. сост. – «0»
|
C
|
(boolean)
|
Выход
|
2
|
|
Сегмент «b»
|
Горит – «0», потушен –
«1», в исх. сост. – «0»
|
B
|
(boolean)
|
Выход
|
1
|
|
Сегмент «a»
|
Горит – «0», потушен –
«1», в исх. сост. – «0»
|
A
|
(boolean)
|
Выход
|
0
|
|
Слот №2 – модуль ввода-вывода не подключен
|
|
Фотодиод
|
1.3 В – открыт, 3.75 В -
закрыт
|
Svet
|
float
|
Вход
|
2
|
5017
|
№ 1
|
|
Датчик t°C
|
10
°C – 98 мВ, 100 °C – 105 мВ (линеен)
|
Temp
|
float
|
Вход
|
1
|
|
Тензодатчик
|
0 – 0.6 мВ, 3 кг – 3 мВ (линеен)
|
Massa
|
float
|
Вход
|
0
|
|
Управл. 8 инд.
|
Горит – «1», потушен –
«0», в исх. сост. – «0»
|
Fire8
|
(boolean)
|
Выход
|
15
|
5050
|
№ 0
|
|
Управл. 7 инд.
|
Горит – «1», потушен –
«0», в исх. сост. – «0»
|
Fire7
|
(boolean)
|
Выход
|
14
|
|
Управл. 6 инд.
|
Горит – «1», потушен –
«0», в исх. сост. – «0»
|
Fire6
|
(boolean)
|
Выход
|
13
|
|
Управл. 5 инд.
|
Горит – «1», потушен –
«0», в исх. сост. – «0»
|
Fire5
|
(boolean)
|
Выход
|
12
|
|
Управл. 4 инд.
|
Горит – «1», потушен –
«0», в исх. сост. – «0»
|
Fire4
|
(boolean)
|
Выход
|
11
|
|
Управл. 3 инд.
|
Горит – «1», потушен –
«0», в исх. сост. – «0»
|
Fire3
|
(boolean)
|
Выход
|
10
|
|
Сегмент «h»
|
Горит – «0», потушен –
«1», в исх. сост. – «0»
|
H
|
(boolean)
|
Выход
|
9
|
|
Нагреватель
|
ВКЛ. – «1», ВЫКЛ. – «0», в
исх. сост. – «0»
|
Hot
|
(boolean)
|
Выход
|
8
|
|
Вентилятор
|
ВКЛ. – «1», ВЫКЛ. – «0», в
исх. сост. – «0»
|
Cool
|
(boolean)
|
Выход
|
7
|
|
Насос
|
ВКЛ. – «1», ВЫКЛ. – «0», в
исх. сост. – «0»
|
Pump
|
(boolean)
|
Выход
|
6
|
|
Клапан «Грубо»
|
ОТКР. – «1», ЗАКР. – «0»,
в исх. сост. – «0»
|
Klap1
|
(boolean)
|
Выход
|
5
|
|
Клапан «Точно»
|
ОТКР. – «1», ЗАКР. – «0»,
в исх. сост. – «0»
|
Klap2
|
(boolean)
|
Выход
|
4
|
|
Сегмент «f»
|
Горит – «0», потушен –
«1», в исх. сост. – «0»
|
F
|
(boolean)
|
Выход
|
3
|
|
Сегмент «g»
|
Горит – «0», потушен – «1»,
в исх. сост. – «0»
|
G
|
(boolean)
|
Выход
|
2
|
|
Управл. 2 инд.
|
Горит – «1», потушен –
«0», в исх. сост. – «0»
|
Fire2
|
(boolean)
|
Выход
|
1
|
|
Управл. 1 инд.
|
Горит – «1», потушен –
«0», в исх. сост. – «0»
|
Fire1
|
(boolean)
|
Выход
|
0
|
Хочу узнать мнение о написанном программном коде - какие есть в нем ошибки. Не путаю ли я понятия мастер и слэйв. Правильные ли я выбрал функции для опроса модулей (Set5050 и Get5050 и др.) или я ошибся и нужно было бы использовать ADAMRTU_ForceMultiCoils и ей подобные?
Буду признателен за любой совет. Спасибо.
#include <stdio.h>
#include <dos.h>
#include <time.h>
#include <conio.h>
#include "5510drv.h"
#include "RTU.h"
#define sizeofShareMem 100
int count;
unsigned int LocalDIO(void);
void main()
{
unsigned
int Share_Mem[sizeofShareMem];
unsigned
int tmpcnt, tmpcnt1;
if(Modbus_COM_Init(COM2,
Slave, (unsigned long)9600, NO_PARITY, DATA8, STOP1)!=0)
{
printf("error\n");
return;
}
printf("init
success!!\n");
if(!ADAMRTU_ModServer_Create(1,
(unsigned char *)Share_Mem, sizeof(Share_Mem)))
{
printf("err
code is %d\n", Error_Code());
return;
}
printf("server
started..\n");
while(1)
{
disable();
Share_Mem[0]
= LocalDIO();
enable();
for(tmpcnt=0;
tmpcnt<50000; tmpcnt++)
{for(tmpcnt1=0;
tmpcnt1<8; tmpcnt1++){}}
}
}
unsigned int LocalDIO(void)
{
unsigned Bdata1, Bdata2;
char dov1, dov2;
int aiv[8]; /*массив значений
аналогового напряжения*/
int value, i;
Init501718(1);
dov1=0;
Set5050(&dov1, 0, 0, AWord); //slot 0, все дискретные выходы (0-15) выставляем в «0»
if(AiUpdate(1, &ch)==0)
{
for (int j=0; j<8; j++)
{
Get501718(1,
j, &(aiv[value])); //slot 1
}
}
Get5050(3, 8, AByte, &Bdata1); //slot 3, читаем данные каналов 8-15
Get5050(3, 5, ABit, &Bdata2); //5 канал
Get5050(3, 6, ABit, &Bdata2); //6 канал
Get5050(3, 7, ABit, &Bdata2); //7 канал
dov2=0;
for (i=0; i<5; i++)
{
Set5050(&dov2, 3, i, ABit); //slot 3, все дискретные выходы
(0-4) выставляем в «0»
}
Release_All();
return (unsigned int)~div;
}