Люди добрые, если у кого-то есть пример работы с модулями МДВВ, и МВА8 с использованием протокола ОВЕН и библиотеки owen_io.dll написанный на delphi, поделитесь, пожалуйста. Мой e-mail: mr.rail@mail.ru
Вид для печати
Люди добрые, если у кого-то есть пример работы с модулями МДВВ, и МВА8 с использованием протокола ОВЕН и библиотеки owen_io.dll написанный на delphi, поделитесь, пожалуйста. Мой e-mail: mr.rail@mail.ru
И со мной поделитесь примерами работы с модулями МДВВ, и МВА8 с использованием протокола ОВЕН и библиотеки owen_io.dll написанный на delphi, пожалуйста.
epe@udm.ru
Имеется несколько модулей ввода/вывода МК110, МУ110, МВ110. Модули объеденены в сеть RS-485 и сконфигурированы, нормально опрашиваются конфигуратором М110, через преобразователь АС4.
Обязательно ли использование библиотеки owen_io.dll для работы с модулями через AC4???
Ранее я писал программу на VB .NET для работы с контроллерами ADAM по протоколу DCON. Посмотрел руководства на модули, поменял соответственно передаваемые команды. Но с ОВЕН прога не работает, пробовал DCON, MODBUS, ОВЕН протоколы, смотрел снифером передаваемые команды конфигуратора М110 при опросе входов. От модулей ответа нет.
Вообще после установки драйвера AC4, я могу работать с появившимся COM3, как с обычным COM RS-232 или нет?
помогите пожалуйста решить проблему :confused:Код:1109 0.00000502 Mx110.exe IOCTL_SERIAL_GET_HANDFLOW Silabser2 SUCCESS
1110 0.00375355 Mx110.exe IOCTL_SERIAL_SET_BAUD_RATE Silabser2 SUCCESS Rate: 9600
1111 0.00001017 Mx110.exe IOCTL_SERIAL_SET_RTS Silabser2 INVALID PARAMETER
1112 0.00294542 Mx110.exe IOCTL_SERIAL_CLR_DTR Silabser2 SUCCESS
1113 0.00108344 Mx110.exe IOCTL_SERIAL_SET_LINE_CONTROL Silabser2 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
1114 0.00386592 Mx110.exe IOCTL_SERIAL_SET_CHAR Silabser2 SUCCESS EOF:1a ERR:0 BRK:0 EVT:d XON:11 XOFF:13
1115 0.00398516 Mx110.exe IOCTL_SERIAL_SET_HANDFLOW Silabser2 SUCCESS Shake:0 Replace:80000040 XonLimit:128 XoffLimit:128
1116 0.00297524 Mx110.exe IOCTL_SERIAL_CLR_RTS Silabser2 SUCCESS
1117 0.00001109 Mx110.exe IOCTL_SERIAL_SET_TIMEOUTS Silabser2 SUCCESS RI:2 RM:4 RC:100 WM:10 WC:500
1118 0.00294100 Mx110.exe IOCTL_SERIAL_PURGE Silabser2 SUCCESS Purge: TXCLEAR RXCLEAR
1119 0.00195705 Mx110.exe IOCTL_SERIAL_PURGE Silabser2 SUCCESS Purge: TXABORT TXCLEAR RXCLEAR
1120 0.00001246 Mx110.exe IOCTL_SERIAL_SET_WAIT_MASK Silabser2 SUCCESS Mask: RXFLAG BRK ERR
1121 0.00091432 Mx110.exe IRP_MJ_WRITE Silabser2 SUCCESS Length 14: #HPHGTMOHVIJH.
1122 0.04798078 Mx110.exe IOCTL_SERIAL_WAIT_ON_MASK Silabser2 SUCCESS
1123 0.00001404 Mx110.exe IOCTL_SERIAL_GET_COMMSTATUS Silabser2 SUCCESS
1124 0.00000144 Mx110.exe IRP_MJ_READ Silabser2 SUCCESS Length 30: #HPGOTMOHJKJOITJGJHJHKRKTNOVO.
Нащет ас4 после установки дров появившийся виртуальный com порт для програмиста ничем не отличаетса от реального а нащет работы с модульми на форуме вроде видел пример на си
Имеется прибор ТРМ251 с прошивкой версии V1.10 (базовый адрес 16)
для чтения с первого входа синтаксис команды снизу правильный?
ReadFloat24(16,0,'rEAD',val,-1);
Господа, очень нужна помощь. Никогда не приходилось работать с оборудованием компании ОВЕН (впрочем, как и с аналогичными приборами других компаний). Передо мной пославлена задача: необходимо передачу данных с прибора ТРМ202 в Excel. Нет ли у кого-нибудь похожего примера?
P.S. Я так понимаю, что надо настроить OPC-сервер, который выложен на сайте, выставить в нем и в ТРМ202 одинаковые параметры, а затем сохраненную конфигурацию как-то прикрутить к Excel (но как это реализовать я не знаю) Верно ли я думаю?
Заранее благодарен за любую помощь и советы.
Excel понимает файлы с расширением .csv, в котором поля разделяются точкой с запятой ";". Вам необходимо найти программу для ПК, которая по модбас будет брать данные из трм и складывать в такого типа файл.
прибор: трм251 (прошивка V1.10).
базовый адрес:16
скорость: 9600
биты данных: 8
стоп бит: 1
длинна адреса: 8
четность: нет
com-порт: №1
через АС3-М
пытаюсь в прибор послать команду "rEAd" и собственно получить результат.
Пишу в delphi 2010
у приборов ТРМ2хх с прошивкой 1.10 я так понял команда rEAd не требует индексации, надо послать -1..
первый вход имеет индекс "0", второй - индекс "1". Чтобы считать данные с первого входа, надо послать команду по адресу "адрес - 0".. Значит шлем по адресу 16.
имеем: ReadIEEE32(16,0,'rEAd',val,tm,-1);
Снизу привел свой код полностью... результат замера должен придти в компонент Edit1.
Получаю ошибку -104. И не понимаю что не так..
воспользоваться функцией LastErrToStr не могу.. Приходит какими-то квадратиками и иероглифами - не читаемо.Код:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
// Определения четности (Без)
prty_NONE:integer=0;
// Определения количества Бит данных
databits_8:integer=1;
// Определения количества стоп Бит
stopbit_1:integer=0;
// Вид конвертора RS485 (Автоматический конвертор)
RS485CONV_AUTO:integer=1;
type
TProcOpenPort=function (n,speed,part,bits,stop,vid:DWORD):integer;stdcall;
TProcSetupPort=function (n,speed,part,bits,stop,vid:DWORD):integer;stdcall;
TProcClosePort=function :integer;stdcall;
TProcSetApiMode=function (n:DWORD):integer;stdcall;
TProcReadIEEE32=function (adr,adr_type:DWORD;command:pchar;var value:single;var time:integer;index:integer):integer;stdcall;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hLibInst:cardinal;
func_avail:boolean;
OpenPort:TProcOpenPort;
SetupPort:TProcSetupPort;
ClosePort:TProcClosePort;
ReadIEEE32:TProcReadIEEE32;
SetApiMode:TProcSetApiMode;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
hLibInst:=LoadLibrary('owen_io.dll');
if(hLibInst<>0)
then
begin
func_avail:=true;
OpenPort:=GetProcAddress(hLibInst,'OpenPort');
if(not Assigned(OpenPort)) then
begin
func_avail:=false;
exit;
end;
ClosePort:=GetProcAddress(hLibInst,'ClosePort');
if(not Assigned(ClosePort)) then
begin
func_avail:=false;
exit;
end;
SetupPort:=GetProcAddress(hLibInst,'SetupPort');
if(not Assigned(SetupPort)) then
begin
func_avail:=false;
exit;
end;
ReadIEEE32:=GetProcAddress(hLibInst,'ReadIEEE32');
if(not Assigned(ReadIEEE32)) then
begin
func_avail:=false;
exit;
end;
SetApiMode:=GetProcAddress(hLibInst,'SetApiMode');
if(not Assigned(SetApiMode)) then
begin
func_avail:=false;
exit;
end;
end
else
func_avail:=false;
end;
// ОТКРЫВАЕМ COM-ПОРТ #1
procedure TForm1.Button1Click(Sender: TObject);
var
op_succ:integer;
begin
if func_avail then
begin
SetApiMode(1);
op_succ:=OpenPort(0,2,0,databits_8,stopbit_1,RS485CONV_AUTO);
if (op_succ<>0) then
Application.MessageBox('Не удалось открыть порт', 'Ошибка!', MB_OK)
else
begin
SetupPort(0,2,0,databits_8,stopbit_1,RS485CONV_AUTO);
end;
end
else
Application.MessageBox('Не удалось открыть порт (функция!)', 'Ошибка!', MB_OK);
end;
// ЗАКРЫВАЕМ COM-ПОРТ #1
procedure TForm1.Button2Click(Sender: TObject);
var
cp_succ:integer;
begin
if func_avail then
begin
cp_succ:=ClosePort();
if (cp_succ<>0) then
Application.MessageBox('Не удалось закрыть порт', 'Ошибка!', MB_OK);
end
else
Application.MessageBox('Не удалось закрыть порт (функция!)', 'Ошибка!', MB_OK);
end;
// ПО ИДЕЕ ЧИАТЕМ С ПЕРВОГО ВХОДА ТРМ251
procedure TForm1.Button3Click(Sender: TObject);
var
iee:integer;
val:single;
tm:integer;
begin
iee:=ReadIEEE32(16,0,'rEAd',val,tm,-1);
Edit1.Text:=FloatToStr(val);
Edit2.Text:=IntToStr(iee);
end;
end.
если кто-то поможет новичку - буду рад.
Дамы и господа!!!
ОТВЕЧУ СЕБЕ САМ!!!
код, написанный мною для ТРМ 251 выше, работает!!!
При компиляции в Делфи 6, всё заработало!!! И даже LastErrToStr теперь не иероглифами, а русскими буквами!!!!!
я компилировал в Делфи 2010, ОС Виндовс севен 64 бита.
думайте дальше сами...
я слышал что в Делфи 2010 уникод... Из-за этого?