에 의해 배열을 전달하기위한 바피 (Vapi)의 정의에 사용하는 I가 ModbusTCP 사용하여 하나의 장치 레지스터를 읽을 libmodbus을 사용하여 다음과 같은 C 코드 :매개 변수 참조
modbus_t *ctx;
uint16_t tab_reg[16];
ctx = modbus_new_tcp("10.0.1.77", 502);
modbus_read_registers(ctx, 0x20, 2, tab_reg);
printf("reg = %d (0x%X)\n", tab_reg[0], tab_reg[0]);
printf("reg = %d (0x%X)\n", tab_reg[1], tab_reg[1]);
지금 발라은을 사용하여 이상이 전환 시도
[CCode (cheader_filename = "modbus.h", cname = "modbus_new_tcp")]
public static unowned Modbus.modbus_t create_tcp (string ip_address, int port);
public static int read_registers (Modbus.modbus_t ctx, int addr, int nb, uint16 dest);
[CCode (cheader_filename = "modbus.h")]
및 번역 발라 프로그램입니다 : 내가 생성 한 VAPI, 새로운 읽기 그 내용은
class ModbusReadTest : GLib.Object {
unowned Modbus.modbus_t ctx;
public void run() {
uint16 reg = 0x00;
ctx = create_tcp ("10.0.1.77", 502);
Modbus.read_registers (ctx, 0x20, 2, reg);
message ("reg = %d (0x%X)", reg, reg);
Modbus.close(ctx);
}
}
놀라운 일이 아니다
read-registers-test.c:71:2: warning: passing argument 4 of ‘modbus_read_registers’ makes pointer from integer without a cast [enabled by default]
: 나는 C 코드로 다음 이진 사용하여 GCC에이를 컴파일 할 때 6,
은 공교롭게도, 나는 오류가 발생합니다. '
int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);
내가 배열 옵션의 혼합을 시도하고'밖으로 '를 사용하지만, 천국 :하지만 내가 가까이 libmodbus 헤더의 프로토 타입을 일치하도록 바피 (Vapi)의 내용을 수정 가야하는 방법을 잘 모르겠어요 한 번에 두 개 이상의 더블 바이트 레지스터를 가질 수있었습니다.
의견을 보내 주셔서 감사합니다.
완벽하고 고마워요. –