PDA

Просмотр полной версии : МВА8, С++, modbus



nemo_1977
11.07.2013, 11:53
Добрый день.
Подключаю мва8 напрямую к процессору и библиотеки модбас использовать немогу.
Нужен простой опрос состояния входов платы, изначально в конфигураторе я ее настрою.
Работа будет проходить так: отправил посылку(одна стандартная для опроса входов)-получил ответ.
Можете мне помочь в следующем.
1. Ткните в место с примерами на с++, или другом языке.
2. Возможно дадите строку команды для опроса готовую ?
Спасибо.

SafSerg66
15.07.2013, 07:05
я опрашивал так на С++ builder
void __fastcall TForm1::chanel1Click(TObject *Sender)
{int j;
char t,d;
char buff[17];
AnsiString f;
float x;
// объединение
union {
unsigned char c[4];
float count;
} cnt;
// канал 1 // 1 0 0 3 0 0 0 3 0 0 0 2 E 8 d a
char canal1[16] = {0x31,0x30,0x30,0x33,0x30,0x30,0x30,0x33,0x30,0x30 ,0x30,0x32,0x45,0x38,0x0d,0x0a};

ApdComPort1->Output = ":";
for(j=0;j<16;j++)
{ApdComPort1->Output = canal1[j];}
strcpy(buf,s.c_str()); // копируем строку в буфер
Edit1->Text=buf;

for(int s=0;s<17;s++)
// дешифровать входные данные
{ t=buf[s];
if(t==':')d=':';
if(t=='0')d=0x00;
if(t=='1')d=0x01;
if(t=='2')d=0x02;
if(t=='3')d=0x03;
if(t=='4')d=0x04;
if(t=='5')d=0x05;
if(t=='6')d=0x06;
if(t=='7')d=0x07;
if(t=='8')d=0x08;
if(t=='9')d=0x09;
if(t=='A')d=0x0A;
if(t=='B')d=0x0B;
if(t=='C')d=0x0C;
if(t=='D')d=0x0D;
if(t=='E')d=0x0E;
if(t=='F')d=0x0F;
buff[s]=d;}

unsigned char ch1=(buff[1]<<4)+buff[2]; // адрес
Edit3->Text = IntToStr(ch1);
unsigned char ch2=(buff[3]<<4)+buff[4]; // функция
Edit4->Text = IntToStr(ch2);
unsigned char ch3=(buff[5]<<4)+buff[6]; // количество регистров
Edit5->Text = IntToStr(ch3);
unsigned char ch4=(buff[7]<<4)+buff[8]; // данные
Edit6->Text = IntToStr(ch4);
unsigned char ch5=(buff[9]<<4)+buff[10]; // данные
Edit7->Text = IntToStr(ch5);
unsigned char ch6=(buff[11]<<4)+buff[12]; // данные
Edit8->Text = IntToStr(ch6);
unsigned char ch7=(buff[13]<<4)+buff[14]; // данные
Edit9->Text = IntToStr(ch7);
unsigned char ch8=(buff[15]<<4)+buff[16]; // контрольная сумма
Edit9->Text = IntToStr(ch8);

// заносим в объединение
cnt.c[0]=ch5;
cnt.c[1]=ch4;
cnt.c[2]=ch7;
cnt.c[3]=ch6;
x=cnt.count;
f=FormatFloat("00.00",x);
Edit4->Text = f;
s=""; // обнуляем строку
}

SafSerg66
15.07.2013, 07:07
теперь использую библиотеку owen.dll. всё работает не только с мва но трм151 трм202

nemo_1977
19.07.2013, 13:23
Благодарю.
Пока сделал опрос на DCON, по вашей наводке попробую на мод бас.