danwei
级别: 略有小成
精华主题: 0
发帖数量: 89 个
工控威望: 234 点
下载积分: 1526 分
在线时间: 292(小时)
注册时间: 2013-05-22
最后登录: 2024-07-20
查看danwei的 主题 / 回贴
楼主  发表于: 2018-01-10 17:15
    三菱MX通讯控件
ReadDeviceBlock参数怎么给,为什么读取的软元件类型跟地址写进去总是报错   单单一个字母入"m"时就不报
axActProgType1.ReadDeviceBlock("m" , b, out arry[0]);
求指导
worker02
级别: 略有小成
精华主题: 0
发帖数量: 115 个
工控威望: 294 点
下载积分: 723 分
在线时间: 280(小时)
注册时间: 2008-08-01
最后登录: 2024-11-20
查看worker02的 主题 / 回贴
1楼  发表于: 2018-01-18 09:58
Procedure TForm1.Read_Data1;///////顺序读取/////////////////////
Var     R_Msg,Re_Add,ReData_Len,I,Col,Row,D8:Integer;
        Re_Data:Array of LongInt;
        Sen_Add:WideString;
        str,Str1:String;
        Str_Len:Integer;
begin
        Re_Add   :=StrToInt(Edit1.Text);//取出起始地址值
        ReData_Len:=StrToInt(Edit2.Text);//取出数据长度
IF(ComboBox1.Text='X')OR(ComboBox1.Text='Y') then //判定是为8进制类型设备X,y最大获取范围
        begin
IF (ReData_Len+Re_Add)>128 then
        ReData_Len:=128-Re_Add;
        end;
        FOR I:= 0 To ReData_Len-1 DO
        begin
IF(ComboBox1.Text='X')OR(ComboBox1.Text='Y')Then //判定是为8进制类型设备X,y最大获取范围
        D8:=DectoD8(Re_Add+I)
        else
        D8:=Re_Add+I;
         IF I=0 THEN
        Sen_Add:=ComboBox1.Text+IntToStr(D8)
        else
        Sen_Add:=Sen_Add+#10+ComboBox1.Text+IntToStr(D8);
        end;
IF (Re_Add>=0)And(ReData_Len>0)then
        Begin
        SetLength(Re_Data,ReData_Len);
IF RadioButton4.Checked=True Then
        R_Msg:=FX_Com.ReadDeviceRandom(Sen_Add,ReData_Len,Re_Data[0])
        else
        R_Msg:=FX_Usb.ReadDeviceRandom(Sen_Add,ReData_Len,Re_Data[0]);
        end
        ELSE
IF Re_Add<0 then
        ShowMessage('起始地址有误')
        else
        ShowMessage('长度填写有误码');
IF R_Msg=0 Then
        Stat_Bar.Panels.Items[7].Text:='接收成功'
        else
        Begin
        Stat_Bar.Panels.Items[7].Text:='接收失败错误代码:'+#13+IntTOstr(R_Msg);
        Exit;
        end;
        FOR I:=0 TO High(Re_Data) DO
        Begin
IF(ComboBox1.Text='X')OR(ComboBox1.Text='Y') then//判定是为8进制类型设备
        begin
        D8:=DectoD8(Re_Add+I);
        Col:= (I+Re_ADD) MOD 8+1;
        Row:= (I+Re_ADD) DIV 8+1;
        end
ELSE

        BEGIN
        Col:= (I+Re_ADD) MOD 10+1;
        Row:= (I+Re_ADD) DIV 10+1;
        end;
        IF Dec.Checked then
        StringGrid1.Cells[Col,Row]:=IntToStr(Re_Data[I])
        else
        IF Hex.Checked then
        StringGrid1.Cells[Col,Row]:=IntToHex(Re_Data[I],2)
         else
        IF Bin.Checked then
        begin
        str:=IntTostr(Re_Data[I]);
        Str_Len:=Length(str);
        str:=IntToBin(Re_Data[I],Str_Len*4);
        Str1:='1';
        Str_Len:=Pos(Str1,str);
        Delete(Str,1,Str_Len-1);
        IF str='0000' then
        str:='0'
        else
        str:=str;
        StringGrid1.Cells[Col,Row]:=str;
        end;

        StringGrid1.Font.Name:='宋体';
        stringGrid1.Font.Size:=13;
        Form1.Add_tpye;
        end;

        end;
我是用DELPHI写,用的接口是USB,没有问题,测试过。
worker02
级别: 略有小成
精华主题: 0
发帖数量: 115 个
工控威望: 294 点
下载积分: 723 分
在线时间: 280(小时)
注册时间: 2008-08-01
最后登录: 2024-11-20
查看worker02的 主题 / 回贴
2楼  发表于: 2018-01-18 10:03
图片:
这是软件测试过程